版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)字邏輯電路課程設(shè)計(jì)</p><p> VHDL數(shù)字信號發(fā)送和接收電路</p><p> 摘要: 將待發(fā)送的字符串進(jìn)行奇校驗(yàn)編碼,增加校驗(yàn)位,起始位’0 ’和終止位’1 ’。如果發(fā)送完一個信號后,沒有繼續(xù)發(fā)送,則接收端收到空閑信號串“1111…111”。采用串行方式發(fā)送并行輸入的數(shù)字信號,在接收端采用串行方式接收,在接收端進(jìn)行偶校驗(yàn),如果正確,說明信號傳輸正確,不
2、報(bào)警,否則報(bào)警。這個設(shè)計(jì)可以提高數(shù)字信號傳輸?shù)目煽啃?,減小其它信號的干擾,可以應(yīng)用于一些簡單的數(shù)字系統(tǒng)。</p><p><b> 電路設(shè)計(jì)</b></p><p> 電路的框圖如下圖所示</p><p> 設(shè)計(jì)內(nèi)容:設(shè)計(jì)一個5位數(shù)字信號的發(fā)送和接收電路,把并行碼變?yōu)榇写a發(fā)送,串行奇校驗(yàn)檢測器可通過異或?qū)崿F(xiàn)。在數(shù)據(jù)接收端,只有在代碼傳輸
3、無誤后,才把數(shù)據(jù)代碼并行輸出。數(shù)據(jù)傳送的格式采用異步串行通信的格式,包含起始位、數(shù)據(jù)位、校驗(yàn)位、停止位和空閑位。 </p><p> 數(shù)據(jù)發(fā)送模塊:將并行數(shù)據(jù)加上起始位、偶校驗(yàn)位和停止位,以串行方式發(fā)送出去。</p><p> 仿真結(jié)果:在test_bench里測試了10101、01001、11101這幾個信號,可以看到均實(shí)現(xiàn)了并轉(zhuǎn)串輸出</p><p> 接
4、收電路模塊:接收電路要實(shí)時(shí)檢測起始位’0 ’的到來,一旦檢測到起始位到,就要將這一幀數(shù)據(jù)接收下來,開始接受數(shù)據(jù),接收完成后,將數(shù)據(jù)位和校驗(yàn)位取出,若校驗(yàn)無誤,則并行送出,若有誤則報(bào)警。 </p><p><b> 仿真結(jié)果:</b></p><p> 我在test_bench 里串行輸入了0、1、0、1、0、0、0…</p><p> 第
5、一個0為起始位,可以看到接收數(shù)據(jù)為00101,接受正確,alarm = 0</p><p><b> 整體結(jié)構(gòu):</b></p><p> 包括數(shù)據(jù)發(fā)送和接收模塊,用component語句調(diào)用前兩個模塊,即可實(shí)現(xiàn)</p><p><b> 仿真結(jié)果</b></p><p><b>
6、 收獲</b></p><p> 這個自由創(chuàng)作剛開始準(zhǔn)備的時(shí)候覺得挺簡單,但真正開始編譯的時(shí)候,發(fā)現(xiàn)很多問題,有時(shí)候編譯通過了還是得不到正確的仿真波形,原因在于程序的思路有問題,只好再把程序流程在紙上模擬一遍,發(fā)現(xiàn)錯誤后再改正。通過這次設(shè)計(jì),從中對于VHDL語言有了更加深入的理解,對于數(shù)字信號的特點(diǎn)也有了初步的了解。設(shè)計(jì)過程中,遇到過許多困難,但在努力下,數(shù)字信號的發(fā)送和接收,能夠準(zhǔn)確的發(fā)送和接收,
7、最終通過仿真。</p><p> 幾點(diǎn)VHDL語法的收獲:</p><p> 1)在進(jìn)行代碼編寫前,應(yīng)先有一個明確的思路,可以通過紙上的模擬檢驗(yàn)程序是否有錯誤。</p><p> 2)test_bench里不同測試信號的process分開寫,不僅簡單明了,而且可以避免錯誤。</p><p> 3)在進(jìn)行頂層模塊的test_bench信
8、號書寫時(shí)應(yīng)當(dāng)賦初值,否則觀測不到信號。</p><p><b> 代碼附錄:</b></p><p><b> 1.發(fā)送模塊</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p&g
9、t; use ieee.std_logic_unsigned.all;</p><p> entity send is</p><p> port( a: in std_logic_vector(4 downto 0);</p><p> clk,start: in std_logic;</p><p> b:out std_lo
10、gic);</p><p><b> end send;</b></p><p> architecture behav of send is</p><p> signal a0 :std_logic_vector(4 downto 0);</p><p><b> begin</b>&l
11、t;/p><p> process(clk,a)</p><p> variable temp:std_logic_vector(6 downto 0);</p><p> variable temp0,m:std_logic;</p><p> variable cnt:integer range 0 to 8;</p>
12、<p><b> begin</b></p><p> if(clk'event and clk='1')then</p><p> if(m='0')then</p><p> temp0:='1';</p><p><b> en
13、d if;</b></p><p> if(a0 /= a)then</p><p><b> m:='1';</b></p><p> temp(5 downto 1):=a(4 downto 0); </p><p> temp(6):=a(4)xor a(3) xor a(2)
14、 xor a(1) xor a(0); </p><p> temp(0):='0';</p><p><b> a0 <= a;</b></p><p><b> end if; </b></p><p> if( m='1' and start=&
15、#39;0')then</p><p> temp0:=temp(0);</p><p> temp:='1'&temp(6 downto 1);</p><p> if(cnt<7)then </p><p> cnt:=cnt+1;</p><p><b>
16、; else</b></p><p><b> m:='0';</b></p><p> temp:="0000000";</p><p><b> cnt:=0;</b></p><p><b> end if;</b>
17、;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> b<=temp0;</b></p><p> end process;</p><p> end behav
18、;</p><p><b> 2.接收模塊</b></p><p> entity receive is</p><p> port(clk,re:in std_logic;</p><p> accept:out std_logic_vector(4 downto 0);</p><p>
19、; alarm:out std_logic);</p><p> end receive;</p><p> architecture arc of receive is</p><p><b> begin</b></p><p> process(clk)</p><p> var
20、iable a:std_logic;</p><p> variable cnt:integer range 0 to 7;</p><p> variable shift:std_logic_vector(5 downto 0);</p><p><b> begin</b></p><p> if clk&
21、#39;event and clk='1' then</p><p> if re='0' and cnt=0 then</p><p> alarm<='0';</p><p><b> a:='0';</b></p><p><b>
22、; end if;</b></p><p> if(a='0')then</p><p> if cnt<7 then</p><p> shift:=re&shift(5 downto 1); </p><p> cnt:=cnt+1;</p><p><b&
23、gt; else</b></p><p><b> cnt:=0;</b></p><p><b> a:='1';</b></p><p> if(shift(0) xor shift(1) xor shift(2) xor shift(3) xor shift(4) xor shif
24、t(5))='0' then</p><p> accept<=shift(4 downto 0); </p><p><b> else</b></p><p> alarm<='1'; </p><p><b> end if;</b>&l
25、t;/p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> end arc; </p&
26、gt;<p><b> 3.頂層模塊</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity signal_
27、send is</p><p> port(start: in std_logic;</p><p> string: in std_logic_vector(4 downto 0);</p><p> clk0: in std_logic;</p><p> rece:out std_logic_vector(4 downto 0)
28、;</p><p> warning:out std_logic</p><p><b> );</b></p><p> end signal_send;</p><p> architecture act of signal_send is</p><p> component se
29、nd is</p><p> port( a: in std_logic_vector(4 downto 0);</p><p> clk,start: in std_logic;</p><p> b:out std_logic);</p><p> end component;</p><p> com
30、ponent receive is</p><p> port(clk,re:in std_logic;</p><p> accept:out std_logic_vector(4 downto 0);</p><p> alarm:out std_logic);</p><p> end component;</p>
31、<p> signal c1: std_logic;</p><p><b> begin</b></p><p> u0:send port map (start=>start,a=>string,clk=>clk0,b=>c1);</p><p> u1:receive port map(cl
32、k=>clk0,re=>c1,accept=>rece,alarm=>warning); </p><p> end architecture;</p><p> 4.頂層模塊的test_bench</p><p> library ieee;</p><p> use ieee.std_logic_1164.
33、all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity signal_send_tb is</p><p> end signal_send_tb;</p><p> architecture behav of signal_send_tb is</p>
34、<p> component signal_send is</p><p> port(start: in std_logic;</p><p> string: in std_logic_vector(4 downto 0);</p><p> clk0: in std_logic;</p><p> rece:ou
35、t std_logic_vector(4 downto 0);</p><p> warning:out std_logic</p><p><b> );</b></p><p> end component;</p><p> signal start:std_logic;</p><p&
36、gt; signal clk:std_logic;</p><p> signal alarm0:std_logic:='0';</p><p> signal code,rec: std_logic_vector(4 downto 0);</p><p><b> begin</b></p><p
37、> u0:signal_send port map (start=>start,string=>code,clk0=>clk,rece=>rec,warning=>alarm0);</p><p><b> process</b></p><p><b> begin</b></p><
38、;p> clk <= '0';</p><p> wait for 1ns;</p><p> clk <= '1';</p><p> wait for 1ns;</p><p> end process; </p><p><b> proce
39、ss</b></p><p><b> begin</b></p><p> start<='1';</p><p> wait for 2ns;</p><p> start<='0';</p><p><b> wai
40、t;</b></p><p> end process;</p><p><b> process</b></p><p><b> begin </b></p><p> code<="00101";</p><p> w
41、ait for 30ns;</p><p> code<="01001";</p><p> wait for 30ns;</p><p> code<="11101";</p><p><b> wait;</b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vhdl課程設(shè)計(jì)--數(shù)字鐘的設(shè)計(jì)
- vhdl課程設(shè)計(jì)---樂曲演奏電路設(shè)計(jì)
- vhdl課程設(shè)計(jì)報(bào)告
- vhdl課程設(shè)計(jì)---多功能數(shù)字鐘
- 數(shù)字信號課程設(shè)計(jì)--數(shù)字信號處理
- 數(shù)字電路模塊的vhdl設(shè)計(jì)
- eda課程設(shè)計(jì)---樂曲硬件演奏電路的vhdl設(shè)計(jì)
- 樂曲硬件演奏電路的vhdl設(shè)計(jì) eda課程設(shè)計(jì)
- 數(shù)字信號課程設(shè)計(jì)
- 數(shù)字信號課程設(shè)計(jì)
- eda課程設(shè)計(jì)——基于vhdl語言的數(shù)字時(shí)鐘設(shè)計(jì)
- 數(shù)字信號課程設(shè)計(jì)報(bào)告
- vhdl課程設(shè)計(jì)--簡易數(shù)字頻率計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
- 數(shù)字信號處理課程設(shè)計(jì)
評論
0/150
提交評論