EDA技術與Verilog_HDL(潘松)第四章與第六章課后習題答案.ppt_第1頁
EDA技術與Verilog_HDL(潘松)第四章與第六章課后習題答案.ppt_第2頁
EDA技術與Verilog_HDL(潘松)第四章與第六章課后習題答案.ppt_第3頁
EDA技術與Verilog_HDL(潘松)第四章與第六章課后習題答案.ppt_第4頁
EDA技術與Verilog_HDL(潘松)第四章與第六章課后習題答案.ppt_第5頁
免費預覽已結束,剩余22頁可下載查看

下載本文檔

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

文檔簡介

1、第4章 Verilog HDL設計初步,習 題,4-1 舉例說明,Verilog HDL的操作符中,哪些操作符的運算結果總是一位的。 答: P74/74/80/92,4-2 wire型變量與reg型變量有什么本質區(qū)別,它們可用于什么類型語句中? 答:書上P2612629.2 Verilog HDL數(shù)據(jù)類型 reg主要是用于定義特定類型的變量,即寄存器型(Register)變量(或稱寄存器型數(shù)據(jù)類的變量)。如果沒有在模塊中顯式地定義信號為網(wǎng)線型變量,Verilog綜合器都會將其默認定義為wire型。過程語句always引導的順序語句中規(guī)定必須是reg型變量。 wire型變量不允許有多個驅動源,習

2、 題,4-3 阻塞賦值和非阻塞賦值有何區(qū)別? 答:Verilog中,用普通等號“=”作為阻塞式賦值語句的賦值符號,如y=b。 Verilog中,用普通等號“=”作為非阻塞式賦值語句的賦值符號,如y=b。 阻塞式賦值的特點是,一旦執(zhí)行完當前的賦值語句,賦值目標變量y即刻獲得來自等號右側表達式的計算值。如果在一個塊語句中含有多條阻塞式賦值語句,則當執(zhí)行到其中某條賦值語句時,其他語句將禁止執(zhí)行,即如同被阻塞了一樣。 非阻塞式賦值的特點是必須在塊語句執(zhí)行結束時才整體完成賦值操作。非阻塞的含義可以理解為在執(zhí)行當前語句時,對于塊中的其他語句的執(zhí)行情況一律不加限制,不加阻塞。這也可以理解為,在begin_e

3、nd塊中的所有賦值語句都可以并行運行。,4-4 舉例說明,為什么使用條件敘述不完整的條件句能導致產(chǎn)生時序模塊的綜合結果? 答: 當CLK發(fā)生了電平變化,但是從1變到0。這時無論D是否變化,都將啟動過程去執(zhí)行if語句;但此時CLK=0,無法執(zhí)行if語句,從而無法執(zhí)行賦值語句Q=D,于是Q只能保持原值不變(這就意味著需要在設計模塊中引入存儲元件)。 當CLK沒有發(fā)生任何變化,且CLK一直為0,而敏感信號D發(fā)生了變化。這時也能啟動過程,但由于CLK=0,無法執(zhí)行if語句,從而也就無法執(zhí)行賦值語句Q=D,導致Q只能保持原值(這也意味著需要在設計模塊中引入存儲元件)。 在以上兩種情況中,由于if語句不滿

4、足條件,于是將跳過賦值表達式Q=D,不執(zhí)行此賦值表達式而結束if語句和過程對于這種語言現(xiàn)象,Velilog綜合器解釋為,對于不滿足條件,跳過賦值語句Q=D不予執(zhí)行,即意味著保持Q的原值不變(保持前一次滿足if條件時Q被更新的值)。對于數(shù)字電路來說,當輸入改變后試圖保持一個值不變,就意味著使用具有存儲功能的元件,就是必須引進時序元件來保存Q中的原值,直到滿足if語句的判斷條件后才能更新Q中的值,于是便產(chǎn)生了時序元件。,module LATCH1 (CLK, D, Q); output Q; input CLK, D; reg Q; always (D or CLK) if(CLK)Q=D; /當

5、CLK=1時D被鎖入Q endmodule,4-5 用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。,4-5 用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。,module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input 2:0 A ; wire 2:0 A ; output 7:0 Y ; reg 7:0 Y ; reg s; always ( A ,G1, G2, G3) begin s =

6、G2 | G3 ; if (G1 = 0) Y = 8b1111_1111; else if (s) Y = 8b1111_1111; else case ( A ) 3b000: Y = 8b11111110; 3b001: Y = 8b11111101; 3b010: Y = 8b11111011; 3b011: Y = 8b11110111; 3b100: Y = 8b11101111; 3b101: Y = 8b11011111; 3b110: Y = 8b10111111; 3b111: Y = 8b01111111; default:Y = 8bxxxxxxxx; endcase

7、end endmodule,4-5 用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。,module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input 2:0 A ; wire 2:0 A ; output 7:0 Y ; reg 7:0 Y ; reg s; always ( A ,G1, G2, G3) begin s = G2 | G3 ; if (G1 = 0) Y = 8b1111_1111; else if (s) Y = 8b1111_

8、1111; else begin if (A=3b000)Y=8b11111110; else if (A=3b001)Y=8b11111101; else if (A=3b010)Y=8b11111011; else if (A=3b011)Y=8b11110111; else if (A=3b100)Y=8b11101111; else if (A=3b101)Y=8b11011111; else if (A=3b110)Y=8b10111111; else if (A=3b111)Y=8b01111111; else Y=8bxxxxxxxx;end end endmodule,/測試文

9、件,?部分請根據(jù)被測試的文件修改 module stimulus; reg 2:0A ; wire7:0Y ; reg G1 ,G2 ,G3; decoder3_8 DUT ( G1 ,Y ,G2 ,A ,G3 ); initial begin $monitor($time,A=%d,G1=%b,G2=%b, G3=%b,Y= %dn,A, G1, G2, G3, Y); end,initial begin G1=1 ;G2=1 ;G3=1;A=0; #10 G2=0;G1=0; #10 G2=0;G1=1; #10 G2=1;G1=0;G3=0; #10 G1=0;G1=1;G3=1; #1

10、0 G1=0;G1=0;G3=0; #10 G1=1;G2=0;G3=0; #50 A= 0; #50 A= 1; #50 A= 2; #50 A= 3; #50 A= 4; #50 A= 5; #50 A= 6; #50 A= 7; #50 $finish; end endmodule,習 題,4-6圖4-26所示的是雙2選1多路選擇器構成的電路MUXK。對于其中MUX21A,當s=0和s=1時,分別有y=a和y=b。試在一個模塊結構中用兩個過程來表達此電路。 答:參考實驗1,圖4-26 含2選1多路選擇器的模塊,module MUXK (a1, a2, a3, s0, s1, outy);

11、 input a1, a2, a3, s0, s1; output outy; wire outy; wire tmp; mux21a u1 (.a(a2),.b(a3),.s(s0),.y(tmp); mux21a u2 (.a (a1),.b (tmp),.s(s1),.y(outy); endmodule,習 題,4-7 給出1位全減器的VHDL描述。要求: (1)首先設計1位半減器,然后用例化語句將它們連接起來,圖4-28中h_suber是半減器,diff是輸出差,s_out是借位輸出,sub_in是借位輸入。 (2)根據(jù)圖4-27設計1位全減器。 (3)以1位全減器為基本硬件,構成串

12、行借位的8位減法器,要求用例化語句來完成此項設計。,圖4-27 1位全減器,/一個二進制半減器設計進行了闡述 module h_suber(x,y,diff,s_out); input x,y; outputdiff, s_out; assign diff=xy; assign s_out=(x) endmodule,module f_suber(x,y,sub_in,diffr,sub_out); /一個二進制全減器頂層設計進行了闡述 output diffr,sub_out; input x,y,sub_in; wire e,d,f; h_suber u1(x,y,e,d);/ h_sub

13、er u2(.x(e),.diff(diffr),.y(sub_in),.s_out(f);/ or2a u3(.a(d),.b(f),.c(sub_out); endmodule,x為被減數(shù),y為減數(shù), sub_in為低位的借位, diffr為差,sub_out為向高位的借位。,習 題,習 題,4-8 給出一個4選1多路選擇器的Verilog描述。此器件與圖4-1類似,但選通控制端有4個輸入:S0、S1、S2、S3。當且僅當S0=0時:Y=A;S1=0時:Y=B;S2=0時:Y=C;S3=0時:Y=D。,module MUX41a (A,B,C,D,S0,S1,S2,S3,Y); outpu

14、t Y; /定義Y為輸出信號 input A, B, C, D; input S0,S1,S2,S3; reg Y; /定義輸出端口信號Y為寄存器型變量 always (A,B,C,S0,S1,S2,S3 )begin /塊語句起始 if (S0=0)Y=A; /當S0 =0成立,即(S0 =0)=1時,Y=A; else if (S1=0)Y=B; /當(S1 =1)為真,則Y=B; else if (S2=0)Y=C; /當(S2 =2)為真,則Y=C; else if (S3=0) Y=D; /當(S3 =3)為真,即Y=D; end /塊語句結束 endmodule,4-9 把例4-2

15、1改成一異步清0,同步時鐘使能和異步數(shù)據(jù)加載型8位二進制加法計數(shù)器。,【例4-21】含有異步清0同步時鐘使能和同步數(shù)據(jù)加載功能的十進制計數(shù)器 module CNT10(CLK, RST, EN,LOAD,COUT,DOUT,DATA); input CLK, RST, EN,LOAD; /時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口 input 3:0DATA; /4位并行加載數(shù)據(jù)輸入口 output 3:0 DOUT; /計數(shù)數(shù)據(jù)輸出信號口 output COUT; /計數(shù)進位輸出 reg COUT; reg3:0 Q1; assign DOUT=Q1; /將內部寄存器的計數(shù)結果輸出至DOU

16、T always (posedge CLK or negedge RST or negedge LOAD) /時序過程 begin if(!RST)Q1=0; /RST=0時,對內部寄存器單元異步清0 else if(!LOAD)Q1=DATA; /當LOAD=0,異步向內部寄存器加載數(shù)據(jù) else if(EN)begin /同步使能EN=1,則允許加載或計數(shù) if(Q19)Q1=Q1+1; /當Q1小于9時,允許累加 else Q1=4b0000; /否則一個時鐘后清0返回初值 end end always (Q1) /組合電路之過程 if(Q1=4h9)COUT=1b1; /當Q1=100

17、1時,COUT輸出進位標志1 else COUT=1b0; /否則,輸出進位標志0 endmodule,習 題,4-10 分頻方法有多種,最簡單的是二分頻和偶數(shù)分頻甚至奇數(shù)分頻,這用觸發(fā)器或指定計數(shù)模的計數(shù)器即可辦到。但對于現(xiàn)場實現(xiàn)指定分頻比或小數(shù)分頻率的分頻電路的設計就不是很簡單了。 試對習題4-9的設計稍作修改,將其進位輸出COUT與異步加載控制LOAD連在一起,構成一個自動加載型16位二進制數(shù)計數(shù)器,也即一個16位可控的分頻器,給出其Verilog表述,并說明工作原理。設輸入頻率fi=4MHz,輸出頻率fo=516.51Hz(允許誤差0.1Hz),16位加載數(shù)值=?。(7744),mod

18、ule CNT10(CLK,RST,EN,COUT,DOUT,DATA); input CLK,RST,EN; /時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口 input3:0DATA; / 4位并行加載數(shù)據(jù)輸入口 output3:0DOUT; /計數(shù)數(shù)據(jù)輸出信號口 output COUT; /計數(shù)進位輸出 reg FULL; wire LD ; reg3:0 Q1; always (posedge CLK or posedge LD or negedge RST) /時序過程 begin if(!RST)begin Q1=0;FULL=0;end else if(LD) begin Q1=D

19、ATA;FULL=1;end else if(EN)begin Q1=Q1+1;FULL=0;end end assign LD=(Q1=4B0000); assign DOUT=Q1; /將內部寄存器的計數(shù)結果輸出至DOUT assign COUT=FULL; /輸出進位標志0 endmodule,module CNT16(CLK,RST,EN,COUT,DOUT,DATA); input CLK,RST,EN; /時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口 input15:0DATA; / 4位并行加載數(shù)據(jù)輸入口 output15:0DOUT; /計數(shù)數(shù)據(jù)輸出信號口 output COU

20、T; /計數(shù)進位輸出 reg FULL; wire LD ; reg15:0 Q1; always (posedge CLK or posedge LD or negedge RST) /時序過程 begin if(!RST)begin Q1=0;FULL=0;end else if(LD) begin Q1=DATA;FULL=1;end else if(EN)begin Q1=Q1+1;FULL=0;end end assign LD=(Q1=16d0); assign DOUT=Q1; /將內部寄存器的計數(shù)結果輸出至DOUT assign COUT=FULL; /輸出進位標志0 endm

21、odule,4-11 用Verilog設計一個功能類似74LS160的計數(shù)器。,同步十進制計數(shù)器74LS160,管腳圖:,引出端符號: TC 進位輸出端 CP 時鐘輸入端(上升沿有效) CEP 計數(shù)控制端 /MR異步清除輸入端(低電平有效) Q0Q3 輸出端 /PE同步并行置入控制端(低電平有效) CET 計數(shù)控制端 P0P3數(shù)據(jù)輸入端,功能表:,說明:H高電平 L低電平 X任意,module CNT10(CP, MR, CET, CEP , PE, TC, Q, P); output 3:0 Q; /計數(shù)數(shù)據(jù)輸出端 output TC; /TC進位輸出端 input CP,MR,CET,PE

22、,CEP; /時鐘,復位,時鐘使能,數(shù)據(jù)加載控制信號輸入口 input 3:0 P; /4位并行加載數(shù)據(jù)輸入口 reg3:0 Q; reg TC,s; always(posedge CP or negedge MR ) /CP 時鐘輸入端(上升沿有效) begin s=CETend end end endmodule,4-11 用Verilog設計一個功能類似74LS160的計數(shù)器。,同步十進制計數(shù)器74LS160,4-11 用Verilog設計一個功能類似74LS160的計數(shù)器。,module stimulus; reg CP,MR,CET,CEP; reg 3:0P;/,Q reg PE;

23、 wire3:0 Q; wire TC; CNT10 r1(CP, MR, CET, CEP , PE, TC, Q, P); initial CP=1b0; /?CP?0 always #5 CP=CP;/?5? initial begin CET=1b0;MR=1b1;PE=1b1;P=4d0; CEP=1b0; #5 P=4d5; #5 CET=1b1;CEP=1b1; #10 MR=1b0;,#10 MR=1b1; #30 P=4d7; #5 PE=1b0; #5 PE=1b1; #50 PE=1b0; #3 PE=1b1; #20 P=4d9; #100 PE=1b0; #10 PE

24、=1b0; #10 PE=1b1; #20 P=4d4; #20 $finish; end initial $monitor($time, CP=%b, MR=%b, CET=%b,CEP=%b,PE=%b,TC=%b,Q=%d,P =%d, CP, MR, CET,CEP,PE,TC,Q,P); endmodule,習 題,4-12 給出含有異步清零和計數(shù)使能的16位二進制加減可控計數(shù)器的Verilog HDL描述。,module updowncnt16_v(q,cout, d, load, ena, clk,clr, up_down); input 15:0 d; input load,

25、ena, clk, clrc, up_down; output 15:0 q; output cout; reg 15:0 q; always (posedge clk or negedge clr ) begin if(!clr) q=16h00 ; /異步清零,低電平有效 else if(ena) begin /計數(shù)使能端,高電平有效 if(!load)q=d; /同步置數(shù),高電平有效 if(up_down)q=q+1 ; /up_down=1時,加計數(shù) else q=q-1; end /up_down=0時,減計數(shù) end assign cout=up_down? / cout=1表示進

26、位輸出或者cout=0表示借位輸出 endmodule,up_down=1(進行加法操作)且輸出q15:0=0 xFFFFh時,cout=1表示進位輸出 up_down=0(進行減法操作)且q15:0=0 x0000h時,cout=0表示借位輸出,4-13 分別給出以下6個RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。,圖4-28 RTL圖1,圖4-29 RTL圖2,圖4-30 RTL圖3,圖4-31 RTL圖4,圖4-32 RTL圖5,圖4-33 RTL圖6,4-13 分別給出以下6個RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。,module RTL1

27、(CLK, CL, OUT); output OUT; input CLK, CL; reg Q; wire D; /*用assign連續(xù)賦值語句不可以*/ assign OUT=Q; assign D=(Q|CL); /*用門級電路可以*/ /not(OUT,Q); /nor(D,Q,CL); always (posedge CLK) Q=D; endmodule,圖4-28 RTL圖1,Cyclone II系列可以,M7000S也可以,4-13 分別給出以下6個RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。,圖4-29 RTL圖2,module RTL2(A, B, C, D,Y); output Y; input A, B, C, D; wire TP1,TP2; reg Y; /or(TP1,A,B); /*用門級電路可以*/ /and(TP2,C,D); assign TP1=A|B; /*用assign連續(xù)賦值語句也可以*/ assign TP2=C end endmodule,Cyclone II系列可以,M7000S也可以,4-13 分別給出以下6個RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。,圖4-30 RTL圖3,module RTL3(D1,D2,CLK,Q); output Q; input

溫馨提示

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

最新文檔

評論

0/150

提交評論