第4章-Verilog-HDL的描述方式_第1頁
第4章-Verilog-HDL的描述方式_第2頁
第4章-Verilog-HDL的描述方式_第3頁
第4章-Verilog-HDL的描述方式_第4頁
第4章-Verilog-HDL的描述方式_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

上節(jié)回顧塊語句語句塊提供將兩條或更多條語句組合成語法結(jié)構(gòu)上相當(dāng)于一條語句的機(jī)制。在VerilogHDL中有兩類語句塊,即:

順序語句塊(begin...end):語句塊中的語句按給定次序順序執(zhí)行。

并行語句塊(fork...join):語句塊中的語句并行執(zhí)行。語句塊的標(biāo)識符是可選的,如果有標(biāo)識符,寄存器變量可在語句塊內(nèi)部聲明。帶標(biāo)識符的語句塊可被引用編譯預(yù)處理Verilog-HDL語言中有幾種特殊命令,編譯系統(tǒng)先對這些特殊命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起進(jìn)行通常的編譯處理。這些預(yù)處理命令:以重音符號ˋ開頭行末尾不加分號常用預(yù)處理命令:

`include/`define,`undef/`timescale/`ifdef,`else,`endif/`default_nettype`resetall/

`unconnected_drive,`nounconnected_drive`celldefine,`endcelldefine1)編寫一模塊test1,生成如下波形2)編寫一模塊test2,生成一個周期為20的時鐘信號VerilogHDL的描述方式結(jié)構(gòu)描述

12行為描述3混合描述4數(shù)據(jù)流描述一、結(jié)構(gòu)描述在Verilog程序中可通過如下方式描述電路的結(jié)構(gòu)◆調(diào)用Verilog內(nèi)置門元件(門級結(jié)構(gòu)描述)◆調(diào)用開關(guān)級元件(晶體管級結(jié)構(gòu)描述)◆用戶自定義元件UDP(也在門級)1、門級結(jié)構(gòu)描述moduleaddbit(a,b,ci,sum,co);inputa,b,ci;outputsum,co;wirea,b,ci,sum,co,n1,n2,n3;

xor(n1,a,b,);xor(sum,n1,ci);and(n2,a,b);and(n3,n1,ci);or(co,n2,n3);endmodule

由一些Verilog原型列出結(jié)構(gòu)化的元件并按網(wǎng)表連接1.1內(nèi)置的基本門VerilogHDL為門級電路建模的能力提供下列內(nèi)置基本門:多輸入門:and,nand,or,nor,xor,xnor

多輸出門:buf,not

三態(tài)門:bufif0,bufif1,notif0,notif1

上拉、下拉電阻:pullup,pulldownMOS開關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos

雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1門級結(jié)構(gòu)建模語法語句形式gate_type[instance_name](term1,term2,...,termN);注意,instance_name是可選的;gate_type為前面列出的某種門類型。各term用于表示與門的輸入/輸出端口相連的線網(wǎng)或寄存器.同一門類型的多個實(shí)例能夠在一個結(jié)構(gòu)形式中定義gate_type[instance_name1](term1,term2,...,termN),

[instance_name2](term1,term2,...,termN),

[instance_name3](term1,term2,...,termN),

[instance_name4](term1,term2,...,termN);1.2

多輸入門內(nèi)置的多輸入門包括:andnandnororxor

xnor這些邏輯門只有單個輸出,1個或多個輸入。門實(shí)例語句的語法如:multi_input_gate_type[instance_name](OutputA,Input1,Input2,...,InputN);第一個端口是輸出,其它端口是輸入input1多輸入門input2inputNOutputA多輸入門語法舉例andA1(Out1,In1,In2);andRBX(Sty,Rib,Bro,Qit,Fix);xor(Bar,Bud[0],Bud[1],Bud[2]),(Car,Cut[0],Cut[1]),(Sar,Sut[2],Sut[1],Sut[0],Sut[3]);多輸入門的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXX多輸入門的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XX多輸入門的真值表(三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXX1.3多輸出門多輸出門有:bufnot這些門都只有單個輸入,一個或多個輸出。多輸出門的實(shí)例語句的基本語法如:multi_output_gate_type[instance_name](Out1,Out2,...OutN,InputA);多輸出門output1output2outputNInputA多輸出門語法舉例buf

B1(Fan[0],F(xiàn)an[1],F(xiàn)an[2],F(xiàn)an[3],Clk);notN1(PhA,PhB,Ready);真值表01XZbuf01XXnot10XX1.4三態(tài)門三態(tài)門有:bufif0bufif1notif0notif1這些門用于對三態(tài)驅(qū)動器建模。這些門有一個輸出、一個數(shù)據(jù)輸入和一個控制輸入。三態(tài)門實(shí)例語句的基本語法如下:

tristate_gate[instance_name](OutputA,InputB,ControlC);第一個端口OutputA是輸出端口,第二個端口InputB是數(shù)據(jù)輸入,ControlC是控制輸入。inputAoutputAControlC三態(tài)門三態(tài)門的真值表bufif0控制信號01XZ數(shù)據(jù)輸入00Z0/z0/z11Z1/z1/zXXZXxZXZXxbufif1控制信號01XZ數(shù)據(jù)輸入0Z00/z0/z1Z11/z1/zXZXXxZZXXxnotif0控制信號01XZ數(shù)據(jù)輸入01Z1/z1/z10Z0/z0/zXXZXxZXZXxnotif1控制信號01XZ數(shù)據(jù)輸入0Z11/z1/z1Z00/z0/zXZXXxZZXXx門級結(jié)構(gòu)建模例題module

flop(data,clock,clear,q,qb);input

data,clock,clear;output

q,qb;nand

#10 nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand

#9nd3(c,a,d),nd7(q,e,qb);not

#10 iv1(ndata,data),iv2(nclock,clock);endmodule課堂練習(xí)用verilog的內(nèi)置基本門結(jié)構(gòu)建模以下電路參考答案moduleParity_9_Bit(D,Even,Odd);input[0:8]D;outputEven,Odd;xor

XE0(E0,D[0],D[1]), XE1(E1,D[2],D[3]), XE2(E2,D[4],D[5]), XE3(E3,D[6],D[7]), XF0(F0,E0,E1), XF1(F1,E2,E3), XH0(H0,F0,F1), XEVEN(Even,D[8],H0);notXODD(Odd,Even);endmodule門級描述的特點(diǎn):1.一個邏輯網(wǎng)絡(luò)是由許多邏輯門和開關(guān)所組成,因此用邏輯門的模型來描述邏輯網(wǎng)絡(luò)是最直觀的。2.不易得出模塊邏輯功能。1.5其他門級模型其他門級模型包括上拉、下拉電阻:pullup,pulldownMOS開關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos

雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1上拉、下拉電阻pullup,pulldown,這類門設(shè)備沒有輸入只有輸出。上拉電阻將輸出置為1。下拉電阻將輸出置為0。門實(shí)例的端口表只包含1個輸出。例如:pullupPUP(SCL);此上拉電阻實(shí)例名為PUP,輸出Pwr置為高電平1。MOS開關(guān)這類門用來為單向開關(guān)建模。即數(shù)據(jù)從輸入流向輸出,并且可以通過設(shè)置合適的控制輸入關(guān)閉數(shù)據(jù)流。pmos(p類型MOS管)、nmos(n類型MOS管),rnmos(r代表電阻)和rpmos開關(guān)有一個輸出、一個輸入和一個控制輸入,例如:rnmosRN1(ControlBit,ReadyBit,Hold);cmos(mos互補(bǔ))和rcmos(cmos的高阻態(tài)版本)開關(guān)有一個數(shù)據(jù)輸出,一個數(shù)據(jù)輸入和兩個控制輸入。例如:(r)cmos

[instance_name](OutputA,InputB,NControl,PControl);rnmos、rpmos、驅(qū)動強(qiáng)度rnmos和

rpmos在輸入引線和輸出引線之間存在高阻抗(電阻)。因此當(dāng)數(shù)據(jù)從輸入傳輸至輸出時,對于rpmos和rnmos,存在數(shù)據(jù)信號強(qiáng)度衰減。值1強(qiáng)度supply1>strong1>pull1>weak1>highz1值0強(qiáng)度supply0>strong0>pull0>weak0>highz0雙向開關(guān)雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1開關(guān)是雙向的,即數(shù)據(jù)可以雙向流動,并且當(dāng)數(shù)據(jù)在開關(guān)中傳播時沒有延時。后4個開關(guān)能夠通過設(shè)置合適的控制信號來關(guān)閉。tran和rtran(tran的高阻態(tài)版本)開關(guān)不能被關(guān)閉。gate_type[instance_name](SignalA,SignalB,ControlC);前兩個端口是雙向端口,即數(shù)據(jù)從SignalA流向SignalB,反之亦然。第三個端口是控制信號。根據(jù)開關(guān)例化的選擇有控制信號或者沒有控制信號。1.6門的延時可以使用門時延定義門從任何輸入到其輸出的信號傳輸時延。門時延可以在門自身實(shí)例語句中定義。帶有時延定義的門實(shí)例語句的語法如下:

gate_type[delay][instance_name](terminal_list);時延規(guī)定了門時延,即從門的任意輸入到輸出的傳輸時延。當(dāng)沒有強(qiáng)調(diào)門時延時,缺省的時延值為0。門時延由三類時延值組成:上升時延下降時延截止時延門時延定義個數(shù)0個時延1個時延2個時延3個時延上升0dd1d1下降0dd2d2to_X0dmin(d1,d2)min(d1,d2,d3)截止0dmin(d1,d2)d3門時延由三類時延值組成:上升時延,下降時延,截止時延門時延定義可以包含0個、1個、2個或3個時延值。門時延舉例notN1(Qbar,Q);//門時延為0nand

#6(Out,In1,In2);//所有時延均為6,即上升和下降時延都是6and#(3,5)(Out,In1,In2,In3);notif1#(2,8,6)(Dout,Din1,Din2);//上升時延為2,下降時延為8,截止時延為6,轉(zhuǎn)換到x的時延是2、8和6中的最小值,即2。門延遲也可采用min:type:max形式定義。最小值、典型值和最大值必須是常數(shù)表達(dá)式。例如:and#(2:3:4,5:6:7)(Pout,Pin1,Pin2);如要更精確定義門延時,可用specify語句定義從特定的輸入到輸出端的各種延時.1.7矢量線網(wǎng)用于門結(jié)構(gòu)描述當(dāng)需要進(jìn)行多次實(shí)例引用時,在實(shí)例描述語句中能夠有選擇地定義范圍說明,以便自動生成多個重復(fù)的實(shí)例。wire[3:0]Out,InA,InB;nand

Gang[3:0](Out,InA,InB);實(shí)例化時自動以相同的標(biāo)號對齊。等價于nandGang3(Out[3],InA[3],InB[3]),Gang2(Out[2],InA[2],InB[2]),Gang1(Out[1],InA[1],InB[1]),Gang0(Out[0],InA[0],InB[0]);注意:當(dāng)指定實(shí)例數(shù)組時,必須明確定義實(shí)例名。例:parameterNUM=4;

wire[NUM-1:0]gate,in; wirebypass; and#(1,2)u0and[NUM-1:0](gate,in,bypass);注意:bypass是一個標(biāo)量。這種情況下,該標(biāo)量扇出(連接)到所有實(shí)例的端口。門級結(jié)構(gòu)建模例題`timescale1ns/1nsmoduleDEC2X4(A,B,Enable,Z);inputA,B,Enable;output[0:3]Z;wire

Abar,Bbar;not

#(1,2)V0(Abar,A),V1(Bbar,B);nand

#(4,3)N0(Z[3],Enable,A,B),N1(Z[0],Enable,Abar,Bbar),N2(Z[1],Enable,Abar,B),N3(Z[2],Enable,A,Bbar);endmodule注意:在同一模塊中,實(shí)例名不能與線網(wǎng)名相同。not#(1,2)Abar(Abar,A)

×門級結(jié)構(gòu)建模練習(xí)題參考解答`timescale1ns/1nsmodule

GateCircuit(Data,Encode,Valid)input[3:0]Data;output[1:0]Encode,Valid;notG1(NotData[2],Data[2]);andG2(A,NotData[2],Data[1]);orG3(B,Data[1],Data[0]),

G4(Encode[0],Data[3],A),

G5(Encode[1],Data[3],Data[2]),

G6(Valid,Data[3],Data[2],B);

endmodule二、行為描述

就是對設(shè)計實(shí)體的數(shù)學(xué)模型的描述,其抽象程度遠(yuǎn)高于結(jié)構(gòu)描述方式。行為描述類似于高級編程語言,當(dāng)描述一個設(shè)計實(shí)體的行為時,無需知道具體電路的結(jié)構(gòu),只需要描述清楚輸入與輸出信號的行為(即輸入、輸出的因果關(guān)系,也就是在何種輸入下產(chǎn)生何種輸出),而不需要花費(fèi)更多的精力關(guān)注設(shè)計功能的門級實(shí)現(xiàn)。EDA的綜合工具能自動將行為描述轉(zhuǎn)換成電路結(jié)構(gòu),形成網(wǎng)表文件。

顯然,當(dāng)電路的規(guī)模較大或時序關(guān)系較復(fù)雜時,通常采用行為描述方式進(jìn)行設(shè)計。

行為描述模塊的設(shè)計模型其他如:initial語句;并發(fā)執(zhí)行語句。行為描述的2選1MUXmodulemux2(out,a,b,sel);outputout;inputa,b,sel;regout;always@(aorborsel)begin

if(sel) out=b;else out=a;endendmodule三、數(shù)據(jù)流描述

數(shù)據(jù)流描述方式主要使用持續(xù)賦值語句,多用于描述組合邏輯電路,其格式為:

assign

LHS_net=RHS_expression;狹義上講,將傳統(tǒng)意義上的“邏輯表達(dá)式”運(yùn)用verilog中的運(yùn)算符,變成連續(xù)賦值中的表達(dá)式。右邊表達(dá)式中的操作數(shù)無論何時發(fā)生變化,都會引起表達(dá)式值的重新計算,并將重新計算后的值賦予左邊表達(dá)式的net型變量。數(shù)據(jù)流描述模塊的設(shè)計模型數(shù)據(jù)流描述的2選1MUXmoduleMUX3(out,a,b,sel);outputout;inputa,b,sel;assignout=sel?b:a;endmodule不同描述風(fēng)格的設(shè)計

對設(shè)計者而言,采用的描述級別越高,設(shè)計越容易;對綜合器而言,行為級的描述為綜合器的優(yōu)化提供了更大的空間,較之門級結(jié)構(gòu)描述更能發(fā)揮綜合器的性能,所以在電路設(shè)計中,除非一些關(guān)鍵路徑的設(shè)計采用門級結(jié)構(gòu)描述外,一般更多地采用行為建模方式。

結(jié)構(gòu)描述的一位全加器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_add2(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;assignsum=a^b^cin;assigncout=(a&b)|(b&cin)|(cin&a);endmodule行為描述的1位全加器Modulefull_add3(a,b,cin,sum,cout);inputa,b,cin;output

sum,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;endendmodule4位加法器`include"full_add1.v"moduleadd4_1(sum,cout,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;full_add1f

溫馨提示

  • 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

提交評論