版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第7章Verilog設(shè)計的層次與風(fēng)格學(xué)習(xí)目標及學(xué)習(xí)重點學(xué)習(xí)目標:
1)理解和掌握verilog的幾種不同的設(shè)計方法;數(shù)據(jù)流描述、結(jié)構(gòu)描述和行為描述。
2)掌握基本組合邏輯電路和時序邏輯電路的設(shè)計方法。學(xué)習(xí)重點
1)如何以不同的設(shè)計方法設(shè)計verilog程序代碼;
2)每種設(shè)計方法的特點及應(yīng)用;
3)組合邏輯電路和時序邏輯電路的概念。
3)基本組合邏輯電路的設(shè)計;
4)基本時序邏輯電路的設(shè)計。
主要內(nèi)容◆結(jié)構(gòu)(Structural)描述◆行為(Behavioural)描述◆數(shù)據(jù)流(DataFlow)描述◆基本組合電路設(shè)計◆基本時序電路設(shè)計7.1Verilog設(shè)計的層次
1.verilog設(shè)計的層次包含哪些?
系統(tǒng)級;算法級;寄存器傳輸級;
門級:利用邏輯門以及邏輯門之間的連接來構(gòu)建電路模型;
開關(guān)級:利用三極管、存儲節(jié)點以及它們之間的連接來構(gòu)建電路模型。2.設(shè)計層次的高低是如何區(qū)分的?
系統(tǒng)級、算法級、寄存器級----高級別的描述方式。設(shè)計電路更多的是使用verilog提供的過程語句、控制結(jié)構(gòu),描述的是電路輸入輸出之間的邏輯關(guān)系。
門級、開關(guān)級-----低層次的描述方式。利用底層的門元件和晶體管直接搭建電路。
7.1Verilog設(shè)計的層次3.Verilog所包含的設(shè)計風(fēng)格
1)結(jié)構(gòu)(Structural)描述調(diào)用電路元件(比如邏輯門、晶體管、功能部件)來構(gòu)建電路。2)行為(Behavioural)描述通過描述電路的行為特性(電路輸入輸出之間的邏輯關(guān)系)來設(shè)計電路。
3)數(shù)據(jù)流(DataFlow)描述通過表達式、操作符和操作數(shù)來設(shè)計電路。4.不同設(shè)計風(fēng)格的應(yīng)用在設(shè)計電路時,一般優(yōu)先選擇行為描述和數(shù)據(jù)流描述的方式。門級結(jié)構(gòu)描述一般很少采用,只用于一些關(guān)鍵路徑的設(shè)計。選擇行為描述和數(shù)據(jù)流描述給綜合器提供了可優(yōu)化的空間,而門級結(jié)構(gòu)描述的電路綜合器是很難再進行優(yōu)化的。要靈活選用最適宜的設(shè)計風(fēng)格。7.1Verilog設(shè)計的層次
1.verilog中的結(jié)構(gòu)描述方式
1)調(diào)用Verilog內(nèi)置門元件(門級結(jié)構(gòu)描述)
2)調(diào)用開關(guān)級元件(晶體管級結(jié)構(gòu)描述)不是本書的討論重點。
3)用戶自定義元件UDP(也在門級)主要用于仿真。注:除了上述結(jié)構(gòu)描述的方式外,在多層次結(jié)構(gòu)電路的設(shè)計中,不同模塊間的調(diào)用也可以認為是結(jié)構(gòu)描述。‘include“文件名.v”7.2結(jié)構(gòu)描述
2.Verilog的內(nèi)置門元件
Verilog的內(nèi)置門元件
3.基本門的邏輯真值表
Verilog的內(nèi)置門元件
nand(與非門)01xznor(或非門)01xz01111010xx110xx10000x1xxxxx0xxz1xxxzx0xx
Verilog的內(nèi)置門元件
xor01xz
xnor01xz001xx010xx110xx101xxxxxxxxxxxxzxxxxzxxxx門元件的調(diào)用4調(diào)用門元件的格式
門元件名字
<例化的門名字>(<端口列表>)1)其中普通門的端口列表按下面的順序列出:(輸出,輸入1,輸入2,輸入3……);
例:
anda1(out,in1,in2,in3);//三輸入與門2)對于三態(tài)門,則按如下順序列出輸入輸出端口:(輸出,輸入,使能控制端);
例:
bufif1mytri1(out,in,enable);//高電平使能的三態(tài)門3)調(diào)用三態(tài)門、非門、緩沖器的注意事項允許有多個輸出,但是只能有一個輸入。例:
notN1(out1,out2,in);//一個輸入in,兩個輸出out1,out2
bufB1(out1,out2,out3,in);//一個輸入in,兩個輸出out1,
out2,out3
門元件的調(diào)用門級結(jié)構(gòu)描述的2選1MUXmoduleMUX1(out,a,b,sel);outputout;Inputa,b,sel;not (sel_,
sel);and (a1,a,sel_), (a2,b,sel);or (out,a1,a2);endmodule門級結(jié)構(gòu)描述的2選1MUX7.3行為描述
1.概念行為描述就是對設(shè)計實體的數(shù)學(xué)模型的描述,其抽象程度遠高于結(jié)構(gòu)描述方式。行為描述類似于高級編程語言,當描述一個設(shè)計實體的行為時,無需知道具體電路的結(jié)構(gòu),只需要描述清楚輸入與輸出信號之間的邏輯關(guān)系,而不需要花費更多的精力關(guān)注設(shè)計功能的門級實現(xiàn)。
2.對比結(jié)構(gòu)描述側(cè)重于表示一個電路由哪些基本元件組成,以及這些基本元件的互聯(lián)關(guān)系。
行為描述則主要描述輸入輸出信號間的邏輯關(guān)系。3.實現(xiàn)途徑
always過程語句實現(xiàn),這種行為描述的方式,既適合于設(shè)計時序電路,也適合于實現(xiàn)組合電路。
行為描述的2選1MUXmodulemux2(out,a,b,sel);outputout;inputa,b,sel;
regout;always@(aorborsel)begin
if(sel) out=b;else out=a;endendmodule7.4數(shù)據(jù)流描述1.概念數(shù)據(jù)流描述是通過表達式、操作符和操作數(shù)來設(shè)計電路的一種方式。2.實現(xiàn)途徑數(shù)據(jù)流描述方式主要使用持續(xù)賦值語句assign,多用于描述組合邏輯電路,其格式為:assignLHS_net=RHS_expression;右邊表達式中的操作數(shù)無論何時發(fā)生變化,都會引起表達式值的重新計算,并將重新計算后的值賦予左邊表達式的net型變量。數(shù)據(jù)流描述的2選1MUXmoduleMUX3(out,a,b,sel);outputout;inputa,b,sel;assignout=sel?b:a;endmodule7.5不同描述風(fēng)格的設(shè)計對設(shè)計者而言,采用的描述級別越高,設(shè)計越容易;描述級別越低,設(shè)計就越繁瑣越艱難。就像用高級語言和匯編語言編寫程序的區(qū)別一樣。對綜合器而言,高級別的描述為綜合器的優(yōu)化提供了更大的空間,較之門級結(jié)構(gòu)描述更能發(fā)揮綜合器的性能,所以在電路設(shè)計中,除非一些關(guān)鍵路徑的設(shè)計采用門級結(jié)構(gòu)描述外,一般更多地采用行為建模方式。結(jié)構(gòu)描述的1位全加器modulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule數(shù)據(jù)流描述的1位全加器modulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;assignsum=a^b^cin;assigncout=(a&b)|(b&cin)|(cin&a);endmodulemodulefull_add2(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;assign{cout,sum}=a+b+cin;endmodule行為描述的1位全加器modulefull_add3(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;regsum,cout,m1,m2,m3;always@(aorborcin)beginm1=a&b;m2=b&cin;m3=a&cin;sum=(a^b)^cin;cout=(m1|m2)|m3;endendmodulemodulfull_add4(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;reg
sum,cout;always@(aorborcin)begin{cout,sum}=a+b+cin;endendmodule混合方式描述的1位全加器
在模塊中,可以將結(jié)構(gòu)描述和行為描述混合。也就是說,模塊描述中可以調(diào)用門元件、調(diào)用其他模塊,也可以包含持續(xù)賦值語句以及過程語句(initial、always)。
來自always語句和initial語句的值(reg型)可以驅(qū)動門或開關(guān),而來自門或持續(xù)賦值語句的值(wire型)也能夠用于觸發(fā)always語句和initial語句。
modulfull_add5(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;
regcout,m1,m2,m3;
xorx1(s1,a,b);
assignsum=s1^cin;
always@(aorborcin)
beginm1=a&b;m2=b&cin;m3=a&cin;cout=(m1|m2)|m3;end
endmodule
4位加法器4-bitadder`include"full_add1.v"moduleadd4_1(sum,cout,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;
full_add1f0(a[0],b[0],cin,sum[0],cin1);full_add1f1(a[1],b[1],cin1,sum[1],cin2);full_add1f2(a[2],b[2],cin2,sum[2],cin3);full_add1f3(a[3],b[3],cin3,sum[3],cout);endmodule問題:什么是級聯(lián)全加器?有何特點?電路運行的并行性以及邏輯關(guān)系上的串行性如何?結(jié)構(gòu)描述的4位級連全加器moduleadd4_2(cout,sum,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;assign{cout,sum}=a+b+cin;endmodule數(shù)據(jù)流描述的4位加法器行為描述的4位加法器moduleadd4_3(cout,sum,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;reg[3:0]sum;reg
cout;always@(aorborcin) begin {cout,sum}=a+b+cin; endendmodule組合邏輯電路與時序邏輯電路的概念組合邏輯電路組合邏輯電路的特點是任意時刻的輸出僅取決于當前時刻的輸入,與電路原來的狀態(tài)無關(guān)。輸入的變化直接反映出了輸出的變化。時序邏輯電路輸出不僅與當前的輸入有關(guān),而且其輸出與電路原來的狀態(tài)有關(guān)。相當于在組合邏輯的輸出端加上了一個寄存器電路和一個反饋輸入。以存儲電路上一時刻的狀態(tài),并將這個狀態(tài)反饋回輸入端。7.6基本組合電路設(shè)計門級結(jié)構(gòu)描述
modulegate1(F,A,B,C,D);inputA,B,C,D;outputF;nand(F1,A,B);//調(diào)用門元件and(F2,B,C,D);or(F,F1,F2);endmodule數(shù)據(jù)流描述modulegate2(F,A,B,C,D);inputA,B,C,D;outputF;assignF=(A&B)|(B&C&D); //assign持續(xù)賦值endmodule行為描述modulegate3(F,A,B,C,D);inputA,B,C,D;outputF;regF;always@(AorBorCorD)
//過程賦值beginF=(A&B)|(B&C&D);endendmoduleF1F2基本組合電路設(shè)計——三態(tài)門1)用bufif1關(guān)鍵字描述的三態(tài)門
moduletri_1(in,en,
out);inputin,en;outputout;
triout;//與定義為wire型是一樣
bufif1b1(out,in,en);
endmodule2)用數(shù)據(jù)流描述三態(tài)門moduletri_2(in,en,
out);inputin,en;outputout;assignout=en?in:’bz;
endmodule3)行為描述三態(tài)門moduletri_3(in,en,out);inputin,en;outputout;
regout;
always@(inoren)out=en?in:'bz;
endmodulemodulebidir(tri_inout,out,in,en,b);inputin,en,b;
inout
tri_inout;outputout;assigntri_inout=en?in:’bz;assignout=tri_inout^b;endmodule
基本組合電路設(shè)計——三態(tài)雙向驅(qū)動器基本組合電路設(shè)計——3-8譯碼器moduledecoder_38(out,in);output[7:0]out;input[2:0]in;reg[7:0]out;3-8譯碼器真值表always@(in)begin
case(in)3'd0:out=8'b11111110;3'd1:out=8'b11111101;3'd2:out=8'b11111011;3'd3:out=8'b11110111;3'd4:out=8'b11101111;3'd5:out=8'b11011111;3'd6:out=8'b10111111;3'd7:out=8'b01111111;
endcaseendendmodule輸入輸出0001111111000111111101010111110110111111011110011101111101110111111101011111111101111111基本組合電路設(shè)計——8-3優(yōu)先編碼器moduleencoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);
inputa,b,c,d,e,f,g,h;//8個輸入outputnone_on;//沒有一個為1的標識output[2:0]outcode;//三位編碼輸出reg[3:0]outtemp;//用于臨時保存輸出的變量assign{none_on,outcode}=outtemp;
always@(aorborcordoreorforgorh)begin
if(h)outtemp=4’b0111;elseif(g)outtemp=4’b0110;elseif(f)outtemp=4’b0101;elseif(e)outtemp=4’b0100;elseif(d)outtemp=4’b0011;elseif(c)outtemp=4’b0010;elseif(b)outtemp=4’b0001;elseif(a)outtemp=4’b0000;elseouttemp=4’b1000;endendmodule
問題:何謂優(yōu)先編碼?如何實現(xiàn)優(yōu)先編碼?
always@(aorborcordoreorforgorh)begin
casez({a,b,c,d,e,f,g,h})8’b1???????:outtemp=4’b0111;8’b?1??????:
outtemp=4’b0110;8’b??1?????:
outtemp=4’b0101;8’b???1????:
outtemp=4’b0100;8’b?1??1???:
outtemp=4’b0011;8’b?1???1??:
outtemp=4’b0010;8’b?1????1?:
outtemp=4’b0001;8’b?1?????1:
outtemp=4’b0000;defaultouttemp=4’b1000;endif-else以及case結(jié)構(gòu)的選擇使用
1)一般來說,使用if...else語句中的條件式互斥的(因為互斥所以不存在優(yōu)先級),在
synplify下的綜合結(jié)果就是并行且不帶優(yōu)先級的電路;但是如果條件不互斥,對應(yīng)的電路則帶優(yōu)先級。2)某些綜合效果較差的綜合工具可能不會對if...else進行優(yōu)化,這種條件互斥的完全沒有必要綜合成優(yōu)先級電路的語句也可能被綜合成優(yōu)先級電路。因此,為了盡量實現(xiàn)代碼的綜合結(jié)果和平臺無關(guān),對于不帶優(yōu)先級的條件電路,最好使用case語句描述。
3)casex,casez語句,當各個分支條件有交疊時,也會被綜合器綜合為有優(yōu)先級的電路?;窘M合電路設(shè)計——8-3優(yōu)先編碼器(函數(shù)實現(xiàn))modulecode_83(din,dout);input[7:0]din;output[2:0]dout;function[2:0]code;input[7:0]din;if(din[7])code=3’b111;elseif(din[6])code=3’b110;elseifdin[5])code=3’b101;elseif(din[4])code=3’b100;elseif(din[3])code=3’b011;elseif(din[2])code=3’b010;elseif(din[1])code=3’b001;elseif(din[0])code=3’b000;elsecode=3’b000;
endfunctionassigndout=code(din);endmodule基本組合電路設(shè)計-奇偶校驗位產(chǎn)生器奇偶校驗位產(chǎn)生器
Moduleparity(even_bit,odd_bit,input_bus);outputeven_bit,odd_bit;input[7:0]input_bus;assignodd_bit=^input_bus;//產(chǎn)生奇校驗位assigneven_bit=~odd_bit; //產(chǎn)生偶校驗位
endmodule
奇偶校驗位產(chǎn)生的原理:將輸入數(shù)據(jù)的每一位相互進行異或運算(用縮位運算符),若有奇數(shù)個“1”則會輸出“1”,否則輸出“0”。
11111(相異為1,相同為0)001017.7
基本時序電路設(shè)計D-FFdesigns(基本D觸發(fā)器)moduleDFF(Q,D,CLK);outputQ;inputD,CLK;regQ;always@(posedgeCLK)beginQ<=D;endEndmoduleD觸發(fā)器原理:當時鐘信號為有效邊沿時,將輸入D鎖存到輸出Q.
即,來一次有效邊沿,則執(zhí)行一次數(shù)據(jù)鎖存。其他時刻,無論輸入信號如何變化,輸出都不變。因此,用邊沿觸發(fā)的always語句就能實現(xiàn)?;緯r序電路設(shè)計帶異步清0、異步置1的D觸發(fā)器moduleDFF1(q,qn,d,clk,set,reset);inputd,clk,set,reset;
outputq,qn;
reg
q,qn;always@(posedge
clk
ornegedgesetornegedgereset)beginif(!reset) beginq<=0;
qn<=1;//異步清0,低電平有效endelseif(!set) beginq<=1;
qn<=0;//異步置1,低電平有效endelsebeginq<=d;
qn<=~d;endendendmodule基本時序電路設(shè)計帶同步清0、同步置1的D觸發(fā)器moduleDFF2(q,qn,d,clk,set,reset);inputd,clk,set,reset;outputq,qn;regq,qn;always@(posedge
clk)beginif(reset)//同步清0,高電平有效beginq<=0;qn<=1;endelseif(set)//同步置1,高電平有效beginq<=1;qn<=0;endelsebeginq<=d;qn<=~d;endendendmodule基本時序電路設(shè)計8位數(shù)據(jù)鎖存器modulelatch_8(qout,data,clk);output[7:0]qout;input[7:0]data;inputclk;reg[7:0]qout;always@(clkordata)begin
if(clk)qout<=data;endEndmodule鎖存器的含義:當時鐘為有效電平(時段)時,鎖存器的輸出同步反映輸入值。
基本時序電路設(shè)計8位數(shù)據(jù)寄存器modulereg8(out_data,in_data,clk,clr);output[7:0]out_data;input[7:0]in_data;inputclk,clr;reg[7:0]out_data;always@(posedge
clkorposedge
clr)beginif(clr) out_data<=0;else out_data<=in_data;endendmodule寄存器的含義:當時鐘為有效邊沿時(時刻),將輸入賦給輸出。其他時刻,保持不變,直到下一有效邊沿到來為止。
鎖存器和寄存器的區(qū)別:鎖存器一般用電平來控制;寄存器一般用同步時鐘的邊沿來控制;鎖存器和寄存器的應(yīng)用場合:若數(shù)據(jù)信號滯后于控制信號有效,則只能用鎖存器。
若數(shù)據(jù)信號超前于控制信號有效,并且要求同步操作,則可以選擇寄存器來存放數(shù)據(jù)?;緯r序電路設(shè)計基本時序電路設(shè)計可變模加法/減法計數(shù)器(帶同步清零和預(yù)置)moduleupdown_count(d,clk,clear,load,up_down,qd);input[7:0]d;inputclk,clear,load,up_down;output[7:0]qd;reg[7:0]cnt;assignqd=cnt;always@(posedge
clk)beginif(!clear) cnt=8'h00; //同步清0,低電平有效elseif(load) cnt=d; //同步預(yù)置elseif(up_down)cnt=cnt+1; //加法計數(shù)else cnt=cnt-1; //減法計數(shù)endendmodule8位移位寄存器(串轉(zhuǎn)并)clr基本時序電路設(shè)計d1d0dinclkdinmoduleshifter(din,clk,clr,dout);inputdin,clk,clr;output[7:0]dout;reg[7:0]dout;always@(posedge
clk)begin
if(clr)串行還是并行?
dout<=8’b0;else
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兼職外教合同書范本
- 快遞公司加盟合作協(xié)議
- 2024年政府購買服務(wù)合同書格式
- 建筑工程設(shè)計合同條款解析
- 廣東省汕尾市勞動合同范本
- 建筑工人保密協(xié)議合同
- 國際技術(shù)轉(zhuǎn)讓合同的風(fēng)險評估和管理
- 2024年購房簡單協(xié)議書
- 承包運輸協(xié)議書2024年
- 2024年第三方擔(dān)保合同補充協(xié)議正規(guī)范本
- 物聯(lián)網(wǎng)信息安全知識考核試題與答案
- 軍樂隊樂器種類以及人員編制
- 常見皮膚病講稿
- 高中化學(xué)選修4《化學(xué)反應(yīng)原理》全冊教案
- 創(chuàng)建學(xué)習(xí)型醫(yī)院實施方案
- 大學(xué)《通用英語1》 期中測試卷試題
- 新人教選擇性必修一 Unit 4:Discover Useful Structures
- 公共政策導(dǎo)論完整版課件全套ppt教學(xué)教程(最新)
- 2021年電力設(shè)備預(yù)防性試驗規(guī)程
- 創(chuàng)意大自然動物世界保護野生動物動物介紹PPT模板
- 初中音樂 八年級上冊 國樂飄香 《小放驢》微課 教學(xué) 課件
評論
0/150
提交評論