EDA技術(shù)與Verilog-HDL第四章與第六章課后習(xí)題答案剖析課件_第1頁
EDA技術(shù)與Verilog-HDL第四章與第六章課后習(xí)題答案剖析課件_第2頁
EDA技術(shù)與Verilog-HDL第四章與第六章課后習(xí)題答案剖析課件_第3頁
EDA技術(shù)與Verilog-HDL第四章與第六章課后習(xí)題答案剖析課件_第4頁
EDA技術(shù)與Verilog-HDL第四章與第六章課后習(xí)題答案剖析課件_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章

VerilogHDL設(shè)計(jì)初步

第4章

Ver習(xí)題

4-1舉例說明,VerilogHDL的操作符中,哪些操作符的運(yùn)算結(jié)果總是一位的。答:

P74/74/80/924-2wire型變量與reg型變量有什么本質(zhì)區(qū)別,它們可用于什么類型語句中?答:書上P261~262《9.2VerilogHDL數(shù)據(jù)類型》reg主要是用于定義特定類型的變量,即寄存器型(Register)變量(或稱寄存器型數(shù)據(jù)類的變量)。如果沒有在模塊中顯式地定義信號為網(wǎng)線型變量,Verilog綜合器都會將其默認(rèn)定義為wire型。過程語句always@引導(dǎo)的順序語句中規(guī)定必須是reg型變量。wire型變量不允許有多個(gè)驅(qū)動源習(xí)題4-1舉例說明,VerilogHDL的操習(xí)題

4-3阻塞賦值和非阻塞賦值有何區(qū)別?答:Verilog中,用普通等號“=”作為阻塞式賦值語句的賦值符號,如y=b。

Verilog中,用普通等號“<=”作為非阻塞式賦值語句的賦值符號,如y<=b。阻塞式賦值的特點(diǎn)是,一旦執(zhí)行完當(dāng)前的賦值語句,賦值目標(biāo)變量y即刻獲得來自等號右側(cè)表達(dá)式的計(jì)算值。如果在一個(gè)塊語句中含有多條阻塞式賦值語句,則當(dāng)執(zhí)行到其中某條賦值語句時(shí),其他語句將禁止執(zhí)行,即如同被阻塞了一樣。非阻塞式賦值的特點(diǎn)是必須在塊語句執(zhí)行結(jié)束時(shí)才整體完成賦值操作。非阻塞的含義可以理解為在執(zhí)行當(dāng)前語句時(shí),對于塊中的其他語句的執(zhí)行情況一律不加限制,不加阻塞。這也可以理解為,在begin_end塊中的所有賦值語句都可以并行運(yùn)行。習(xí)題4-3阻塞賦值和非阻塞賦值有何區(qū)別?4-4舉例說明,為什么使用條件敘述不完整的條件句能導(dǎo)致產(chǎn)生時(shí)序模塊的綜合結(jié)果?答:●當(dāng)CLK發(fā)生了電平變化,但是從1變到0。這時(shí)無論D是否變化,都將啟動過程去執(zhí)行if語句;但此時(shí)CLK=0,無法執(zhí)行if語句,從而無法執(zhí)行賦值語句Q<=D,于是Q只能保持原值不變(這就意味著需要在設(shè)計(jì)模塊中引入存儲元件)。●當(dāng)CLK沒有發(fā)生任何變化,且CLK一直為0,而敏感信號D發(fā)生了變化。這時(shí)也能啟動過程,但由于CLK=0,無法執(zhí)行if語句,從而也就無法執(zhí)行賦值語句Q<=D,導(dǎo)致Q只能保持原值(這也意味著需要在設(shè)計(jì)模塊中引入存儲元件)。在以上兩種情況中,由于if語句不滿足條件,于是將跳過賦值表達(dá)式Q<=D,不執(zhí)行此賦值表達(dá)式而結(jié)束if語句和過程.對于這種語言現(xiàn)象,Velilog綜合器解釋為,對于不滿足條件,跳過賦值語句Q<=D不予執(zhí)行,即意味著保持Q的原值不變(保持前一次滿足if條件時(shí)Q被更新的值)。對于數(shù)字電路來說,當(dāng)輸入改變后試圖保持一個(gè)值不變,就意味著使用具有存儲功能的元件,就是必須引進(jìn)時(shí)序元件來保存Q中的原值,直到滿足if語句的判斷條件后才能更新Q中的值,于是便產(chǎn)生了時(shí)序元件。

moduleLATCH1(CLK,D,Q);outputQ;inputCLK,D;regQ;always@(DorCLK)if(CLK)Q<=D; //當(dāng)CLK=1時(shí)D被鎖入Qendmodule

4-4舉例說明,為什么使用條件敘述不完整的條件句能導(dǎo)致產(chǎn)4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用c4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111;elsecase(A)3'b000:Y=8'b11111110; 3'b001:Y=8'b11111101; 3'b010:Y=8'b11111011; 3'b011:Y=8'b11110111; 3'b100:Y=8'b11101111; 3'b101:Y=8'b11011111; 3'b110:Y=8'b10111111; 3'b111:Y=8'b01111111; default:Y=8'bxxxxxxxx;endcaseendendmodule4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111; elsebeginif(A==3'b000)Y=8'b11111110; elseif(A==3'b001)Y=8'b11111101; elseif(A==3'b010)Y=8'b11111011; elseif(A==3'b011)Y=8'b11110111; elseif(A==3'b100)Y=8'b11101111; elseif(A==3'b101)Y=8'b11011111; elseif(A==3'b110)Y=8'b10111111; elseif(A==3'b111)Y=8'b01111111; elseY=8'bxxxxxxxx;endendendmodule4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器//測試文件,??部分請根據(jù)被測試的文件修改modulestimulus;reg[2:0]A;wire[7:0]Y;regG1,G2,G3;decoder3_8DUT(G1,Y,G2,A,G3);initialbegin$monitor($time,"A=%d,G1=%b,G2=%b,G3=%b,Y=%d\n",A,G1,G2,G3,Y);endinitialbeginG1=1;G2=1;G3=1;A=0;#10G2=0;G1=0;#10G2=0;G1=1;#10G2=1;G1=0;G3=0;#10G1=0;G1=1;G3=1;#10G1=0;G1=0;G3=0;#10G1=1;G2=0;G3=0;#50A=0;#50A=1;#50A=2;#50A=3;#50A=4;#50A=5;#50A=6;#50A=7;#50$finish;endendmodule//測試文件,??部分請根據(jù)被測試的文件修改initial習(xí)題

4-6圖4-26所示的是雙2選1多路選擇器構(gòu)成的電路MUXK。對于其中MUX21A,當(dāng)s=0和s=1時(shí),分別有y=a和y=b。試在一個(gè)模塊結(jié)構(gòu)中用兩個(gè)過程來表達(dá)此電路。答:參考實(shí)驗(yàn)1圖4-26含2選1多路選擇器的模塊moduleMUXK(a1,a2,a3,s0,s1,outy);inputa1,a2,a3,s0,s1;outputouty;wireouty;wiretmp;mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));endmodule習(xí)題4-6圖4-26所示的是雙2選1多路選擇器構(gòu)習(xí)題

4-7給出1位全減器的VHDL描述。要求:(1)首先設(shè)計(jì)1位半減器,然后用例化語句將它們連接起來,圖4-28中h_suber是半減器,diff是輸出差,s_out是借位輸出,sub_in是借位輸入。(2)根據(jù)圖4-27設(shè)計(jì)1位全減器。(3)以1位全減器為基本硬件,構(gòu)成串行借位的8位減法器,要求用例化語句來完成此項(xiàng)設(shè)計(jì)。

圖4-271位全減器習(xí)題4-7給出1位全減器的VHDL描述。要求:xydiffs_out0000011110101100//一個(gè)二進(jìn)制半減器設(shè)計(jì)進(jìn)行了闡述moduleh_suber(x,y,diff,s_out); inputx,y; output diff,s_out; assigndiff=x^y; assigns_out=(~x)&y;endmodule

modulef_suber(x,y,sub_in,diffr,sub_out); //一個(gè)二進(jìn)制全減器頂層設(shè)計(jì)進(jìn)行了闡述

outputdiffr,sub_out;inputx,y,sub_in;wiree,d,f;h_suberu1(x,y,e,d); //h_suberu2(.x(e),.diff(diffr),.y(sub_in),.s_out(f));//or2au3(.a(d),.b(f),.c(sub_out));endmodule

xysub_indiffrsub_out0000000111010110110110010101001100011111x為被減數(shù),y為減數(shù),sub_in為低位的借位,diffr為差,sub_out為向高位的借位。習(xí)題

xydiffs_out0000011110101100//一習(xí)題4-8給出一個(gè)4選1多路選擇器的Verilog描述。此器件與圖4-1類似,但選通控制端有4個(gè)輸入:S0、S1、S2、S3。當(dāng)且僅當(dāng)S0=0時(shí):Y=A;S1=0時(shí):Y=B;S2=0時(shí):Y=C;S3=0時(shí):Y=D。moduleMUX41a(A,B,C,D,S0,S1,S2,S3,Y);outputY;//定義Y為輸出信號

inputA,B,C,D;inputS0,S1,S2,S3;regY;//定義輸出端口信號Y為寄存器型變量

always@(A,B,C,S0,S1,S2,S3)begin//塊語句起始

if(S0==0)Y=A;//當(dāng)S0==0成立,即(S0==0)=1時(shí),Y=A;

elseif(S1==0)Y=B;//當(dāng)(S1==1)為真,則Y=B;

elseif(S2==0)Y=C;//當(dāng)(S2==2)為真,則Y=C;

elseif(S3==0)Y=D;//當(dāng)(S3==3)為真,即Y=D;

end//塊語句結(jié)束endmodule習(xí)題4-8給出一個(gè)4選1多路選擇器的Verilo4-9把例4-21改成一異步清0,同步時(shí)鐘使能和異步數(shù)據(jù)加載型8位二進(jìn)制加法計(jì)數(shù)器?!纠?-21】含有異步清0同步時(shí)鐘使能和同步數(shù)據(jù)加載功能的十進(jìn)制計(jì)數(shù)器moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);inputCLK,RST,EN,LOAD;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[3:0]DATA;//4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regCOUT;

reg[3:0]Q1;assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTalways@(posedgeCLKornegedgeRSTornegedgeLOAD)//時(shí)序過程

begin if(!RST)Q1<=0;//RST=0時(shí),對內(nèi)部寄存器單元異步清0

elseif(!LOAD)Q1<=DATA;//當(dāng)LOAD=0,異步向內(nèi)部寄存器加載數(shù)據(jù)

elseif(EN)begin//同步使能EN=1,則允許加載或計(jì)數(shù)

if(Q1<9)Q1<=Q1+1;//當(dāng)Q1小于9時(shí),允許累加

elseQ1<=4'b0000;//否則一個(gè)時(shí)鐘后清0返回初值 endendalways@(Q1)//組合電路之過程

if(Q1==4'h9)COUT=1'b1;//當(dāng)Q1=1001時(shí),COUT輸出進(jìn)位標(biāo)志1 elseCOUT=1'b0;

//否則,輸出進(jìn)位標(biāo)志0endmodule

4-9把例4-21改成一異步清0,同步時(shí)鐘使能和異步數(shù)據(jù)習(xí)題

4-10分頻方法有多種,最簡單的是二分頻和偶數(shù)分頻甚至奇數(shù)分頻,這用觸發(fā)器或指定計(jì)數(shù)模的計(jì)數(shù)器即可辦到。但對于現(xiàn)場實(shí)現(xiàn)指定分頻比或小數(shù)分頻率的分頻電路的設(shè)計(jì)就不是很簡單了。試對習(xí)題4-9的設(shè)計(jì)稍作修改,將其進(jìn)位輸出COUT與異步加載控制LOAD連在一起,構(gòu)成一個(gè)自動加載型16位二進(jìn)制數(shù)計(jì)數(shù)器,也即一個(gè)16位可控的分頻器,給出其Verilog表述,并說明工作原理。設(shè)輸入頻率fi=4MHz,輸出頻率fo=516.5±1Hz(允許誤差±0.1Hz),16位加載數(shù)值=?。(7744)習(xí)題4-10分頻方法有多種,最簡單的是二分moduleCNT10(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[3:0]DATA;//

4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regFULL;wireLD;reg[3:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//時(shí)序過程

beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==4'B0000);assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTassignCOUT=FULL;//輸出進(jìn)位標(biāo)志0endmodulemoduleCNT10(CLK,RST,EN,COUT,DmoduleCNT16(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[15:0]DATA;//

4位并行加載數(shù)據(jù)輸入口output[15:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regFULL;wireLD;reg[15:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//時(shí)序過程

beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==16'd0);

assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTassignCOUT=FULL;//輸出進(jìn)位標(biāo)志0endmodulemoduleCNT16(CLK,RST,EN,COUT,D4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。同步十進(jìn)制計(jì)數(shù)器74LS160管腳圖:引出端符號:TC進(jìn)位輸出端CP時(shí)鐘輸入端(上升沿有效)CEP計(jì)數(shù)控制端/MR異步清除輸入端(低電平有效)Q0~Q3輸出端/PE同步并行置入控制端(低電平有效)CET計(jì)數(shù)控制端P0~P3數(shù)據(jù)輸入端功能表:說明:H-高電平

L-低電平

X-任意

4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的moduleCNT10(CP,MR,CET,CEP,PE,TC,Q,P);output[3:0]Q;//計(jì)數(shù)數(shù)據(jù)輸出端

outputTC;//TC進(jìn)位輸出端

inputCP,MR,CET,PE,CEP;//時(shí)鐘,復(fù)位,時(shí)鐘使能,數(shù)據(jù)加載控制信號輸入口

input[3:0]P;//4位并行加載數(shù)據(jù)輸入口

reg[3:0]Q;

regTC,s;always@(posedgeCPornegedgeMR

)//CP時(shí)鐘輸入端(上升沿有效)

begin

s<=CET&CEP;

if(!MR)beginQ=0;end//MR異步清除輸入端(低電平有效)elsebeginif(!PE)beginQ=P;end//PE同步并行置入控制端(低電平有效)elseif(s)beginQ=Q+1;if(Q==4'b1111)beginTC=1;endelsebeginTC=0;endendelsebeginQ=Q;endend

endendmodule

4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。同步十進(jìn)制計(jì)數(shù)器74LS160moduleCNT10(CP,MR,CET,CEP4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。modulestimulus;regCP,MR,CET,CEP;reg[3:0]P;//,QregPE;wire[3:0]Q;wireTC;CNT10r1(CP,MR,CET,CEP,PE,TC,Q,P);initialCP=1'b0; //?CP???0always#5CP=~CP; //?5???????????initialbeginCET=1'b0;MR=1'b1;PE=1'b1;P=4'd0;CEP=1'b0;#5P=4'd5;#5CET=1'b1;CEP=1'b1;#10MR=1'b0;#10MR=1'b1;#30P=4'd7;#5PE=1'b0;#5PE=1'b1;#50PE=1'b0;#3PE=1'b1;#20P=4'd9;#100PE=1'b0;#10PE=1'b0;#10PE=1'b1;#20P=4'd4;#20$finish; endinitial$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);endmodule4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的習(xí)題

4-12給出含有異步清零和計(jì)數(shù)使能的16位二進(jìn)制加減可控計(jì)數(shù)器的VerilogHDL描述。moduleupdowncnt16_v(q,cout,d,load,ena,clk,clr,up_down);input[15:0]d;inputload,ena,clk,clrc,up_down;output[15:0]q;outputcout;reg[15:0]q;always@(posedgeclkornegedgeclr

)beginif(!clr)q=16‘h00;//異步清零,低電平有效

elseif(ena)begin//計(jì)數(shù)使能端,高電平有效

if(!load)q=d;//同步置數(shù),高電平有效

if(up_down)q=q+1;

//up_down=1時(shí),加計(jì)數(shù)

elseq=q-1;end//up_down=0時(shí),減計(jì)數(shù)

endassigncout=up_down?&q:|q;

//cout=1表示進(jìn)位輸出或者cout=0表示借位輸出

endmodule

up_down=1(進(jìn)行加法操作)且輸出q[15:0]=0xFFFFh時(shí),cout=1表示進(jìn)位輸出up_down=0(進(jìn)行減法操作)且q[15:0]=0x0000h時(shí),cout=0表示借位輸出

習(xí)題4-12給出含有異步清零和計(jì)數(shù)使能的16位4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-28RTL圖1圖4-29RTL圖2圖4-30RTL圖3圖4-31RTL圖4圖4-32RTL圖5圖4-33RTL圖64-13分別給出以下6個(gè)RTL圖的Verilog描述,注4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。moduleRTL1(CLK,CL,OUT);outputOUT;inputCLK,CL;regQ;wireD;/*用assign連續(xù)賦值語句不可以*/assignOUT=~Q;assignD=~(Q|CL);/*用門級電路可以*///not(OUT,Q);//nor(D,Q,CL);always@(posedgeCLK)Q=D;endmodule圖4-28RTL圖1CycloneII系列可以,M7000S也可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-29RTL圖2moduleRTL2(A,B,C,D,Y);outputY;inputA,B,C,D;wireTP1,TP2;regY;//or(TP1,A,B);/*用門級電路可以*///and(TP2,C,D);assignTP1=A|B;/*用assign連續(xù)賦值語句也可以*/assignTP2=C&D;always@(TP1,TP2,A)beginif(TP1==1)Y=TP1^TP2;elseY=A;endendmoduleCycloneII系列可以,M7000S也可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-30RTL圖3moduleRTL3(D1,D2,CLK,Q);outputQ;inputD1,D2,CLK;wireAT;regQ;always@(D1orCLKorD2)beginif(CLK)beginif(D1)Q<=D2;elseQ<=CLK;endendendmoduleCycloneII系列可以,M7000S也可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注圖4-31RTL圖4?moduleRTL4(D,EN,CLK,SET,RESET,Q);outputQ;inputD,EN,CLK,SET,RESET;regQ;always@(posedgeCLKorposedgeRESETorposedgeSET)beginif(RESET==1)Q<=0; elseif(SET==1)Q<=1; elseif(EN==1)Q<=D; elseQ<=Q;endendmoduleCycloneII系列可以,M7000S不可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-31RTL圖4?moduleRTL4(D,EN,4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-32RTL圖5moduleRTL5(D,EN,CLK,RST,Q1,Q);outputQ1,Q;inputD,EN,CLK,RST;regQ1,Q;always@(posedgeCLKornegedgeRST)beginif(!RST)Q<=0; elseif(EN)Q<=D; Q1<=(~(D&EN))|RST;end endmoduleCycloneII系列可以,M7000S不可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注4-13分別給出以下6個(gè)RTL圖的Verilog描述,注意其中的D觸發(fā)器和鎖存器的表述。圖4-33RTL圖6moduleRTL6(CLK,D,Q,DOUT,RST);outputQ,DOUT;inputCLK,D,RST;regQ,DOUT;always@(posedgeCLK)begin if(!RST)beginQ=D;end elseQ=0;DOUT=D^Q;end endmoduleCycloneII系列可以,M7000S也可以4-13分別給出以下6個(gè)RTL圖的Verilog描述,注

第4章

VerilogHDL設(shè)計(jì)初步

第4章

Ver習(xí)題

4-1舉例說明,VerilogHDL的操作符中,哪些操作符的運(yùn)算結(jié)果總是一位的。答:

P74/74/80/924-2wire型變量與reg型變量有什么本質(zhì)區(qū)別,它們可用于什么類型語句中?答:書上P261~262《9.2VerilogHDL數(shù)據(jù)類型》reg主要是用于定義特定類型的變量,即寄存器型(Register)變量(或稱寄存器型數(shù)據(jù)類的變量)。如果沒有在模塊中顯式地定義信號為網(wǎng)線型變量,Verilog綜合器都會將其默認(rèn)定義為wire型。過程語句always@引導(dǎo)的順序語句中規(guī)定必須是reg型變量。wire型變量不允許有多個(gè)驅(qū)動源習(xí)題4-1舉例說明,VerilogHDL的操習(xí)題

4-3阻塞賦值和非阻塞賦值有何區(qū)別?答:Verilog中,用普通等號“=”作為阻塞式賦值語句的賦值符號,如y=b。

Verilog中,用普通等號“<=”作為非阻塞式賦值語句的賦值符號,如y<=b。阻塞式賦值的特點(diǎn)是,一旦執(zhí)行完當(dāng)前的賦值語句,賦值目標(biāo)變量y即刻獲得來自等號右側(cè)表達(dá)式的計(jì)算值。如果在一個(gè)塊語句中含有多條阻塞式賦值語句,則當(dāng)執(zhí)行到其中某條賦值語句時(shí),其他語句將禁止執(zhí)行,即如同被阻塞了一樣。非阻塞式賦值的特點(diǎn)是必須在塊語句執(zhí)行結(jié)束時(shí)才整體完成賦值操作。非阻塞的含義可以理解為在執(zhí)行當(dāng)前語句時(shí),對于塊中的其他語句的執(zhí)行情況一律不加限制,不加阻塞。這也可以理解為,在begin_end塊中的所有賦值語句都可以并行運(yùn)行。習(xí)題4-3阻塞賦值和非阻塞賦值有何區(qū)別?4-4舉例說明,為什么使用條件敘述不完整的條件句能導(dǎo)致產(chǎn)生時(shí)序模塊的綜合結(jié)果?答:●當(dāng)CLK發(fā)生了電平變化,但是從1變到0。這時(shí)無論D是否變化,都將啟動過程去執(zhí)行if語句;但此時(shí)CLK=0,無法執(zhí)行if語句,從而無法執(zhí)行賦值語句Q<=D,于是Q只能保持原值不變(這就意味著需要在設(shè)計(jì)模塊中引入存儲元件)。●當(dāng)CLK沒有發(fā)生任何變化,且CLK一直為0,而敏感信號D發(fā)生了變化。這時(shí)也能啟動過程,但由于CLK=0,無法執(zhí)行if語句,從而也就無法執(zhí)行賦值語句Q<=D,導(dǎo)致Q只能保持原值(這也意味著需要在設(shè)計(jì)模塊中引入存儲元件)。在以上兩種情況中,由于if語句不滿足條件,于是將跳過賦值表達(dá)式Q<=D,不執(zhí)行此賦值表達(dá)式而結(jié)束if語句和過程.對于這種語言現(xiàn)象,Velilog綜合器解釋為,對于不滿足條件,跳過賦值語句Q<=D不予執(zhí)行,即意味著保持Q的原值不變(保持前一次滿足if條件時(shí)Q被更新的值)。對于數(shù)字電路來說,當(dāng)輸入改變后試圖保持一個(gè)值不變,就意味著使用具有存儲功能的元件,就是必須引進(jìn)時(shí)序元件來保存Q中的原值,直到滿足if語句的判斷條件后才能更新Q中的值,于是便產(chǎn)生了時(shí)序元件。

moduleLATCH1(CLK,D,Q);outputQ;inputCLK,D;regQ;always@(DorCLK)if(CLK)Q<=D; //當(dāng)CLK=1時(shí)D被鎖入Qendmodule

4-4舉例說明,為什么使用條件敘述不完整的條件句能導(dǎo)致產(chǎn)4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用c4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111;elsecase(A)3'b000:Y=8'b11111110; 3'b001:Y=8'b11111101; 3'b010:Y=8'b11111011; 3'b011:Y=8'b11110111; 3'b100:Y=8'b11101111; 3'b101:Y=8'b11011111; 3'b110:Y=8'b10111111; 3'b111:Y=8'b01111111; default:Y=8'bxxxxxxxx;endcaseendendmodule4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111; elsebeginif(A==3'b000)Y=8'b11111110; elseif(A==3'b001)Y=8'b11111101; elseif(A==3'b010)Y=8'b11111011; elseif(A==3'b011)Y=8'b11110111; elseif(A==3'b100)Y=8'b11101111; elseif(A==3'b101)Y=8'b11011111; elseif(A==3'b110)Y=8'b10111111; elseif(A==3'b111)Y=8'b01111111; elseY=8'bxxxxxxxx;endendendmodule4-5用Verilog設(shè)計(jì)一個(gè)3-8譯碼器//測試文件,??部分請根據(jù)被測試的文件修改modulestimulus;reg[2:0]A;wire[7:0]Y;regG1,G2,G3;decoder3_8DUT(G1,Y,G2,A,G3);initialbegin$monitor($time,"A=%d,G1=%b,G2=%b,G3=%b,Y=%d\n",A,G1,G2,G3,Y);endinitialbeginG1=1;G2=1;G3=1;A=0;#10G2=0;G1=0;#10G2=0;G1=1;#10G2=1;G1=0;G3=0;#10G1=0;G1=1;G3=1;#10G1=0;G1=0;G3=0;#10G1=1;G2=0;G3=0;#50A=0;#50A=1;#50A=2;#50A=3;#50A=4;#50A=5;#50A=6;#50A=7;#50$finish;endendmodule//測試文件,??部分請根據(jù)被測試的文件修改initial習(xí)題

4-6圖4-26所示的是雙2選1多路選擇器構(gòu)成的電路MUXK。對于其中MUX21A,當(dāng)s=0和s=1時(shí),分別有y=a和y=b。試在一個(gè)模塊結(jié)構(gòu)中用兩個(gè)過程來表達(dá)此電路。答:參考實(shí)驗(yàn)1圖4-26含2選1多路選擇器的模塊moduleMUXK(a1,a2,a3,s0,s1,outy);inputa1,a2,a3,s0,s1;outputouty;wireouty;wiretmp;mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));endmodule習(xí)題4-6圖4-26所示的是雙2選1多路選擇器構(gòu)習(xí)題

4-7給出1位全減器的VHDL描述。要求:(1)首先設(shè)計(jì)1位半減器,然后用例化語句將它們連接起來,圖4-28中h_suber是半減器,diff是輸出差,s_out是借位輸出,sub_in是借位輸入。(2)根據(jù)圖4-27設(shè)計(jì)1位全減器。(3)以1位全減器為基本硬件,構(gòu)成串行借位的8位減法器,要求用例化語句來完成此項(xiàng)設(shè)計(jì)。

圖4-271位全減器習(xí)題4-7給出1位全減器的VHDL描述。要求:xydiffs_out0000011110101100//一個(gè)二進(jìn)制半減器設(shè)計(jì)進(jìn)行了闡述moduleh_suber(x,y,diff,s_out); inputx,y; output diff,s_out; assigndiff=x^y; assigns_out=(~x)&y;endmodule

modulef_suber(x,y,sub_in,diffr,sub_out); //一個(gè)二進(jìn)制全減器頂層設(shè)計(jì)進(jìn)行了闡述

outputdiffr,sub_out;inputx,y,sub_in;wiree,d,f;h_suberu1(x,y,e,d); //h_suberu2(.x(e),.diff(diffr),.y(sub_in),.s_out(f));//or2au3(.a(d),.b(f),.c(sub_out));endmodule

xysub_indiffrsub_out0000000111010110110110010101001100011111x為被減數(shù),y為減數(shù),sub_in為低位的借位,diffr為差,sub_out為向高位的借位。習(xí)題

xydiffs_out0000011110101100//一習(xí)題4-8給出一個(gè)4選1多路選擇器的Verilog描述。此器件與圖4-1類似,但選通控制端有4個(gè)輸入:S0、S1、S2、S3。當(dāng)且僅當(dāng)S0=0時(shí):Y=A;S1=0時(shí):Y=B;S2=0時(shí):Y=C;S3=0時(shí):Y=D。moduleMUX41a(A,B,C,D,S0,S1,S2,S3,Y);outputY;//定義Y為輸出信號

inputA,B,C,D;inputS0,S1,S2,S3;regY;//定義輸出端口信號Y為寄存器型變量

always@(A,B,C,S0,S1,S2,S3)begin//塊語句起始

if(S0==0)Y=A;//當(dāng)S0==0成立,即(S0==0)=1時(shí),Y=A;

elseif(S1==0)Y=B;//當(dāng)(S1==1)為真,則Y=B;

elseif(S2==0)Y=C;//當(dāng)(S2==2)為真,則Y=C;

elseif(S3==0)Y=D;//當(dāng)(S3==3)為真,即Y=D;

end//塊語句結(jié)束endmodule習(xí)題4-8給出一個(gè)4選1多路選擇器的Verilo4-9把例4-21改成一異步清0,同步時(shí)鐘使能和異步數(shù)據(jù)加載型8位二進(jìn)制加法計(jì)數(shù)器?!纠?-21】含有異步清0同步時(shí)鐘使能和同步數(shù)據(jù)加載功能的十進(jìn)制計(jì)數(shù)器moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);inputCLK,RST,EN,LOAD;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[3:0]DATA;//4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regCOUT;

reg[3:0]Q1;assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTalways@(posedgeCLKornegedgeRSTornegedgeLOAD)//時(shí)序過程

begin if(!RST)Q1<=0;//RST=0時(shí),對內(nèi)部寄存器單元異步清0

elseif(!LOAD)Q1<=DATA;//當(dāng)LOAD=0,異步向內(nèi)部寄存器加載數(shù)據(jù)

elseif(EN)begin//同步使能EN=1,則允許加載或計(jì)數(shù)

if(Q1<9)Q1<=Q1+1;//當(dāng)Q1小于9時(shí),允許累加

elseQ1<=4'b0000;//否則一個(gè)時(shí)鐘后清0返回初值 endendalways@(Q1)//組合電路之過程

if(Q1==4'h9)COUT=1'b1;//當(dāng)Q1=1001時(shí),COUT輸出進(jìn)位標(biāo)志1 elseCOUT=1'b0;

//否則,輸出進(jìn)位標(biāo)志0endmodule

4-9把例4-21改成一異步清0,同步時(shí)鐘使能和異步數(shù)據(jù)習(xí)題

4-10分頻方法有多種,最簡單的是二分頻和偶數(shù)分頻甚至奇數(shù)分頻,這用觸發(fā)器或指定計(jì)數(shù)模的計(jì)數(shù)器即可辦到。但對于現(xiàn)場實(shí)現(xiàn)指定分頻比或小數(shù)分頻率的分頻電路的設(shè)計(jì)就不是很簡單了。試對習(xí)題4-9的設(shè)計(jì)稍作修改,將其進(jìn)位輸出COUT與異步加載控制LOAD連在一起,構(gòu)成一個(gè)自動加載型16位二進(jìn)制數(shù)計(jì)數(shù)器,也即一個(gè)16位可控的分頻器,給出其Verilog表述,并說明工作原理。設(shè)輸入頻率fi=4MHz,輸出頻率fo=516.5±1Hz(允許誤差±0.1Hz),16位加載數(shù)值=?。(7744)習(xí)題4-10分頻方法有多種,最簡單的是二分moduleCNT10(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[3:0]DATA;//

4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regFULL;wireLD;reg[3:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//時(shí)序過程

beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==4'B0000);assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTassignCOUT=FULL;//輸出進(jìn)位標(biāo)志0endmodulemoduleCNT10(CLK,RST,EN,COUT,DmoduleCNT16(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//時(shí)鐘,時(shí)鐘使能,復(fù)位,數(shù)據(jù)加載控制信號輸入口input[15:0]DATA;//

4位并行加載數(shù)據(jù)輸入口output[15:0]DOUT;//計(jì)數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計(jì)數(shù)進(jìn)位輸出regFULL;wireLD;reg[15:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//時(shí)序過程

beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==16'd0);

assignDOUT=Q1;//將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTassignCOUT=FULL;//輸出進(jìn)位標(biāo)志0endmodulemoduleCNT16(CLK,RST,EN,COUT,D4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。同步十進(jìn)制計(jì)數(shù)器74LS160管腳圖:引出端符號:TC進(jìn)位輸出端CP時(shí)鐘輸入端(上升沿有效)CEP計(jì)數(shù)控制端/MR異步清除輸入端(低電平有效)Q0~Q3輸出端/PE同步并行置入控制端(低電平有效)CET計(jì)數(shù)控制端P0~P3數(shù)據(jù)輸入端功能表:說明:H-高電平

L-低電平

X-任意

4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的moduleCNT10(CP,MR,CET,CEP,PE,TC,Q,P);output[3:0]Q;//計(jì)數(shù)數(shù)據(jù)輸出端

outputTC;//TC進(jìn)位輸出端

inputCP,MR,CET,PE,CEP;//時(shí)鐘,復(fù)位,時(shí)鐘使能,數(shù)據(jù)加載控制信號輸入口

input[3:0]P;//4位并行加載數(shù)據(jù)輸入口

reg[3:0]Q;

regTC,s;always@(posedgeCPornegedgeMR

)//CP時(shí)鐘輸入端(上升沿有效)

begin

s<=CET&CEP;

if(!MR)beginQ=0;end//MR異步清除輸入端(低電平有效)elsebeginif(!PE)beginQ=P;end//PE同步并行置入控制端(低電平有效)elseif(s)beginQ=Q+1;if(Q==4'b1111)beginTC=1;endelsebeginTC=0;endendelsebeginQ=Q;endend

endendmodule

4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。同步十進(jìn)制計(jì)數(shù)器74LS160moduleCNT10(CP,MR,CET,CEP4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的計(jì)數(shù)器。modulestimulus;regCP,MR,CET,CEP;reg[3:0]P;//,QregPE;wire[3:0]Q;wireTC;CNT10r1(CP,MR,CET,CEP,PE,TC,Q,P);initialCP=1'b0; //?CP???0always#5CP=~CP; //?5???????????initialbeginCET=1'b0;MR=1'b1;PE=1'b1;P=4'd0;CEP=1'b0;#5P=4'd5;#5CET=1'b1;CEP=1'b1;#10MR=1'b0;#10MR=1'b1;#30P=4'd7;#5PE=1'b0;#5PE=1'b1;#50PE=1'b0;#3PE=1'b1;#20P=4'd9;#100PE=1'b0;#10PE=1'b0;#10PE=1'b1;#20P=4'd4;#20$finish; endinitial$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);endmodule4-11用Verilog設(shè)計(jì)一個(gè)功能類似74LS160的習(xí)題

4-12給出含有異步清零和計(jì)數(shù)使能的16位二進(jìn)制加減可控計(jì)數(shù)器的VerilogHDL描述。moduleupdowncnt16_v(q,cout,d,load,ena,clk,clr,up_down);input[15:0]d;inputload,ena,clk,clrc,up_down;output[15:0]q;outputcout;reg[15:0]q;always@(posedgeclkornegedgeclr

)beginif(!clr)q=16‘h00;//異步清零,低電平有效

elseif(ena)begin//計(jì)數(shù)使能端,高電平有效

if(!load)q=d;//同步置數(shù),高電平有效

if(up_down)q=q+1;

//up_down=1時(shí),加計(jì)數(shù)

elseq=q-1;end//up_down=0時(shí),減計(jì)數(shù)

endassigncout=up_down?&q:|q;

//cout=1表示進(jìn)位輸出或者

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論