第5章-時序電路的Verilog設(shè)計(jì)課件_第1頁
第5章-時序電路的Verilog設(shè)計(jì)課件_第2頁
第5章-時序電路的Verilog設(shè)計(jì)課件_第3頁
第5章-時序電路的Verilog設(shè)計(jì)課件_第4頁
第5章-時序電路的Verilog設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)實(shí)用教程第5章時序電路的Verilog設(shè)計(jì)§5.1

基本時序元件的Verilog表述邊沿觸發(fā)型D觸發(fā)器基本時序元件主要包括不同結(jié)構(gòu)功能和不同用途的觸發(fā)器和鎖存器?!?.1.1基本觸發(fā)器及其Verilog表述D觸發(fā)器時序波形只有當(dāng)時鐘上升沿到來時,輸出值Q的數(shù)值才會隨輸入口D的數(shù)據(jù)而改變,稱為更新

EDA技術(shù)實(shí)用教程例5-1:基本D觸發(fā)器

moduleDFF1(CLK,D,Q);

outputQ;

inputCLK,D;

regQ; always@(posedgeCLK)

//CLK上升沿啟動

Q<=D; //CLK有上升沿時,D被鎖入Qendmodule時序電路通常都由過程語句來描述。敏感信號表中的邏輯表述posedgeCLK是時鐘邊沿檢測函數(shù),也可看成是對時鐘信號CLK的上升沿敏感的敏感變量或敏感表述:當(dāng)輸入信號CLK出現(xiàn)一個上升沿時,敏感信號posedgeCLK將啟動過程語句。凡是邊沿觸發(fā)性質(zhì)的時序元件,必須使用邊沿敏感表述如“posedgeCLK”。negedgeCLK是時鐘下降沿敏感的表述。

EDA技術(shù)實(shí)用教程§5.1.2用UDP表述D觸發(fā)器例5-2:含異步復(fù)位控制的邊沿觸發(fā)型D觸發(fā)器UDP表述

primitiveEDGE_UDP(Q,D,CLK,RST);

inputD,CLK,RST;

outputQ;regQ;

table//DCLKRST:Q:Q+0(01)0:?:0;

1(01)0:?:1;

?(1?)0:?:-;

?(?0)0:?:-;

101:?:0;

111:?:0;

001:?:0;

011:?:0;

endtableendprimitiveCLK以下的(01)表示時鐘上升沿觸發(fā),(10)表示下降沿觸發(fā)。Q以下數(shù)據(jù)“?”表示原狀態(tài)(現(xiàn)態(tài))任意數(shù)據(jù)。Q+以下數(shù)據(jù)表示次態(tài)數(shù)據(jù),“-”表示保持原狀態(tài)。RST復(fù)位信號,高電平有效。

EDA技術(shù)實(shí)用教程§5.1.2用UDP表述D觸發(fā)器例5-3:含異步復(fù)位控制的邊沿觸發(fā)型D觸發(fā)器頂層表述

moduleDFF_UDP(Q,D,CLK,RST);

inputD,CLK,RST;

outputQ;EDGE_UDPU1(Q,D,CLK,RST);endmodule含異步復(fù)位控制的邊沿觸發(fā)型D觸發(fā)器

EDA技術(shù)實(shí)用教程

EDA技術(shù)實(shí)用教程§5.1.3含異步復(fù)位和時鐘使能的D觸發(fā)器及其Verilog表述含異步復(fù)位和時鐘使能的邊沿D觸發(fā)器實(shí)用的D觸發(fā)器標(biāo)準(zhǔn)模塊,除了數(shù)據(jù)端D、時鐘端CLK和輸出端Q,還有兩個控制端,即異步復(fù)位端RST和時鐘使能端EN?!爱惒健敝釜?dú)立于時鐘控制的控制端。異步復(fù)位RST指任何時刻,只要RST=0,觸發(fā)器的輸出端Q即刻被清零,與時鐘狀態(tài)無關(guān)。時鐘使能EN的功能是:只有當(dāng)EN=1時,時鐘上升沿才有效。例5-4:含異步復(fù)位和時鐘使能的邊沿D觸發(fā)器

moduleDFF2(CLK,D,Q,RST,EN);outputQ;

inputCLK,D,RST,EN;

regQ;always@(posedgeCLKornegedgeRST)

begin

if(!RST)Q<=0;

elseif(EN)Q<=D;endendmodule含異步復(fù)位控制的邊沿觸發(fā)型D觸發(fā)器時序RST有效RST有效EN無效EN有效

EDA技術(shù)實(shí)用教程§5.1.4含同步復(fù)位控制的D觸發(fā)器及其Verilog表述含同步復(fù)位的邊沿D觸發(fā)器在輸入端口D處加了一個2選1多路選擇器?!巴健敝改晨刂菩盘栔挥性跁r鐘信號有效時才起作用。比如同步清0信號必須在時鐘邊沿信號到來時,才能實(shí)現(xiàn)清0功能。同步清0控制D觸發(fā)器的時序圖時鐘信號無效時鐘信號有效

EDA技術(shù)實(shí)用教程例5-5:含同步復(fù)位的

邊沿D觸發(fā)器

moduleDFF3(CLK,D,Q,RST);outputQ;

inputCLK,D,RST;

regQ;always@(posedgeCLK)

begin

if(RST==1)Q=0;

elseif(RST==0)Q=D;endendmodule注意敏感信號表中只放了對CLK上升沿的敏感表述,表明此過程中所有其他輸入信號都隨時鐘CLK而同步。例5-6:含同步復(fù)位的

邊沿D觸發(fā)器

moduleDFF3(CLK,D,Q,RST);outputQ;inputCLK,D,RST;

regQ,Q1;always@(RST)begin

if(RST==1)Q1=0;

elseQ1=D;end

always@(posedgeCLK) Q<=Q1;endmodule例5-7:含同步復(fù)位的邊沿D觸發(fā)器(條件賦值語句)

moduleDFF2(inputCLK,inputD,inputRST,outputregQ);always@(posedgeCLK)Q<=RST?1`b0:D;endmodule

EDA技術(shù)實(shí)用教程§5.1.5基本鎖存器及其Verilog表述鎖存器模塊電平觸發(fā)型鎖存器:時鐘CLK為高電平時,輸出Q的數(shù)值才會隨D輸入的數(shù)據(jù)而改變,CLK為低電平時,將保存其在高電平時鎖入的數(shù)據(jù)。鎖存器模塊內(nèi)部邏輯電路時鐘輸入,數(shù)據(jù)鎖存允許控制端鎖存器的時序波形

EDA技術(shù)實(shí)用教程例5-8:電平觸發(fā)型鎖存器

moduleLATCH1(CLK,D,Q);outputQ;

inputCLK,D;

regQ;always@(DorCLK)if(CLK)Q<=D;endmoduleCLK和D任何一個發(fā)生變化時,執(zhí)行always結(jié)構(gòu)中的if語句。if語句未包含所有可能情況,即當(dāng)D發(fā)生變化但CLK保持為0或CLK從1變?yōu)?時,if語句不滿足CLK==1的條件,跳過后面的賦值語句Q<=D,Q保持原值。這是一個不完整的條件語句,它起到了不滿足條件時,即使輸入改變,輸出仍保持原值的作用。對于數(shù)字電路來說,當(dāng)輸入改變后試圖保持一個值不變,就意味著引入了具有存儲功能的元件(時序元件)。

EDA技術(shù)實(shí)用教程邊沿觸發(fā)時序元件:采用posedge或negedge。電平觸發(fā)時序元件:通過不完整的條件語句。在FPGA中,綜合器引入的鎖存器在許多情況下不屬于現(xiàn)成的基本時序模塊,需用含反饋的組合電路構(gòu)建。而D觸發(fā)器是現(xiàn)成的基本時序模塊,可直接調(diào)用。因此鎖存器比D觸發(fā)器要額外耗費(fèi)組合邏輯資源。

EDA技術(shù)實(shí)用教程§5.1.6含清0控制的鎖存器及其Verilog表述含異步清0的鎖存器含異步清0的鎖存器邏輯電路含異步清0的鎖存器的時序圖

EDA技術(shù)實(shí)用教程例5-9:含異步清0的鎖存器(采用連續(xù)賦值和條件操

作符)

moduleLATCH3(CLK,

D,Q,RST);outputQ;

inputCLK,D,RST;

assignQ=(!RST)?0:(CLK?D:Q);endmodule例5-10:含異步清0的鎖存器(采用過程語句)

moduleLATCH3(CLK,

D,Q,RST);outputQ;

inputCLK,D,RST;

regQ;

always@(DorCLKorRST)

if(!RST)Q<=0;

elseif(CLK)Q<=D;endmodule

EDA技術(shù)實(shí)用教程§5.1.7異步時序電路的Verilog表述特點(diǎn)可以構(gòu)成時序電路的過程稱為時鐘過程。一個時鐘過程只能構(gòu)成對應(yīng)單一時鐘信號的時序電路。如果在某一過程中需要構(gòu)成多觸發(fā)器時序電路,也只能產(chǎn)生對應(yīng)某個單一時鐘的同步時序邏輯。異步邏輯(多個時鐘觸發(fā))的設(shè)計(jì)必須采用多個時鐘過程語句來構(gòu)成。例5-11moduleAMOD(D,A,CLK,Q);outputQ;inputA,D,CLK;

regQ,Q1;

always@(posedgeCLK)

Q1=~(A|Q);

always@(posedgeQ1)

Q=D;endmodule

EDA技術(shù)實(shí)用教程§5.1.8時鐘過程表述的特點(diǎn)和規(guī)律如果將某信號A定義為邊沿敏感時鐘信號,則必須在敏感信號表中給出對應(yīng)的表述,如posedgeA或negedgeA;而且在always過程結(jié)構(gòu)中不能再出現(xiàn)信號A。如果將某信號B定義為對應(yīng)于時鐘的電平敏感的異步控制信號,則除了在敏感信號表中給出對應(yīng)的表述外,如posedgeB或negedgeB,在always過程結(jié)構(gòu)中必須明示信號B的邏輯行為。注意其在表述上必須是邊沿敏感信號,但電路性能上是電平敏感的。如果某信號定義為對應(yīng)于時鐘的同步控制信號(或僅僅是同步輸入信號),則絕不可以以任何形式出現(xiàn)在敏感信號表中。如果同一模塊中有獨(dú)立于主時鐘的時序或組合邏輯,必須用另一個過程來描述。邊沿觸發(fā)型時序模塊遵循規(guī)律:

EDA技術(shù)實(shí)用教程注意:敏感信號表中不允許出現(xiàn)混合信號。即敏感信號表中一旦含有posedge或negedge的邊沿敏感信號后,所有其他普通變量都不能放在敏感信號表中。若定義某變量為異步電平敏感信號,則在if條件句中應(yīng)該對敏感信號表中的信號有匹配的表述不允許敏感信號表中定義除了異步控制信號外的信號。比如(posedgeCLKornegedgeB)敏感信號表中定義的B只能作為異步復(fù)位或置位控制信號,而不能作為一般意義上的異步邏輯信號,如不允許式Q1=A&B。非復(fù)位或置位的獨(dú)立于時鐘的信號(普通異步信號)只能在其他過程中定義。例:always@(posedgeCLKornegedgeRST)beginif(!RST)…always@(posedgeCLKornegedgeRST)beginif(RST==0)…

always@(posedgeCLKornegedgeRST)beginif(!RST==1)…

always@(posedgeCLKorposedge

RST)beginif(RST)…

always@(posedgeCLKorposedgeRST)beginif(RST==1)…

always@(posedgeCLKorposedgeRST)beginif(!RST==0)…

EDA技術(shù)實(shí)用教程例5-12

moduleDFF5(CLK,D,Q,RST,DIN,OUT);outputQ,OUT;inputCLK,D,RST,DIN;regQ,OUT;always@(posedgeCLK)begin

OUT=!DIN; if(RST==1)Q=0;elseif(RST==0)Q=D;endendmodule例5-12RTL圖

EDA技術(shù)實(shí)用教程§5.2

二進(jìn)制計(jì)數(shù)器及其Verilog表述§5.2.1簡單加法計(jì)數(shù)器及其Verilog表述4位二進(jìn)制加法計(jì)數(shù)器工作時序完成加1操作的加法器4位邊沿觸發(fā)寄存器(4個D觸發(fā)器)CLK可看成數(shù)據(jù)鎖存信號4位二進(jìn)制加法計(jì)數(shù)器RTL電路圖反饋通道

EDA技術(shù)實(shí)用教程例5-13

:4位二進(jìn)制數(shù)加法計(jì)數(shù)器

moduleCNT4(CLK,Q);output[3:0]Q;inputCLK;reg[3:0]Q1;always@(posedgeCLK)

Q1<=Q1+1;

//Q1具備了輸入和輸出的性質(zhì),Q1 的輸入特性是反饋方式,Q1被綜合

為內(nèi)部的4位寄存器。

assignQ=Q1;endmodule例5-14:4位二進(jìn)制數(shù)加法計(jì)數(shù)器

moduleCNT4(CLK,Q);output[3:0]Q;inputCLK;reg[3:0]Q;always@(posedgeCLK)

Q<=Q+1;

//Verilog綜合器對于此類語句具有

自動轉(zhuǎn)化端口方向?qū)傩缘墓δ?,Q 具備了雙向端口屬性。endmodule

EDA技術(shù)實(shí)用教程§5.2.2實(shí)用加法計(jì)數(shù)器設(shè)計(jì)例5-15:異步復(fù)位同步計(jì)數(shù)使能和可預(yù)置型十進(jìn)制計(jì)數(shù)器

moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);

inputCLK,EN,RST,LOAD;

//時鐘,時鐘使能,復(fù)位,數(shù)據(jù)加

載控制信號

input[3:0]DATA;

//4位并行加載數(shù)據(jù)output[3:0]DOUT;

//4位計(jì)數(shù)輸出outputCOUT;reg[3:0]Q1;regCOUT;

assignDOUT=Q1; //將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTalways@(posedgeCLKornegedgeRST) //時序過程beginif(!RST)Q1<=0;//RST=0時,對內(nèi)部寄存器單元異步清0

elseif(EN)begin

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

if(!LOAD)Q1<=DATA;

//當(dāng)LOAD=0,向內(nèi)部寄存器加載數(shù)據(jù)

elseif(Q1<9)Q1<=Q1+1;

//當(dāng)Q1小于9時,允許累加

elseQ1<=4`b0000;end//否則一個時鐘后清0返回初值

end

always@(Q1) //組合過程if(Q1==4`h9)COUT=1`b1;elseCOUT=1`b0;endmodule

EDA技術(shù)實(shí)用教程RST在任意時刻有效時,即使CLK非上升沿時,計(jì)數(shù)也能即刻清0。EN=1且在時鐘CLK的上升沿時間范圍LOAD=0時,4位輸入數(shù)據(jù)DATA=7被加載,在LOAD=1后作為計(jì)數(shù)器的計(jì)數(shù)初值,計(jì)數(shù)到9時,COUT輸出進(jìn)位1。注意LOAD是同步加載。EN=1,RST=1,LOAD=1時,計(jì)數(shù)正常進(jìn)行。LOAD=0但CLK無上升沿,所以沒有進(jìn)行加載計(jì)數(shù)從7到8時有毛刺,因?yàn)?(0111)到8(1000)的邏輯變化最大,每一位都發(fā)生反轉(zhuǎn),導(dǎo)致各位信號傳輸路徑不一致性增大

EDA技術(shù)實(shí)用教程第一個條件語句if(!RST)構(gòu)成RST接于寄存器下方的異步清0端CLR。第二個條件句if(EN)構(gòu)成EN接于寄存器左側(cè)的使能端ENA。第三個條件句if(LOAD)構(gòu)成LOAD接于上面的多路選擇器,使之控制選擇來自DATA的數(shù)據(jù),還是來自另一條多路選擇器的數(shù)據(jù)。RTL電路if(!RST)if(EN)if(LOAD)

EDA技術(shù)實(shí)用教程不完整的條件語句和語句Q1<=Q1+1,構(gòu)成了加1加法器和4位寄存器。語句(Q1<9)構(gòu)成了小于比較器,比較器的輸出信號控制左側(cè)多路選擇器。第二個過程語句構(gòu)成了純組合電路模塊,即一個等式比較器,作進(jìn)位輸出。RTL電路Q1<9第二個過程語句Q1<=Q1+1不完整條件語句

EDA技術(shù)實(shí)用教程§5.3

移位寄存器的Verilog表述與設(shè)計(jì)§5.3.1含同步預(yù)置功能的移位寄存器設(shè)計(jì)例5-16:含同步預(yù)置功能的8位并行輸入串行輸出移位寄存器

moduleSHFT1(CLK,LOAD,DIN,QB);

outputQB;inputCLK,LOAD;input[7:0]DIN;reg[7:0]REG8;always@(posedgeCLK)

if(LOAD)REG8<=DIN;elseREG8[6:0]<=REG8[7:1];

assignQB=REG8[0];endmoduleCLK---移位時鐘信號DIN[7:0]---8位并行預(yù)置數(shù)據(jù)端口LOAD---并行數(shù)據(jù)預(yù)置使能控制信號QB---串行輸出端口

EDA技術(shù)實(shí)用教程第三個時鐘到來時,LOAD正好是高電平,此時DIN口上的8位數(shù)據(jù)9B被鎖入REG8中。第四個時鐘以及以后的時鐘信號都是移位時鐘。由于賦值語句QB=REG8[0]屬于并行性質(zhì)的連續(xù)賦值語句,在過程結(jié)構(gòu)的外面,它的執(zhí)行無需移位時鐘信號。在并行鎖存DIN數(shù)據(jù)的時鐘上升沿到來時刻(第三個時鐘),便將此置入數(shù)據(jù)的第一位輸出到QB了,即最低位輸出要早于移位時鐘(第四個時鐘)一個周期。工作時序

EDA技術(shù)實(shí)用教程§5.3.2使用移位操作符設(shè)計(jì)移位寄存器例5-17:4位串行輸入串行輸出移位寄存器

moduleSHFT4(DIN,CLK,RST,DOUT);

inputCLK,DIN,RST;

outputDOUT;reg[3:0]SHFT;always@(posedgeCLKorposedgeRST)

if(RST)SHFT<=4`B0;

elsebeginSHFT<=(SHFT>>1);SHFT[3]<=DIN;end

assignDOUT=SHFT[0];endmodule

EDA技術(shù)實(shí)用教程§5.4

可預(yù)置型計(jì)數(shù)器設(shè)計(jì)可預(yù)置型計(jì)數(shù)器能實(shí)現(xiàn)模可控計(jì)數(shù)器功能,方法是將計(jì)數(shù)進(jìn)位輸出端與預(yù)置數(shù)加載輸入信號端或計(jì)數(shù)復(fù)位端相接。四種控制信號輸入方式:同步清0,異步清0,同步加載和異步加載。同步清0和異步清0模式的原理:設(shè)定計(jì)數(shù)模為N,當(dāng)計(jì)數(shù)到N時,對計(jì)數(shù)器發(fā)出一個清0信號,使其從頭開始計(jì)數(shù),以此循環(huán)往復(fù)。同步加載和異步加載模式的原理:對于給定的模N,當(dāng)計(jì)數(shù)滿到溢出時,或限制其計(jì)數(shù)到某值時,發(fā)出一個信號,控制計(jì)數(shù)器的加載預(yù)置端,使計(jì)數(shù)器加載某值M。時序電路在清0或加載信號時極易產(chǎn)生毛刺,并可能不同程度地影響計(jì)數(shù)器的功能。毛刺的產(chǎn)生與否及影響程度與實(shí)現(xiàn)此功能的器件本身的時序特性、控制計(jì)數(shù)器計(jì)數(shù)進(jìn)程的方式、電路模塊的結(jié)構(gòu)乃至外界溫度等因素關(guān)系密切。

EDA技術(shù)實(shí)用教程§5.4.1同步加載計(jì)數(shù)器例5-18:4位同步加載模式計(jì)數(shù)器

moduleFDIV0(inputCLK,RST,input[3:0]D,outputPM,output[3:0]DOUT);reg[3:0]Q1;regFULL;

(*synthesis,keep*)wireLD; //設(shè)定LD為仿真可測試屬性always@(posedgeCLKornegedgeRST)//RST為異步控制信號

if(!RST)beginQ1<=0;FULL<=0;end

elseif(LD)beginQ1<=D;FULL<=1;end

//LD為同步控制信號

elsebeginQ1<=Q1+1;FULL<=0;end

assignLD=(Q1==4`B1111);

assignPM=FULL;

assignDOUT=Q1;endmodule注意這里L(fēng)D是同步加載控制信號,假定模為1111,PM是輸出標(biāo)志脈沖(標(biāo)志是否在加載數(shù)據(jù))

EDA技術(shù)實(shí)用教程由于LD是同步信號,當(dāng)Q1=1111時,LD=1,等到下一個時鐘上升沿才執(zhí)行Q1<=D,F(xiàn)ULL<=1,即Q重裝載初值9。所以在前一個時鐘周期(Q1=1111,LD=1),F(xiàn)ULL=0,PM=0,DOUT=1111,輸出F(1111);到了下一個時鐘周期(Q1=9,F(xiàn)ULL=1),PM=1,DOUT=9,輸出9。預(yù)置數(shù)是9時,分頻比(計(jì)數(shù)模)為7(9~F)。每一計(jì)數(shù)周期都有兩個毛刺脈沖,毛刺極有可能對計(jì)數(shù)器產(chǎn)生不良后果,如提前預(yù)置數(shù)據(jù),這就要看此毛刺的寬度是否足夠?qū)?。仿真波?/p>

EDA技術(shù)實(shí)用教程毛刺寬度約0.1ns,對于EP1C器件不會產(chǎn)生不利影響,但為了能可靠技術(shù),還是應(yīng)該設(shè)法去除毛刺。毛刺不是很寬時,通過一些簡單的輔助方法或利用器件本身通道的分布電容,都可解決問題。例如改變程序結(jié)構(gòu),包括改變程序的表述方式,甚至重新考慮某些端口引腳的去留或鎖定方位都有可能起作用。毛刺展開后的時序毛刺

EDA技術(shù)實(shí)用教程還可以通過改變優(yōu)化約束方式來解決毛刺問題:Assignments→Settings,選擇Analysis&SynthesisSettings項(xiàng)的OptimizationTechnique欄,單擊speed優(yōu)化方式,或在PowerPlaypoweroptimization欄選擇Extraeffort項(xiàng),或選擇PerformWYSIWYG;毛刺

EDA技術(shù)實(shí)用教程還可以通過改變優(yōu)化約束方式來解決毛刺問題:Assignments→Settings,選擇FitterSettings項(xiàng)的Fittereffort欄,選擇StandardFit適配方式;或者將這些設(shè)置組合起來?;蛘哌x擇更高速的FPGA。毛刺

EDA技術(shù)實(shí)用教程§5.4.2異步加載計(jì)數(shù)器例5-19:4位異步加載模式計(jì)數(shù)器

modulefdiv1(CLK,PM,D,DOUT,RST);inputCLK;inputRST;input[3:0]D;

outputPM;output[3:0]DOUT;

reg[3:0]Q1;regFULL;

(*synthesis,probe_port,keep*)wireLD;always@(posedgeCLKorposedgeLDornegedgeRST)//RST和LD都設(shè)為異步控制信號

if(!RST)beginQ1<=0;FULL<=0;end

elseif(LD)beginQ1<=D;FULL<=1;end

elsebeginQ1<=Q1+1;FULL<=0;endassignLD=(Q1==4`B0000);

assignPM=FULL;

assignDOUT=Q1;endmodule注意這里L(fēng)D是異步控制信號

EDA技術(shù)實(shí)用教程由于LD是異步信號,當(dāng)Q1=0000時,LD=1,此時無須等到下一個時鐘上升沿,立即執(zhí)行Q1<=D,F(xiàn)ULL<=1,即Q1重裝載初值8,DOUT輸出8。在上一個時鐘周期(Q1=1111),DOUT輸出F(1111),而在這個時鐘周期(

Q1=0000),DOUT輸出8,這樣就跳過了0的輸出(實(shí)際上是剛進(jìn)入0的一瞬間,即刻重新賦值,0被強(qiáng)制隱去)。如果如例5-18那樣采用LD=(Q1==4`B1111)來賦值,根據(jù)上面的分析,DOUT就會跳過F(1111)不輸出,而在輸出E(1110)之后直接重新裝載預(yù)置值8并輸出8)。因此這里必須采用LD=(Q1==4`B0000)。仿真波形

EDA技術(shù)實(shí)用教程§5.4.3異步清0加載計(jì)數(shù)器例5-20:4位異步清0模式計(jì)數(shù)器

modulefdiv1(CLK,PM,D);

inputCLK;

input[3:0]D;

//預(yù)置計(jì)數(shù)模

outputPM;regFULL;

(*synthesis,probe_port,keep*)reg[3:0]Q1;

(*synthesis,probe_port,keep*)wireLD;always@(posedgeCLKorposedgeRST)

if(RST)beginQ1<=0;FULL<=1;endelsebeginQ1<=Q1+1;FULL<=0;endassignRST=(Q1==D);

assignPM=FULL;endmodule

EDA技術(shù)實(shí)用教程對于異步模式,無論是置位還是清零,控制脈沖都很窄,并且控制時刻的數(shù)據(jù)變化劇烈,因?yàn)楸粡?qiáng)制隱去了一個計(jì)數(shù)值,容易產(chǎn)生毛刺,造成誤操作,并且毛刺與器件本身的速度性能關(guān)系很大,器件速度越低,毛刺的影響就越嚴(yán)重。預(yù)置數(shù)D是9時,分頻比(計(jì)數(shù)模)為9(0~8)。仿真波形(EP1C3)由于EP1C3速度低,在Q1計(jì)數(shù)的7與8之間,RST出現(xiàn)了毛刺,且毛刺將D提前加載進(jìn)計(jì)數(shù)器,產(chǎn)生誤操作。仿真波形(EP3C55)RST信號展開

EDA技術(shù)實(shí)用教程§5.4.4同步清0加載計(jì)數(shù)器例5-21:4位同步清0模式計(jì)數(shù)器

modulefdiv1(CLK,PM,D);

inputCLK;

input[3:0]D;

outputPM;regFULL;

(*synthesis,probe_port,keep*)reg[3:0]Q1;

(*synthesis,probe_port,keep*)wireLD;always@(posedgeCLK)

if(RST)beginQ1<=0;FULL<=1;endelsebeginQ1<=Q1+1;FULL<=0;endassignRST=(Q1==D);

assignPM=FULL;endmodule

EDA技術(shù)實(shí)用教程也存在毛刺現(xiàn)象,出現(xiàn)在7和8之間,是由7和8的邏輯數(shù)據(jù)變換較大造成的,所以毛刺的寬度不會大,可用QuartusII的優(yōu)化或適配模式稍作改變即可消除毛刺。預(yù)置數(shù)是9時,分頻比(計(jì)數(shù)模)為10(0~9)。仿真時序

EDA技術(shù)實(shí)用教程§5.5

時序電路硬件設(shè)計(jì)與仿真示例§5.5.1編輯電路、創(chuàng)建工程和仿真測試十進(jìn)制計(jì)數(shù)器設(shè)計(jì)示例電路CNT2LED十進(jìn)制計(jì)數(shù)器CNT10十六進(jìn)制7段數(shù)碼管顯示譯碼器

EDA技術(shù)實(shí)用教程例5-15:異步復(fù)位同步計(jì)數(shù)使能和可預(yù)置型十進(jìn)制計(jì)數(shù)器

moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);

inputCLK,EN,RST,LOAD;

//時鐘,時鐘使能,復(fù)位,數(shù)據(jù)加

載控制信號

input[3:0]DATA;

//4位并行加載數(shù)據(jù)output[3:0]DOUT;

//4位計(jì)數(shù)輸出outputCOUT;reg[3:0]Q1;regCOUT;

assignDOUT=Q1; //將內(nèi)部寄存器的計(jì)數(shù)結(jié)果輸出至DOUTalways@(posedgeCLKornegedgeRST) //時序過程beginif(!RST)Q1<=0;//RST=0時,對內(nèi)部寄存器單元異步清0

elseif(EN)begin

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

if(!LOAD)Q1<=DATA;

//當(dāng)LOAD=1,向內(nèi)部寄存器加載數(shù)據(jù)

elseif(Q1<9)Q1<=Q1+1;

//當(dāng)Q1小于9時,允許累加

elseQ1<=4`b0000;end//否則一個時鐘后清0返回初值

end

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論