常用電路的Verilog描述_第1頁
常用電路的Verilog描述_第2頁
常用電路的Verilog描述_第3頁
常用電路的Verilog描述_第4頁
常用電路的Verilog描述_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1常用電路的Verilog描述21.常用組合電路的設(shè)計方法組合電路特點(diǎn):任意時刻的輸出僅僅決定于該時刻的輸入,與電路原來的狀態(tài)無關(guān)。電路中無存儲器、無反饋結(jié)構(gòu);無記憶功能。常用的組合電路:編碼器譯碼器數(shù)據(jù)選擇器加法器數(shù)值比較器奇偶校驗器1.常用組合電路的設(shè)計方法3簡單的組合關(guān)系可用門原語或assign語句或always語句實(shí)現(xiàn);復(fù)雜的最好用always語句實(shí)現(xiàn)。用verilog語句設(shè)計組合電路比較簡單,常用語句:門原語調(diào)用、assign語句、always語句1.常用組合電路的設(shè)計方法常見的四種已知情況:已知邏輯圖;已知邏輯式;已知真值表;已知邏輯功能。1.常用組合電路的設(shè)計方法例1:已知邏輯式寫出.v代碼用assign語句或always語句全加器關(guān)鍵語句assignS=A^B^CI;assignCO=(A&B)|(A&CI)|(B&CI);always@(A,B,CI)beginS=A^B^CI;CO=(A&B)|(A&CI)|(B&CI);end或者1.常用組合電路的設(shè)計方法例2:已知邏輯圖,寫出.v代碼適合用門原語或assign語句全加器and(m1,A,B,C);or(m2,A,B,C);and(m3,A,B);and(m4,A,C);and(m5,B,C);or(Y2,m3,m4,m5);not(m6,Y2);and(m7,m2,m6);or(Y1,m1,m7);關(guān)鍵語句1.常用組合電路的設(shè)計方法例3:已知真值表,寫出.V代碼。用always語句(配合case語句)全減器always@(A,B,C)begincase({A,B,C})3'b000:{D,V}=2’b00;3'b001:{D,V}=2’b11;3'b010:{D,V}=2’b11;3'b011:{D,V}=2’b01;3'b100:{D,V}=2’b10;3'b101:{D,V}=2’b10;3'b110:{D,V}=2’b00;3'b110:{D,V}=2’b11;default:y=1'b0;endcase關(guān)鍵語句81.常用組合電路的設(shè)計方法例4:裁判電路,主裁判和兩個副裁判之一同意則通過,否則不通過。用always語句(配合if語句)always@(A,B,C)if(A&&(B||C))y=1’b1;elseY=1’b0;關(guān)鍵語句2.常用組合電路的設(shè)計方法用always語句設(shè)計組合電路時要注意:敏感條件為電平變化若用if語句或case語句,條件要完整,否則會綜合出寄存器。1.常用組合電路的設(shè)計方法例:用if語句實(shí)現(xiàn)3選1數(shù)據(jù)選擇器。moduleMUX31(a,b,c,s1,s0,y);inputa,b,c,s1,s0;outputregy;always@(a,b,c,s1,s0)if({s1,s0}==2'b00)y=a;elseif({s1,s0}==2'b01)y=b;elseif({s1,s0}==2'b10)y=c;elsey=1'b0;endmodule111.常用組合電路的設(shè)計方法加elsealways@(a,b)if(sel)Q=a;elseQ=b;always@(a,b)Q=b;if(sel)Q=a;使if語句條件完整的兩種方法:2.在if之前設(shè)初值1.常用組合電路的設(shè)計方法用case語句實(shí)現(xiàn)3選1數(shù)據(jù)選擇器:moduleMUX31(a,b,c,s1,s0,y);inputa,b,c,s1,s0;outputregy;always@(a,b,c,s1,s0)begincase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;default:y=1'b0;endcaseendendmodule131.常用組合電路的設(shè)計方法3.case所有情況case語句使條件完整的三種方法:1.加defaultcase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;default:y=1'b0;endcasecase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;2’b11:y=0;endcase2.在case前設(shè)初值y=1'b0;case({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;endcase1.常用組合電路的設(shè)計方法編碼器設(shè)計always@(I7,I6,I5,I4,I3,I2,I1,I0)case({I7,I6,I5,I4,I3,I2,I1}) 7’b1000000:{Y2,Y1,Y0}=3’b111; 7’b0100000:{Y2,Y1,Y0}=3’b110; 7’b0010000:{Y2,Y1,Y0}=3’b101; …… 7’b0000001:{Y2,Y1,Y0}=3’b001; default:{Y2,Y1,Y0}=3’b000;endcaseencoderI7I6I5I4I3I2I1I0Y2Y1Y0普通編碼器:任意時刻有且只有一個輸入有效關(guān)鍵語句用case語句例8/3線編碼器151.常用組合電路的設(shè)計方法always@(*)if(I7){Y2,Y1,Y0}=3’b111;elseif(I6){Y2,Y1,Y0}=3’b110;elseif(I5)……..優(yōu)先編碼器:可以多個輸入有效,輸出優(yōu)先級高的信號編碼if語句能體現(xiàn)優(yōu)先級功能,故可使用if語句設(shè)計優(yōu)先編碼器關(guān)鍵語句用case語句161.常用組合電路的設(shè)計方法casex語句也能體現(xiàn)優(yōu)先級功能。case({A,B,C})7'b1xx:Y=3’d1;7'b01x

:Y=3’d2;7'b001:Y=3’d3;default:Y=3’d4;case語句有三種:case、casez、czsex;case語句0、1、x、z都要比較,最嚴(yán)格;casez只比較0、1和x,不比較z;casex只比較0、1,不比較z和x。casex({A,B,C})7'b1xx:Y=3’d1;7'b01x

:Y=3’d2;7'b001:Y=3’d3;default:Y=3’d4;若{A,B,C}=010Y=4Y=2171.常用組合電路的設(shè)計方法casex({I7,I6,I5,I4,I3,I2,I1}) 7'b1xxxxxx:{Y2,Y1,Y0}=3'b111; 7'b01xxxxx:{Y2,Y1,Y0}=3'b110; 7'b001xxxx:{Y2,Y1,Y0}=3'b101; 7'b0001xxx:{Y2,Y1,Y0}=3'b100; 7'b00001xx:{Y2,Y1,Y0}=3'b011; 7'b000001x:{Y2,Y1,Y0}=3'b010; 7'b0000001:{Y2,Y1,Y0}=3'b001; default:{Y2,Y1,Y0}=3'b000;用casex語句設(shè)計優(yōu)先編碼器181.常用組合電路的設(shè)計方法譯碼器設(shè)計decoderY7Y6Y5Y4Y3Y2Y1Y0A2A1A0always@(*)case({A2,A1,A0}) 3’b000:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000001; 3’b001:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000010; 3’b010:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000100; …… 3’b111:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b10000000; default:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;endcase用case語句關(guān)鍵語句例3/8線譯碼器191.常用組合電路的設(shè)計方法帶片選端的譯碼器怎樣設(shè)計?always@(*)if({S1,S2,S3==3’b100})

case({A2,A1,A0}) 3’b000:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000001; 3’b001:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000010; 3’b010:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000100; …… 3’b111:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b10000000; default:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;endcaseelse{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;用if語句設(shè)計片選功能。1.常用組合電路的設(shè)計方法數(shù)據(jù)選擇器設(shè)計MUXYalways@(*)case({S1,S0}) 2’b00:Y=D0; 2’b01:Y=D1; 2’b10:Y=D2; 2’b11:Y=D3; default:Y=1’b0;endcaseD3D2D1D0S1S0關(guān)鍵語句4選1數(shù)據(jù)選擇器思考:帶片選端的數(shù)據(jù)選擇器怎樣設(shè)計?211.常用組合電路的設(shè)計方法加法器設(shè)計always@(*){Co,S3S2S1S0}=A3A2A1A0+B3B2B1B0+Ci;ADDERCoA3A2A1A0B3B2B1B0S3S2S1S0Ci關(guān)鍵語句4位二進(jìn)制加法器1.常用組合電路的設(shè)計方法奇偶校驗器設(shè)計outputreg[7:0]D;always@(*)beginodd=D[0]^D[1]^D[2]^D[3]^D[4]^D[5]^D[6]^D[7];endassigneven=~odd;parityDevenodd用異或運(yùn)算關(guān)鍵語句8位奇偶校驗器always@(*)beginodd=~D;even=~odd;end或者:231.常用組合電路的設(shè)計方法outputreg[7:0]D;always@(*)beginodd=0;

for(i=0;i<7;i=i+1)begin

odd=D[i]^odd;endendassigneven=~odd;parityDevenodd用for循環(huán)語句關(guān)鍵語句241.常用組合電路的設(shè)計方法for語句用法

循環(huán)語句,只能在過程塊中使用格式例:for(i=0;i<=3;i=i+1)begin R=R+1;endfor(循環(huán)初始值設(shè)置表達(dá)式;循環(huán)控制條件表達(dá)式;循環(huán)控制變量增值表達(dá)式)begin循環(huán)體語句結(jié)構(gòu)end初值、條件、調(diào)整251.常用組合電路的設(shè)計方法三態(tài)門及其應(yīng)用電路設(shè)計

三態(tài)門可以用門原語、條件賦值語句、if語句實(shí)現(xiàn)always@(ENAorDIN)if(ENA)DOUT=DIN;elseDOUT=1’bz;assignDOUT=ENA?DIN:1’bz;DOUTENADINbufif1(DOUT,DIN,ENA);261.常用組合電路的設(shè)計方法三態(tài)門構(gòu)成的雙向端口設(shè)計用兩條門原語調(diào)用語句用兩條assign語句用兩條if語句inoutseldata_indata_outassigndata_in=!sel?inout:1’bz;assigninout=sel?dataout:1’bz;always@(*)if(!sel)data_in=inout;elsedata_in=1’bz;always@(*)

if(sel)inout=data_out;elseinout=1’bz;技巧:先畫出圖,用連續(xù)賦值語句直接描述比較方便。bufif0(data_in,inout,sel);bufif1(inout,data_out,sel);271.常用組合電路的設(shè)計方法三態(tài)門構(gòu)成的總線控制電路設(shè)計

兩個(或多個)輸出接在一起,若ENA=1,則DOUT=IN1;否則,DOUT=IN0。注意不是數(shù)據(jù)選擇器結(jié)構(gòu)。1用門原語設(shè)計2用assign語句描述3用if語句描述bufif0(DOUT,IN0,ENA);bufif1(DOUT,IN1,ENA);281.常用組合電路的設(shè)計方法用assign語句描述moduletriBUS4(IN1,IN0,ENA,DOUT);inputIN1,IN0;outputDOUT;inputENA;assignDOUT=(ENA==1'b0)?IN0:1'bz;assignDOUT=(ENA==1'b1)?IN1:1'bz;endmodule這種情況下允許對同一個信號賦值。但是如果不是三態(tài)門輸出的話是不允許的。291.常用組合電路的設(shè)計方法用if語句描述moduletriBUS4(IN1,IN0,ENA,DOUT);inputIN1,IN0;outputregDOUT;inputENA;always@(ENA,IN0)begin if(ENA==1'b0)DOUT=IN0; elseDOUT=1'hz;end

always@(ENA,IN1)begin if(ENA==1'b1)DOUT=IN1; elseDOUT=1'hz;endendmodule這種情況下允許在兩個always塊中對同一個信號賦值,但是如果不是三態(tài)門輸出的話是不允許的。302.常用時序電路的設(shè)計方法時序電路的描述特點(diǎn):任意時刻的輸出不僅決定于該時刻的輸入,而且與電路原來的狀態(tài)有關(guān)。電路中有存儲器或無反饋結(jié)構(gòu);有記憶功能。時序電路多為邊沿觸發(fā),也有電平觸發(fā)。常用的時序電路基本SR鎖存器電平觸發(fā)D觸發(fā)器邊沿觸發(fā)D觸發(fā)器計數(shù)器移位寄存器順序脈沖發(fā)生器序列信號檢測器312.常用時序電路的設(shè)計方法時序電路的描述特點(diǎn):時序電路一般用always語句描述一般采用case語句、if語句經(jīng)常利用case、if語句的條件不完整性實(shí)現(xiàn)寄存器(即不加else)一般采用非阻塞賦值邊沿觸發(fā)器敏感信號表中的時鐘條件用邊沿變化電平觸發(fā)器敏感信號表中的時鐘條件用電平變化邊沿觸發(fā)器型時序模塊中異步控制信號的設(shè)計:在敏感信號表中給出邊沿敏感描述,在過程結(jié)構(gòu)中給出邏輯描述。邊沿觸發(fā)器型時序模塊中同步控制信號的設(shè)計:不在敏感信號表中列出該信號,在過程結(jié)構(gòu)中給出邏輯描述。電平觸發(fā)型時序模塊中異步控制信號的設(shè)計:在敏感信號表中給出電平敏感描述,利用優(yōu)先條件實(shí)現(xiàn)異步控制。322.常用時序電路的設(shè)計方法基本SR鎖存器設(shè)計QnQSR關(guān)鍵語句

nand(Q,S,nQ);nand(nQ,R,Q);assignQ=

~(S&nQ);assignnQ=~(R&Q);always@(*)beginQ=

~(S&nQ);

nQ=~(R&Q);end2.常用時序電路的設(shè)計方法電平觸發(fā)D觸發(fā)器電平觸發(fā)D觸發(fā)器功能:當(dāng)CLK=1時,Q=D否則,Q保持原值不變。assignQ=CLK?D:Q;always@(D,CLK)

if(CLK)Q<=D;關(guān)鍵語句

2.常用時序電路的設(shè)計方法邊沿D觸發(fā)器功能:邊沿D觸發(fā)器always@(posedgeclk)

Q<=D;關(guān)鍵語句

邊沿觸發(fā)器只能用always語句配合邊沿敏感信號描述352.常用時序電路的設(shè)計方法含有復(fù)位控制端的邊沿觸發(fā)器異步復(fù)位:當(dāng)復(fù)位信號有效時,觸發(fā)器立即復(fù)位;(即復(fù)位控制不受時鐘控制)同步復(fù)位:當(dāng)復(fù)位信號有效時,觸發(fā)器不會立即復(fù)位,而是要等到時鐘信號到來時才復(fù)位。(即復(fù)位控制與時鐘同步)362.常用時序電路的設(shè)計方法異步復(fù)位控制描述:方法:用if語句描述復(fù)位條件,且復(fù)位信號作為邊沿敏感條件;always@(posedgeCLKornegedgeRST)

if(!RST)Q<=1’b0;

elseQ<=D;endmodule同步復(fù)位控制描述:always@(posedgeCLK)

if(!RST)Q<=1’b0;

elseQ<=D;方法:用if語句描述復(fù)位條件,但復(fù)位信號不作為敏感條件;當(dāng)復(fù)位信號下降沿到來時,啟動always塊,立即復(fù)位。不受時鐘控制;當(dāng)時鐘上升沿到來時,啟動always塊,如果復(fù)位條件成立則復(fù)位。復(fù)位受時鐘控制;372.常用時序電路的設(shè)計方法異步時序電路特點(diǎn):不是同一個時鐘,例圖always@(posedgeCLK)Q1<=A|Q;always@(posedgeQ1)Q<=D;Q1方法:分別用不同的always塊描述不同的時鐘異步時序電路設(shè)計382.常用時序電路的設(shè)計方法計數(shù)器設(shè)計二進(jìn)制計數(shù)器功能:392.常用時序電路的設(shè)計方法

方法:用always語句塊實(shí)現(xiàn)。計數(shù)時鐘用邊沿觸發(fā)描述。加法計數(shù)用加法實(shí)現(xiàn),減法計數(shù)用減法實(shí)現(xiàn);計數(shù)容量控制用if…else…語句實(shí)現(xiàn)(配合比較條件);如果除計數(shù)容量控制以外還有清零、置數(shù)、使能等控制,可使用if…elseif…else…語句實(shí)現(xiàn),利用條件優(yōu)先級實(shí)現(xiàn)優(yōu)先控制。進(jìn)位輸出用組合邏輯描述即可。40moduleCounter_4B(CLK,Q);inputCLK;output[3:0]Q;regQ;always@(posedgeCLK)Q<=Q+1;endmodule無計數(shù)容量等控制,簡單的加1計算即可。412.常用時序電路的設(shè)計方法功能更全面的計數(shù)器設(shè)計

功能:1十進(jìn)制計數(shù),計數(shù)范圍0~9 2異步復(fù)位,低電平有效

3同步計數(shù)使能,高電平有效,當(dāng)使能有效時,才能計數(shù)或置數(shù)

4同步預(yù)置數(shù),低電平有效

5進(jìn)位輸出,高電平有效,計至9,輸出高電平控制優(yōu)先級順序:復(fù)位、使能、置數(shù)、計數(shù)42always @(posedgeCLKornegedgenRST) begin if(!nRST)Q=0;/

溫馨提示

  • 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

提交評論