verilog串并轉(zhuǎn)換并串轉(zhuǎn)換_第1頁
verilog串并轉(zhuǎn)換并串轉(zhuǎn)換_第2頁
verilog串并轉(zhuǎn)換并串轉(zhuǎn)換_第3頁
verilog串并轉(zhuǎn)換并串轉(zhuǎn)換_第4頁
verilog串并轉(zhuǎn)換并串轉(zhuǎn)換_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上1.設計名稱:38譯碼器帶使能端的主要功能:實現(xiàn)38譯碼功能,并且在使能段處于低電平是輸出為設計框圖:設計代碼:module decoder3_8(a,b,ena);input 2:0 a;input ena;output 7:0 b;reg 7:0 b;always (ena,a)if(!ena)begin b=8'b;endelse begincase(a)3'b000: b=8'b;3'b001: b=8'b;3'b010: b=8'b;3'b011: b=8'b;3'b100: b

2、=8'b;3'b101: b=8'b;3'b110: b=8'b;3'b111: b=8'b;default: b=8'b;endcaseendendmodule仿真代碼:timescale 1ns/1nsmodule tb; reg 2:0 a; reg ena; wire 7:0 b; initial begin a = 3'b000; ena = 1'b0; #50; ena = 1'b1; #50; a=3'b001; #50; a=3'b010; #50; a=3'b011

3、; #50; a=3'b100; #50; a=3'b101; #50; a=3'b110; #50; a=3'b111; #50; $ stop; end decoder3_8 udecoder3_8( .a(a), .ena(ena), .b(b) );endmodule仿真結(jié)果:輔助說明:當ena為低電平時,無論a為何值,總是輸出,當ena為高電平時,輸出即隨a的數(shù)值變化而變化,當a為001時,b的值變?yōu)?;當a為010時,b的值變?yōu)椋@與設計時的功能是一致的。_2.設計名稱:83編碼器帶使能端的和優(yōu)先級主要功能:實現(xiàn)83編碼功能,并且在使能段處于低電平是輸

4、出為000,同時最高位的優(yōu)先級最高設計框圖:設計代碼:module undecoder8_3(a,b,ena);input 7:0 a;input ena;output 3:0 b;reg 3:0 b;always (ena,a)if(!ena)begin b=3'b000;endelse if(a7) b=3'b111;elseif(a6) b=3'b110;elseif(a5) b=3'b101;elseif(a4) b=3'b100;elseif(a3) b=3'b011;elseif(a2) b=3'b010;elseif(a1)

5、 b=3'b001;elseif(a0) b=3'b000;else b=3'b000;endmodule仿真代碼:module tb; reg 7:0 a; reg ena; wire 2:0 b; initial begin a = 8'b; ena = 1'b0; #50; ena = 1'b1; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; $stop;

6、 end undecoder8_3 unit1_undecoder8_3( .a(a), .ena(ena), .b(b) );endmodule仿真結(jié)果:輔助說明:當ena為低電平時,無論a為何值,總是輸出000,當ena為高電平時,輸出即隨a的數(shù)值變化而變化,當a為時,b為110,當a為是,b為101以此類推,同時最后一個波形為,當a為時,b為111,體現(xiàn)了優(yōu)先譯碼的功能,此結(jié)果和當初設計的功能一致的。_3.設計名稱:設計一個1:1的3分頻器主要功能:實現(xiàn)3分頻,同時高低電平比為1:1設計框圖:設計代碼:這個設計可以利用模三計數(shù)器分別在時鐘的上升和下降沿設計一個高低電平為1:2的3分頻,然

7、后將兩個波形相或即能得到結(jié)果。代碼一:module Devider2_1( /inputs clk, rst_n, /outputs opt1, opt2, opt); input clk; input rst_n; output opt; output opt1; output opt2; reg opt1; reg 1:0 temp1; reg opt2; reg 1:0 temp2; always(posedge clk) begin if(!rst_n) begin temp1 <= 2'd0; opt1 <= 1'b0; end else if(temp1

8、=1) begin opt1 <=1'b1; temp1 <= temp1 + 2'd1; end else if(temp1=2'd2)begin opt1 <= 1'b0; temp1 <= 2'd0;end elsebegin temp1 <= temp1+2'd1;endend always(negedge clk) begin if(!rst_n) begin temp2 <= 2'd0; opt2 <= 1'b0; end else if(temp2=1) begin opt2

9、 <=1'b1; temp2 <= temp2 + 2'd1; end else if(temp2=2'd2)begin opt2 <= 1'b0; temp2 <= 2'd0; end else begin temp2 <= temp2+2'd1; end end assign opt = opt1 | opt2; endmodule同時也可以用同樣的方法設計一個在上升和下降沿高低電平2:1的3分頻器,將兩個波形相與即可。代碼二:module Devider2_1( /inputs clk, rst_n, /out

10、puts opt1, opt2, opt); input clk; input rst_n; output opt; output opt1; output opt2; reg opt1; reg opt2; reg 1:0 temp1; reg 1:0 temp2; always(posedge clk) begin if(!rst_n) begin temp1 <= 2'd0; opt1 <= 1'b0;end /reset else if(temp1=2'd0) begin opt1<=1'b1; temp1 <= temp1 +

11、2'd1;end else if(temp1=2'd1)begin opt1 <=1'b1; temp1 <= temp1 + 2'd1;end else if(temp1=2'd2)begin opt1 <= 1'b0; temp1 <= 2'd0;endend always(negedge clk) begin if(!rst_n)begin temp2 <= 2'd0; opt2 <= 1'b0;end /reset else if(temp2=2'd0) begin op

12、t2<=1'b1; temp2 <= temp2 + 2'd1;end else if(temp2=2'd1) begin opt2 <=1'b1; temp2 <= temp2 + 2'd1;end else if(temp2=2'd2)begin opt2 <= 1'b0; temp2 <= 2'd0;endend assign opt = opt1&&opt2;endmodule仿真代碼:上面兩個代碼的仿真代碼是一樣的。timescale 1ns/1nsmodule tb;

13、 /inputs reg clk; reg rst_n; /outputs wire opt1; wire opt2; wire opt; /generate clk always #10 clk = clk; /tb starts Initial begin clk = 1'b0; rst_n = 1'b0; #100; rst_n = 1'b1; #500; $stop; end /Instant DUT Devider2_1 uDevider2_1( /inputs .clk(clk), .rst_n(rst_n), /outputs .opt1(opt1), .

14、opt2(opt2), .opt(opt) );endmodule仿真結(jié)果:(a)高低電平為1:2設計的(b)高低電平為2:1設計的輔助說明:(a) 中opt1為上升沿觸發(fā)的高低電平1:2的3分頻,opt2為下降沿觸發(fā)的高低電平為1:2的3分頻,可以看出在rst_n為0進行清復位,之后在rst_n為1是進行分頻,最后所得opt結(jié)果為1:1的3分頻,符合設計要求。(b)中opt1為上升沿觸發(fā)的高低電平2:1的3分頻,opt2為下降沿觸發(fā)的高低電平為2:1的3分頻,可以看出在rst_n為0進行清復位,之后在rst_n為1是進行分頻,最后所得opt結(jié)果為1:1的3分頻,符合設計要求。_4.設計名稱:

15、七人表決器主要功能:7個人進行表決,人數(shù)過4則LED燈亮,否則燈滅設計框圖:設計代碼:module v(vote,rst,Q);input 6:0vote;input rst;output Q;reg Q;reg 2:0c;always (vote or rst)begin c=0; if(rst) c=3'b000; else begin c=c+vote0; c=c+vote1; c=c+vote2; c=c+vote3; c=c+vote4; c=c+vote5; c=c+vote6; endif(c>3) Q=1;else Q=0; endendmodule仿真代碼:ti

16、mescale 1ns/1nsmodule q; reg rst; reg 6:0vote; wire Q; initial begin rst=0; vote=7'b;#50; rst=1;#50; rst=0;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; $stop;endv v_unit(.vote(vote),.rst(rst),.Q(Q);endmodule仿真結(jié)果:輔助說明:第一個表決為,有6人同

17、意,于是顯示通過,Q為高電平,第二個單位是,rst復位信號顯示為1,此時對表決器復位,于是Q清0,后面當rst為低電平時又可以開始表決,當最后一個表決信號只有1個人同意時,由于人數(shù)少于4,所以Q為0,不通過,結(jié)果與設計相仿。_5設計名稱:十進制計數(shù)器的設計主要功能:使能端為高電平且復位信號為低電平是,進行模十同步計數(shù),同時滿10 的時候清0并且進位co置1,在一個始終后默認高位已經(jīng)接受完進位信號將其清0。使能端為低電平時計數(shù)器保持輸出不變,當使能端為高電平,且復位信號為高電平時,將計數(shù)器異步清0.設計框圖:設計代碼:module ten(clk,rst_tong,rst_yi,a,co,ena

18、); input clk; input rst_tong; input rst_yi; input ena; output 3:0 a; output co; reg 3:0a; reg co;always(posedge clk or posedge rst_yi)beginco<=0;if(rst_yi) begin a<=4'b0000; co<=0;endif(!ena) beginco<=0;endelsebegin if(rst_tong)begin a<=4'b0000; co<=0;end else if(a<4'

19、;b1001) a<=a+4'b0001;elseif(a=4'b1001)begin a<=4'b0000; co<=1;endendendendmodule仿真代碼:timescale 1ns/1nsmodule tb; reg clk; reg rst_yi; reg ena; reg rst_tong; wire 3:0a; wire co; always #10 clk = clk; initial begin ena=0; clk = 1'b0; rst_yi= 1'b1; rst_tong=1'b0; #10; e

20、na=1; #14; rst_yi= 1'b0; #230; rst_yi= 1'b1; #20; rst_yi=1'b0; #20; ena=0; #30; rst_tong=1'b1; #500; $stop; end ten ten_unit(.clk(clk), .rst_yi(rst_yi), .rst_tong(rst_tong), .ena(ena), .a(a), .co(co) ); endmodule仿真結(jié)果:輔助說明:這個十進制計數(shù)器里面我設計了兩個復位端口,一個是同步復位端口rst_tong,一個是異步復位端口rst_yi,從仿真圖形中可

21、以看出,在使能端ena為低是計數(shù)器保持數(shù)值不變,輸出全是0,當使能端ena為高電平的時候,當異步復位rst_yi為高電平是實現(xiàn)異步清零,這個可以在rst_yi的第二個高電平處看清楚,當rst_yi為低電平時,若rst_tong為低電平,實現(xiàn)正常計數(shù),此時從0000計數(shù)到1001,在下一個時鐘周期產(chǎn)生一個半個周期的進位高電平co,在并且計數(shù)a重新變?yōu)?,當rst-tong為高電平時,在時鐘的上升沿進行同步置數(shù)此功能和當初的設計目標一致。_6:設計名稱: 4路搶答器主要功能: 完成搶答功能,并且在搶答結(jié)束的時候清0,在下一次搶答開始之前按搶答鍵無效。設計框圖:設計代碼:module qiang(a

22、,b,start); input 3:0 a; input start; output 3:0b; reg 3:0b; reg 3:0temp; always(a or start)begin if(!start) begin temp=0; b=0; end else if(temp= 4'b0000) begin temp=a; b=temp; end end endmodule 仿真代碼:timescale 1ns/1nsmodule tb; reg 3:0a; reg start; wire 3:0b; initial begin start=0; a=4'b0000;

23、 #10; start=1; #10; a=4'b0100; #10; a=4'b0110; #50; start=0; #10; a=4'b0100; #30; a=4'b0000; #50; start=1; #50; a=4'b1000; #50; $stop; end qiang qiang_unit( .a(a), .start(start), .b(b) );Endmodule仿真結(jié)果: 輔助說明:可以看出,當start為0,搶答器未啟動時,輸出為0000,當start為1時,此時a=0010,表明第二個人已經(jīng)先按下?lián)尨鹌?,這是輸出為0010

24、,之后a=0110,又有人再次之后按下?lián)尨鹌?,但是由于a【1】已經(jīng)先按下,所以a【2】按下后還是只能顯示0010,這就實現(xiàn)了搶答功能,當start=0是,這是輸出清零,這是輸入0100,由于搶答器未工作,所以輸出還是0000,后面當start又是1的時候,這時候a【3】搶答成功,所輸出又為1000,符合當初的設計功能。7.設計名稱:并串轉(zhuǎn)換主要功能:在沒有數(shù)據(jù)輸出時,輸出為x,此時ready信號為高,若load信號也為高時,則將輸入的數(shù)據(jù)傳輸給中間寄存器temp,然后resdy信號變?yōu)榈碗娖?,ready信號有temp【7】決定,當temp【7】中還有數(shù)據(jù)時,表明還沒有全部轉(zhuǎn)換完,則ready為

25、低,當temp【7】沒有數(shù)據(jù)顯示為x時,則ready為高,表明可以接收數(shù)據(jù)了。當接收完數(shù)據(jù)之后,在8個時鐘周期將信號輸出。設計框圖:設計代碼:module bcc(clk,ain,rst,bout,load,ready); input clk; input 7:0ain; input rst; input load; output bout; output ready; reg bout; reg 7:0temp; reg ready; always (posedge rst or posedge clk)begin if(rst)begin bout <=1'bx; temp

26、<=8'bxxxxxxxx; ready<=1;end else if(load && ready) temp<=ain;/if load is high leve and temp is empty,then,transport data if(temp7|!temp7) /temp7 has databegin bout<=temp7; /temp shift left,and temp0 equal x temp7:1<=temp6:0; temp0<=1'bx; ready<=0;end else begin b

27、out<=1'bx; ready<=1;end end endmodule仿真代碼:timescale 1ns/1ns module bcc_tb; reg clk; reg 7:0ain; reg rst; reg load; wire ready; wire bout; always #10 clk = clk; initialbegin clk=0; rst=1; load=0; ain=11; #10; rst=0; #10; load=1; #20; load=0; #20; ain=8; #40; load=1; #20; load=0; #100; load=

28、1; #20; load=0; #200; rst=1; #10; $stop;end bcc bcc_unit( .clk(clk), .ain(ain), .rst(rst), .load(load), .bout(bout), .ready(ready) ); Endmodule仿真結(jié)果:輔助說明:可以從仿真圖形中看出,在rst為高時,進行復位,當rst為低時,由于temp里面沒有數(shù)據(jù),所以ready信號為高,此時表明temp可以接受數(shù)據(jù),若load信號為高,之后temp則接收到ain的信號,此時temp里面有了數(shù)據(jù),則ready信號為0,不能再傳輸數(shù)據(jù),此時后8個時鐘周期輸出為,完成串

29、并轉(zhuǎn)換,期間就算load為高電平,但是ready信號為低,所以不會傳輸下一個數(shù)據(jù),只有當之后ready為高電平時,此時財貨執(zhí)行下一個數(shù)據(jù)的傳輸。此仿真波形與我當時設計的目標相符,基本達到設計目標。8.設計名稱:串并轉(zhuǎn)換主要功能:當rst為高電平時進行復位,當rst為低電平時,若 load為高電平且ready為高電平(ready信號有temp決定,若temp里面的數(shù)據(jù)已經(jīng)傳滿則ready為低電平,若temp數(shù)據(jù)還未傳滿,則ready為高電平)時將輸入數(shù)據(jù)傳給自己定義的中間寄存器temp,若temp接受完8位數(shù)據(jù),則ok信號為高電平并且將ready置為低電平,就可以將temp的值傳給bout輸出,傳輸完畢之后temp又被清空,此時ok又置為低電平,ready顯示高電平。設計框圖:設計代碼:module cbc(clk,ain,load,rst,ready,bout,ok); input clk; input ain; input load; input rst; output ready; output 7:0bout; output ok; reg ready; reg 7:0bout; reg 7:0temp; reg ok; always (posedge clk or posedge

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論