Verilog語法規(guī)定及實(shí)例課件_第1頁
Verilog語法規(guī)定及實(shí)例課件_第2頁
Verilog語法規(guī)定及實(shí)例課件_第3頁
Verilog語法規(guī)定及實(shí)例課件_第4頁
Verilog語法規(guī)定及實(shí)例課件_第5頁
已閱讀5頁,還剩129頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

VerilogHDL第九章硬件描述語言簡介VerilogHDL第九章硬件描述語言簡介1HDL的含義HardwareDescriptionLanguageHDL的含義2VerilogHDL與其他HDL比較VerilogHDL

—“告訴我你想要電路做什么,我給你提供能實(shí)現(xiàn)這個(gè)功能的硬件電路”VHDL

—和VerilogHDL類似ABEL、AHDL

—“告訴我你想要什么樣的電路,我給你提供這樣的電路”VerilogHDL與其他HDL比較VerilogHDL3什么是VerilogHDL能夠?qū)?shù)字邏輯電路的功能和結(jié)構(gòu)進(jìn)行描述的一種高級(jí)編程語言PLD/FPGA的設(shè)計(jì)開發(fā)語言編寫程序描述數(shù)字電路的功能與結(jié)構(gòu)描述電路的功能描述電路的結(jié)構(gòu)表達(dá)具有并行性什么是VerilogHDL4VerilogHDL特點(diǎn)

符合C語言語法習(xí)慣簡單,容易上手,縮短培訓(xùn)時(shí)間,如果有數(shù)字電子技術(shù)和C語言的基礎(chǔ),稍加學(xué)習(xí)即可編寫能實(shí)現(xiàn)的電路。但也僅僅是語法上的相似而已并發(fā)執(zhí)行,多條語句可能同時(shí)執(zhí)行,在硬件上,實(shí)現(xiàn)不同功能的電路在同一時(shí)刻工作具有時(shí)序的概念,硬件電路輸入到輸出存在延遲。語法規(guī)則死,糾錯(cuò)仿真功能弱,錯(cuò)誤信息不完整,較C語言更難發(fā)現(xiàn)錯(cuò)誤VerilogHDL特點(diǎn)

符合C語言語法習(xí)慣5VerilogHDL語言的描述風(fēng)格VerilogHDL語言的描述風(fēng)格,或者說描述方式,又可分為三類行為型描述指對(duì)行為與功能進(jìn)行描述,它只描述行為特征,而沒有涉及到用什么樣的時(shí)序邏輯電路來實(shí)現(xiàn),因此是一種使用高級(jí)語言的方法,具有很強(qiáng)的通用性和有效性。數(shù)據(jù)流型描述指通過assign連續(xù)賦值實(shí)現(xiàn)組合邏輯功能的描述。結(jié)構(gòu)型描述指描述實(shí)體連接的結(jié)構(gòu)方式,它通常通過實(shí)例進(jìn)行描述,將Verilog已定義的基元實(shí)例嵌入到語言中。VerilogHDL語言的描述風(fēng)格VerilogHDL語62選1數(shù)據(jù)選擇器及仿真研究moduleMux21(a,b,s,y); //----------------

inputa,b;

inputs;

outputy;

assigny=(s==0)?a:b; //--------------endmodule //----------------1.assign語句2.表達(dá)式1?表達(dá)式2:表達(dá)式32選1數(shù)據(jù)選擇器及仿真研究1.assign語句2.表達(dá)7Verilog語法規(guī)定及實(shí)例課件8數(shù)據(jù)流描述moduleMux21(a,b,s,y);

inputa,b;

inputs;

outputy;

wired,e; //--------------1

assignd=a&(~s);

assigne=b&s;

assigny=d|e; //--------------2endmodule

數(shù)據(jù)流描述moduleMux21(a,b,s,y); 9&01xz00000101xxx0xxxz0xxx|01xz001xx11111xx1xxzx1xx^01xz001xx110xxxXxxxzXxxx~0110xxzx^~01xz010xx101xxxxxxxzxxxx&01xz00000101xxx0xxxz0xxx|01xz10

行為級(jí)描述MUX的行為可以描述為:只要信號(hào)a或b或s發(fā)生變化,如果s為0則選擇a輸出;否則選擇b輸出。modulemux21(y,a,b,s);

inputa,b,s;

outputy;

regy;always@(soraorb)

if(!s)y=a;elsey=b;endmodule在行為級(jí)模型中,邏輯功能描述采用高級(jí)語言結(jié)構(gòu),如@,while,wait,if,case。行為級(jí)描述MUX的行為可以描述為:只要信號(hào)a或b或s發(fā)生11Logicaloperators邏輯運(yùn)算符

&&(與)、||(或)、!(非)與邏輯優(yōu)先級(jí)別高于或邏輯,但都低于關(guān)系和等式運(yùn)算符。results——1(真)、0(假)andx(不確定值)。a=b&&c;b=a||c;a<b-1&&b!=c||c!=d(a<b-1)&&(b!=c)||(c!=d)if(!inword)if(inword==0)Logicaloperators邏輯運(yùn)算符&&(與)、12結(jié)構(gòu)型描述結(jié)構(gòu)級(jí)Verilog適合開發(fā)小規(guī)模元件,如ASIC和FPGA的單元Verilog內(nèi)部帶有描述基本邏輯功能的基本單元(primitive),如and門。綜合產(chǎn)生的結(jié)果網(wǎng)表通常是結(jié)構(gòu)級(jí)的。用戶可以用結(jié)構(gòu)級(jí)描述簡單的組合或時(shí)序邏輯。下面是MUX的結(jié)構(gòu)級(jí)描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時(shí)。modulemux21(out,a,b,sl);

inputa,b,sl;

outputout;

notu1(nsl,sl);

and#1u2(sela,a,nsl);

and#1u3(selb,b,sl);

or#2u4(out,sela,selb);endmodule結(jié)構(gòu)型描述結(jié)構(gòu)級(jí)Verilog適合開發(fā)小規(guī)模元件,如ASIC134選1數(shù)據(jù)選擇器實(shí)例之一modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always

@(in0orin1orin2orin3orsel)case(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;2'b11:out=in3;default:out=x;endcaseendmodulesel(1)sel(0)out00in001in110in211in34選1數(shù)據(jù)選擇器實(shí)例之一modulemux4_1(out14wire[7:0]bus; //8位矢量網(wǎng)表busreg[0:40]addr;//41位矢量寄存器addrreg[-1:4]b; //6位矢量寄存器bbus[0] //bus的第0位bus[2:0] //bus的三位最低有效位。注意不能用bus[0:2],應(yīng)和定義中保持一致。addr[0:1] //addr的兩位最高有效位wire[7:0]bus; //8位矢量網(wǎng)表bus15數(shù)的表示方法整型常量decimal,hexadecimal,octalorbinaryformat.兩種表達(dá)方法簡單的十進(jìn)制數(shù).10,9,156.<位寬(可選)><'進(jìn)制><0-9andatof(hexadecimal)>attention!必須在進(jìn)制符號(hào)前加“'”號(hào),并且“'”號(hào)和進(jìn)制符號(hào)間不能存在空格進(jìn)制符號(hào):b或B(二進(jìn)制),d或D(十進(jìn)制),h或H(十六進(jìn)制),o或O(八進(jìn)制)659//Asigneddecimalnumber'h837FF//isahexadecimalnumber'b101 //isa3-bitbinarynumber'o7460//isanoctalnumber4af//isillegal(hexadecimalformatrequires'h)數(shù)的表示方法整型常量16數(shù)字與進(jìn)制之間可以有空格5'D3數(shù)字電路中,x表示不定值,z表示高阻態(tài)。可在十六進(jìn)制,八進(jìn)制和二進(jìn)制中使用x和z,十六進(jìn)制中一個(gè)x表示有四位都是x,八進(jìn)制中一個(gè)x表示三位都是x,二進(jìn)制中則表示一位是x。z用法同理。unsizedconstants32bit10=32'd10=32'b10101=32'd1=32'b1當(dāng)實(shí)際數(shù)據(jù)位數(shù)小于定義的位寬時(shí),如果是無符號(hào)數(shù),則在左邊補(bǔ)零,如果無符號(hào)數(shù)最左邊是“x”,則在左邊補(bǔ)“x”,如果無符號(hào)數(shù)左邊是“z”,則在左邊補(bǔ)“z”

12'h3x=12'h03x,12'hzx=12'hzzx

數(shù)字與進(jìn)制之間可以有空格17在表示長數(shù)據(jù)時(shí)還可以用下劃線“_”進(jìn)行分割以增加程序的可讀性,16‘b1001_0110_1111_zzzz//islegalsyntax8’b_1110_1101//isillegalsyntax在表示長數(shù)據(jù)時(shí)還可以用下劃線“_”進(jìn)行分割以增加程序的可讀性18case語句的語法結(jié)構(gòu)

case(表達(dá)式)

選項(xiàng)值1:語句1; 選項(xiàng)值2:語句2; 選項(xiàng)值3:語句3;

…default:

缺省語句;endcasecase語句的語法結(jié)構(gòu)case(表達(dá)式)19Verilog語法規(guī)定及實(shí)例課件204選1數(shù)據(jù)選擇器實(shí)例之二

modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always

@(in0orin1orin2orin3orsel)beginif(sel==2'b00)out=in0;else

if(sel==2'b01)out=in1;else

if(sel==2'b10)out=in2;else

if(sel==2'b11)out=in3;elseout=2'bx;endendmodule

4選1數(shù)據(jù)選擇器實(shí)例之二always@(in0ori21if(表達(dá)式1)

語句1;elseif(表達(dá)式2)

語句2;elseif…else

語句n;if(表達(dá)式1)22if(a==0) if(b==0) c=1; else c=0;

if(a==0)23begin語句1;語句2;......語句n;endbegin24if(a==0) begin if(b==0) C=1;endelsec=0;if(a==0) begin25缺省項(xiàng)問題moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always

@(aorborc)beginif(a&b)rega=c;else //有缺省項(xiàng)情況

rega=0;y=rega;

endendmodule缺省項(xiàng)問題moduleex3reg(y,a,b,c26Verilog語法規(guī)定及實(shí)例課件27moduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;

always

@(aorborc)begin

if(a&b)rega=c; //缺省項(xiàng)省略

y=rega;

endendmodule

moduleex4reg(y,a,b,c);28Verilog語法規(guī)定及實(shí)例課件29moduleinccase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)

case({a,b})2’b11:e=d;

2’b10:e=~c;

endcaseendmodule

moduleinccase(a,b,c,d,e);304位加法器電路及仿真研究moduleadd_full(A,B,C,Carry,S);inputA,B,C;outputCarry,S;assignS=A^B^C;assignCarry=(A&B)|(B&C)|(A&C);endmodulemoduleadd_full4(A,B,C,S);input[3:0]A,B;output[3:0]S;output[4:0]C;assignC[0]=0;add_fullu1(A[0],B[0],C[0],C[1],S[0]),u2(A[1],B[1],C[1],C[2],S[1]),u3(A[2],B[2],C[2],C[3],S[2]),u4(A[3],B[3],C[3],C[4],S[3]);endmodule

4位加法器電路及仿真研究moduleadd_full431實(shí)例(Instances),例化(instantiation)設(shè)計(jì)中我們可能需要調(diào)用一些已經(jīng)定義好的模塊,作為我們電路中的單元,調(diào)用這些模塊的過程,稱為實(shí)例化(instantiation),調(diào)用完之后,這些電路中的模塊單元稱為實(shí)例(Instance)。實(shí)例的使用格式為:<模塊名><實(shí)例名><端口列表>;實(shí)例(Instances),例化(instantiation32模塊的定義只是說明該模塊的功能與接口,它只提供了一個(gè)模板,它要在電路中獲得實(shí)際應(yīng)用與實(shí)現(xiàn)需要被調(diào)用(實(shí)例化)。Verilog中不允許嵌套定義模塊,即一對(duì)module和endmodule之間只能定義一個(gè)模塊。但一個(gè)模塊內(nèi)可以通過實(shí)例的方式多次調(diào)用其他模塊。模塊的定義只是說明該模塊的功能與接口,它只提供了一個(gè)模板,它33add_fullu1(.A(A[0]),.B(B[0]),.C(C[0]),.Carry(C[1]),.S(S[0])),u2(.A(A[1]),.B(B[1]),.C(C[1]),.Carry(C[2]),.S(S[1])),u3(.A(A[2]),.B(B[2]),.C(C[2]),.Carry(C[3]),.S(S[2])),u4(.A(A[3]),.B(B[3]),.C(C[3]),.Carry(C[4]),.S(S[3]));

add_full34Verilog語法規(guī)定及實(shí)例課件35moduledecode47(a,b,c,d,e,f,g,D3,D2,D1,D0);outputa,b,c,d,e,f,g;inputD3,D2,D1,D0;//輸入4位BCD碼rega,b,c,d,e,f,g;//輸出驅(qū)動(dòng)7個(gè)筆劃段always@(D3orD2orD1orD0)begincase({D3,D2,D1,D0})//用case語句進(jìn)行譯碼4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111111;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'bz;endcaseendendmodule

七段數(shù)碼管譯碼器及仿真研究moduledecode47(a,b,c,d,e,f,g,36Verilog語法規(guī)定及實(shí)例課件37Verilog語法規(guī)定及實(shí)例課件38D觸發(fā)器及仿真研究例9.6.10

moduled_ff(q,d,clk); outputq;inputd,clk;regq; always

@(posedgeclk) q=d; endmoduleD觸發(fā)器及仿真研究例9.6.1039From\to01xz0noposedgeposedgeposedge1negedgeNonegedgenegedgexnegedgeposedgenoNoznegedgeposedgenoNoFrom\to01xz0noposedgeposedgepo40moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;regq1,q2; always

@(posedgeclk) begin

q1=d;q2=q1;

end

endmodule

moduled_ff(q1,q2,d,clk); 41

42例9.6.12

moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;regq1,q2; always@(posedgeclk)

begin

q1<=d;//-----------------------------------1

q2<=q1;//---------------------------2

endendmodule

例9.6.1243Verilog語法規(guī)定及實(shí)例課件44計(jì)數(shù)器及仿真研究例9.6.13

4位加法計(jì)數(shù)器

modulecount4(out,reset,clk);output[3:0]out;inputreset,clk;reg[3:0]out;always@(posedgeclk)beginif(reset)out<=0;//同步復(fù)位elseout<=out+1;//計(jì)數(shù)endendmodule計(jì)數(shù)器及仿真研究例9.6.134位加法計(jì)數(shù)器45Verilog語法規(guī)定及實(shí)例課件46

同步置數(shù)同步清零加法計(jì)數(shù)器

modulecount(out,data,load,reset,clk);output[7:0]out;input[7:0]data;inputload,clk,reset;reg[7:0]out;always@(posedgeclk) //clk上升沿觸發(fā)beginif(!reset)out=8'h00;//同步清0,低電平有效elseif(!load)out=data; //同步預(yù)置elseout=out+1; //計(jì)數(shù)endendmodule

同步置數(shù)同步清零加法計(jì)數(shù)器modulecount(ou47Verilog語法規(guī)定及實(shí)例課件48Verilog語法規(guī)定及實(shí)例課件49

異步清零計(jì)數(shù)器modulecount2(out,reset,clk);output[7:0]out;inputclk,reset;reg[7:0]out;always

@(posedgeclkor

negedgereset)beginif(!reset)out=0;elseout=out+1; //計(jì)數(shù)endendmodule異步清零計(jì)數(shù)器modulecount2(out,rese50Verilog語法規(guī)定及實(shí)例課件51環(huán)扭型計(jì)數(shù)器態(tài)序Q3Q2

Q1Q0F態(tài)序Q3Q2Q1Q0F000001000101110001110010211001201001311101310101411110411010501110501101600110610110700010701010環(huán)扭型計(jì)數(shù)器態(tài)序Q3Q2Q1Q0F態(tài)序Q352modulejohnson(clk,clr,out);inputclk,clr;output[3:0]out;reg[3:0]out;always@(posedgeclk)beginif(clr)out<=4'h0;elsebeginout<=(out>>1);//右移運(yùn)算out[3]<=~out[0];endendmoduleVerilog語法規(guī)定及實(shí)例課件53out<=(out>>1)

a>>n

或a<<n

a代表要進(jìn)行移位的操作數(shù),n代表要移幾位。這兩種移位運(yùn)算都用0來填補(bǔ)移出的空位。例如:start=1;//start在初始時(shí)刻設(shè)為值0001result=(start<<2);//移位后,start的值為0100,然后賦給resultout<=(out>>1)54Verilog語法規(guī)定及實(shí)例課件55modulejohnson(clk,clr,out);inputclk,clr;output[3:0]out;reg[3:0]out;always@(posedgeclkornegedgeclr)beginif(!clr)out<=4'h0;elsebeginout<=(out>>1);//右移運(yùn)算out[3]<=~out[0];endendendmodule

modulejohnson(clk,clr,out);56Verilog語法規(guī)定及實(shí)例課件57modulelfsr4_1(clk,Q);inputclk;output[3:0]Q;wire[3:0]Q;wirenQ0;assignnQ0=~Q[0];DFFDFF_0(.CLK(clk),.Q(Q[0]),.D(Q[1]));DFFDFF_1(.CLK(clk),.Q(Q[1]),.D(Q[2]));DFFDFF_2(.CLK(clk),.Q(Q[2]),.D(Q[3]));DFFDFF_3(.CLK(clk),.Q(Q[3]),.D(nQ0));endmodulemodulelfsr4_1(clk,Q);58Verilog語法規(guī)定及實(shí)例課件59

有限狀態(tài)機(jī)及其仿真研究控制電路的核心部分采用always和case語句.狀態(tài)保存在寄存器中,根據(jù)寄存器不同的值(狀態(tài))執(zhí)行不同的操作,case語句用于選擇不同的狀態(tài)和對(duì)應(yīng)各種狀態(tài)的輸出邏輯。FSM是在時(shí)鐘沿的同步控制作用下從一個(gè)狀態(tài)轉(zhuǎn)換成另一個(gè)狀態(tài)。采用寄存器型變量(avariableofregdatatype)賦值。有限狀態(tài)機(jī)及其仿真研究控制電路的核心部分60設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī)的邏輯電路。它的投幣口每次只能投入一枚五角或一元的硬幣。投入一元五角錢硬幣后機(jī)器自動(dòng)給出一枚飲料;投入兩元(兩枚一元)硬幣后,在給出飲料的同時(shí)找回一枚五角的硬幣。邏輯抽象一元五角售出一瓶飲料找錢one_dollarhalf_dollardispense

half_out狀態(tài)idle:未投幣前初始狀態(tài)狀態(tài)half:投入五角狀態(tài)one:投入一元(一元或兩五角)設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī)的邏輯電路。它的投幣口每次只能投入一枚五角61一元五角售出一瓶飲料找錢one_dollarhalf_dollardispense

half_outAB/YZ一元五角62modulemachine(one_dollar,half_dollar,collect,half_out,dispense,reset,clk);parameteridle=2'b00,half=2'b01,one=2'b10;inputone_dollar,half_dollar,reset,clk;outputcollect,half_out,dispense;regcollect,half_out,dispense;reg[2:0]state;always@(posedgeclk)begin

if(reset)begindispense=0;collect=0;half_out=0;state=idle;end

一元五角售出一瓶飲料找錢one_dollarhalf_dollardispense

half_outmodulemachine(one_dollar,half63case(state)idle:if

(half_dollar)begindispense=0;collect=0;half_out=0;state=half;endelseif(one_dollar)begin

dispense=0;collect=0;half_out=0;state=one;endelsebegindispense=0;collect=0;half_out=0;state=idle;endhalf:if(half_dollar)begin

dispense=0;collect=0;half_out=0;state=one;endelseif(one_dollar)begin

dispense=1;//售出飲料collect=1;half_out=0;state=idle;endelsebegin

dispense=0;collect=0;half_out=0;state=half;endcase(state)half:64one:if(half_dollar)

begindispense=1;//售出飲料collect=1;half_out=0;state=idle;end

elseif(one_dollar)

begin

dispense=1;//售出飲料collect=1;half_out=1;state=idle;

endelsebegin

dispense=0;collect=0;half_out=0;state=one;endendcaseendendmoduleone:if(half_dollar)65Verilog語法規(guī)定及實(shí)例課件66Verilog語法規(guī)定及實(shí)例課件67VerilogHDL第九章硬件描述語言簡介VerilogHDL第九章硬件描述語言簡介68HDL的含義HardwareDescriptionLanguageHDL的含義69VerilogHDL與其他HDL比較VerilogHDL

—“告訴我你想要電路做什么,我給你提供能實(shí)現(xiàn)這個(gè)功能的硬件電路”VHDL

—和VerilogHDL類似ABEL、AHDL

—“告訴我你想要什么樣的電路,我給你提供這樣的電路”VerilogHDL與其他HDL比較VerilogHDL70什么是VerilogHDL能夠?qū)?shù)字邏輯電路的功能和結(jié)構(gòu)進(jìn)行描述的一種高級(jí)編程語言PLD/FPGA的設(shè)計(jì)開發(fā)語言編寫程序描述數(shù)字電路的功能與結(jié)構(gòu)描述電路的功能描述電路的結(jié)構(gòu)表達(dá)具有并行性什么是VerilogHDL71VerilogHDL特點(diǎn)

符合C語言語法習(xí)慣簡單,容易上手,縮短培訓(xùn)時(shí)間,如果有數(shù)字電子技術(shù)和C語言的基礎(chǔ),稍加學(xué)習(xí)即可編寫能實(shí)現(xiàn)的電路。但也僅僅是語法上的相似而已并發(fā)執(zhí)行,多條語句可能同時(shí)執(zhí)行,在硬件上,實(shí)現(xiàn)不同功能的電路在同一時(shí)刻工作具有時(shí)序的概念,硬件電路輸入到輸出存在延遲。語法規(guī)則死,糾錯(cuò)仿真功能弱,錯(cuò)誤信息不完整,較C語言更難發(fā)現(xiàn)錯(cuò)誤VerilogHDL特點(diǎn)

符合C語言語法習(xí)慣72VerilogHDL語言的描述風(fēng)格VerilogHDL語言的描述風(fēng)格,或者說描述方式,又可分為三類行為型描述指對(duì)行為與功能進(jìn)行描述,它只描述行為特征,而沒有涉及到用什么樣的時(shí)序邏輯電路來實(shí)現(xiàn),因此是一種使用高級(jí)語言的方法,具有很強(qiáng)的通用性和有效性。數(shù)據(jù)流型描述指通過assign連續(xù)賦值實(shí)現(xiàn)組合邏輯功能的描述。結(jié)構(gòu)型描述指描述實(shí)體連接的結(jié)構(gòu)方式,它通常通過實(shí)例進(jìn)行描述,將Verilog已定義的基元實(shí)例嵌入到語言中。VerilogHDL語言的描述風(fēng)格VerilogHDL語732選1數(shù)據(jù)選擇器及仿真研究moduleMux21(a,b,s,y); //----------------

inputa,b;

inputs;

outputy;

assigny=(s==0)?a:b; //--------------endmodule //----------------1.assign語句2.表達(dá)式1?表達(dá)式2:表達(dá)式32選1數(shù)據(jù)選擇器及仿真研究1.assign語句2.表達(dá)74Verilog語法規(guī)定及實(shí)例課件75數(shù)據(jù)流描述moduleMux21(a,b,s,y);

inputa,b;

inputs;

outputy;

wired,e; //--------------1

assignd=a&(~s);

assigne=b&s;

assigny=d|e; //--------------2endmodule

數(shù)據(jù)流描述moduleMux21(a,b,s,y); 76&01xz00000101xxx0xxxz0xxx|01xz001xx11111xx1xxzx1xx^01xz001xx110xxxXxxxzXxxx~0110xxzx^~01xz010xx101xxxxxxxzxxxx&01xz00000101xxx0xxxz0xxx|01xz77

行為級(jí)描述MUX的行為可以描述為:只要信號(hào)a或b或s發(fā)生變化,如果s為0則選擇a輸出;否則選擇b輸出。modulemux21(y,a,b,s);

inputa,b,s;

outputy;

regy;always@(soraorb)

if(!s)y=a;elsey=b;endmodule在行為級(jí)模型中,邏輯功能描述采用高級(jí)語言結(jié)構(gòu),如@,while,wait,if,case。行為級(jí)描述MUX的行為可以描述為:只要信號(hào)a或b或s發(fā)生78Logicaloperators邏輯運(yùn)算符

&&(與)、||(或)、!(非)與邏輯優(yōu)先級(jí)別高于或邏輯,但都低于關(guān)系和等式運(yùn)算符。results——1(真)、0(假)andx(不確定值)。a=b&&c;b=a||c;a<b-1&&b!=c||c!=d(a<b-1)&&(b!=c)||(c!=d)if(!inword)if(inword==0)Logicaloperators邏輯運(yùn)算符&&(與)、79結(jié)構(gòu)型描述結(jié)構(gòu)級(jí)Verilog適合開發(fā)小規(guī)模元件,如ASIC和FPGA的單元Verilog內(nèi)部帶有描述基本邏輯功能的基本單元(primitive),如and門。綜合產(chǎn)生的結(jié)果網(wǎng)表通常是結(jié)構(gòu)級(jí)的。用戶可以用結(jié)構(gòu)級(jí)描述簡單的組合或時(shí)序邏輯。下面是MUX的結(jié)構(gòu)級(jí)描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時(shí)。modulemux21(out,a,b,sl);

inputa,b,sl;

outputout;

notu1(nsl,sl);

and#1u2(sela,a,nsl);

and#1u3(selb,b,sl);

or#2u4(out,sela,selb);endmodule結(jié)構(gòu)型描述結(jié)構(gòu)級(jí)Verilog適合開發(fā)小規(guī)模元件,如ASIC804選1數(shù)據(jù)選擇器實(shí)例之一modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always

@(in0orin1orin2orin3orsel)case(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;2'b11:out=in3;default:out=x;endcaseendmodulesel(1)sel(0)out00in001in110in211in34選1數(shù)據(jù)選擇器實(shí)例之一modulemux4_1(out81wire[7:0]bus; //8位矢量網(wǎng)表busreg[0:40]addr;//41位矢量寄存器addrreg[-1:4]b; //6位矢量寄存器bbus[0] //bus的第0位bus[2:0] //bus的三位最低有效位。注意不能用bus[0:2],應(yīng)和定義中保持一致。addr[0:1] //addr的兩位最高有效位wire[7:0]bus; //8位矢量網(wǎng)表bus82數(shù)的表示方法整型常量decimal,hexadecimal,octalorbinaryformat.兩種表達(dá)方法簡單的十進(jìn)制數(shù).10,9,156.<位寬(可選)><'進(jìn)制><0-9andatof(hexadecimal)>attention!必須在進(jìn)制符號(hào)前加“'”號(hào),并且“'”號(hào)和進(jìn)制符號(hào)間不能存在空格進(jìn)制符號(hào):b或B(二進(jìn)制),d或D(十進(jìn)制),h或H(十六進(jìn)制),o或O(八進(jìn)制)659//Asigneddecimalnumber'h837FF//isahexadecimalnumber'b101 //isa3-bitbinarynumber'o7460//isanoctalnumber4af//isillegal(hexadecimalformatrequires'h)數(shù)的表示方法整型常量83數(shù)字與進(jìn)制之間可以有空格5'D3數(shù)字電路中,x表示不定值,z表示高阻態(tài)??稍谑M(jìn)制,八進(jìn)制和二進(jìn)制中使用x和z,十六進(jìn)制中一個(gè)x表示有四位都是x,八進(jìn)制中一個(gè)x表示三位都是x,二進(jìn)制中則表示一位是x。z用法同理。unsizedconstants32bit10=32'd10=32'b10101=32'd1=32'b1當(dāng)實(shí)際數(shù)據(jù)位數(shù)小于定義的位寬時(shí),如果是無符號(hào)數(shù),則在左邊補(bǔ)零,如果無符號(hào)數(shù)最左邊是“x”,則在左邊補(bǔ)“x”,如果無符號(hào)數(shù)左邊是“z”,則在左邊補(bǔ)“z”

12'h3x=12'h03x,12'hzx=12'hzzx

數(shù)字與進(jìn)制之間可以有空格84在表示長數(shù)據(jù)時(shí)還可以用下劃線“_”進(jìn)行分割以增加程序的可讀性,16‘b1001_0110_1111_zzzz//islegalsyntax8’b_1110_1101//isillegalsyntax在表示長數(shù)據(jù)時(shí)還可以用下劃線“_”進(jìn)行分割以增加程序的可讀性85case語句的語法結(jié)構(gòu)

case(表達(dá)式)

選項(xiàng)值1:語句1; 選項(xiàng)值2:語句2; 選項(xiàng)值3:語句3;

…default:

缺省語句;endcasecase語句的語法結(jié)構(gòu)case(表達(dá)式)86Verilog語法規(guī)定及實(shí)例課件874選1數(shù)據(jù)選擇器實(shí)例之二

modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always

@(in0orin1orin2orin3orsel)beginif(sel==2'b00)out=in0;else

if(sel==2'b01)out=in1;else

if(sel==2'b10)out=in2;else

if(sel==2'b11)out=in3;elseout=2'bx;endendmodule

4選1數(shù)據(jù)選擇器實(shí)例之二always@(in0ori88if(表達(dá)式1)

語句1;elseif(表達(dá)式2)

語句2;elseif…else

語句n;if(表達(dá)式1)89if(a==0) if(b==0) c=1; else c=0;

if(a==0)90begin語句1;語句2;......語句n;endbegin91if(a==0) begin if(b==0) C=1;endelsec=0;if(a==0) begin92缺省項(xiàng)問題moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always

@(aorborc)beginif(a&b)rega=c;else //有缺省項(xiàng)情況

rega=0;y=rega;

endendmodule缺省項(xiàng)問題moduleex3reg(y,a,b,c93Verilog語法規(guī)定及實(shí)例課件94moduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;

always

@(aorborc)begin

if(a&b)rega=c; //缺省項(xiàng)省略

y=rega;

endendmodule

moduleex4reg(y,a,b,c);95Verilog語法規(guī)定及實(shí)例課件96moduleinccase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)

case({a,b})2’b11:e=d;

2’b10:e=~c;

endcaseendmodule

moduleinccase(a,b,c,d,e);974位加法器電路及仿真研究moduleadd_full(A,B,C,Carry,S);inputA,B,C;outputCarry,S;assignS=A^B^C;assignCarry=(A&B)|(B&C)|(A&C);endmodulemoduleadd_full4(A,B,C,S);input[3:0]A,B;output[3:0]S;output[4:0]C;assignC[0]=0;add_fullu1(A[0],B[0],C[0],C[1],S[0]),u2(A[1],B[1],C[1],C[2],S[1]),u3(A[2],B[2],C[2],C[3],S[2]),u4(A[3],B[3],C[3],C[4],S[3]);endmodule

4位加法器電路及仿真研究moduleadd_full498實(shí)例(Instances),例化(instantiation)設(shè)計(jì)中我們可能需要調(diào)用一些已經(jīng)定義好的模塊,作為我們電路中的單元,調(diào)用這些模塊的過程,稱為實(shí)例化(instantiation),調(diào)用完之后,這些電路中的模塊單元稱為實(shí)例(Instance)。實(shí)例的使用格式為:<模塊名><實(shí)例名><端口列表>;實(shí)例(Instances),例化(instantiation99模塊的定義只是說明該模塊的功能與接口,它只提供了一個(gè)模板,它要在電路中獲得實(shí)際應(yīng)用與實(shí)現(xiàn)需要被調(diào)用(實(shí)例化)。Verilog中不允許嵌套定義模塊,即一對(duì)module和endmodule之間只能定義一個(gè)模塊。但一個(gè)模塊內(nèi)可以通過實(shí)例的方式多次調(diào)用其他模塊。模塊的定義只是說明該模塊的功能與接口,它只提供了一個(gè)模板,它100add_fullu1(.A(A[0]),.B(B[0]),.C(C[0]),.Carry(C[1]),.S(S[0])),u2(.A(A[1]),.B(B[1]),.C(C[1]),.Carry(C[2]),.S(S[1])),u3(.A(A[2]),.B(B[2]),.C(C[2]),.Carry(C[3]),.S(S[2])),u4(.A(A[3]),.B(B[3]),.C(C[3]),.Carry(C[4]),.S(S[3]));

add_full101Verilog語法規(guī)定及實(shí)例課件102moduledecode47(a,b,c,d,e,f,g,D3,D2,D1,D0);outputa,b,c,d,e,f,g;inputD3,D2,D1,D0;//輸入4位BCD碼rega,b,c,d,e,f,g;//輸出驅(qū)動(dòng)7個(gè)筆劃段always@(D3orD2orD1orD0)begincase({D3,D2,D1,D0})//用case語句進(jìn)行譯碼4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111111;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'bz;endcaseendendmodule

七段數(shù)碼管譯碼器及仿真研究moduledecode47(a,b,c,d,e,f,g,103Verilog語法規(guī)定及實(shí)例課件104Verilog語法規(guī)定及實(shí)例課件105D觸發(fā)器及仿真研究例9.6.10

moduled_ff(q,d,clk); outputq;inputd,clk;regq; always

@(posedgeclk) q=d; endmoduleD觸發(fā)器及仿真研究例9.6.10106From\to01xz0noposedgeposedgeposedge1negedgeNonegedgenegedgexnegedgeposedgenoNoznegedgeposedgenoNoFrom\to01xz0noposedgeposedgepo107moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;regq1,q2; always

@(posedgeclk) begin

q1=d;q2=q1;

end

endmodule

moduled_ff(q1,q2,d,clk); 108

109例9.6.12

moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;regq1,q2; always@(posedgeclk)

begin

q1<=d;//-----------------------------------1

q2<=q1;//---------------------------2

endendmodule

例9.6.12110Verilog語法規(guī)定及實(shí)例課件111計(jì)數(shù)器及仿真研究例9.6.13

4位加法計(jì)數(shù)器

modulecount4(out,reset,clk);output[3:0]out;inputreset,clk;reg[3:0]out;always@(posedgeclk)beginif(reset)out<=0;//同步復(fù)位elseout<=out+1;//計(jì)數(shù)endendmodule計(jì)數(shù)器及仿真研究例9.6.134位加法計(jì)數(shù)器112Verilog語法規(guī)定及實(shí)例課件113

同步置數(shù)同步清零加法計(jì)數(shù)器

modulecount(out,data,load,reset,clk);output[7:0]out;input[7:0]data;inputload,clk,reset;reg[7:0]out;always@(posedgeclk) //clk上升沿觸發(fā)beginif(!reset)out=8'h00;//同步清0,低電平有效elseif(!load)out=data; //同步預(yù)置elseout=out+1; //計(jì)數(shù)endendmodule

同步置數(shù)同步清零加法計(jì)數(shù)器modulecount(ou114Verilog語法規(guī)定及實(shí)例課件115Verilog語法規(guī)定及實(shí)例課件116

異步清零計(jì)數(shù)器modulecount2(out,reset,clk);output[7:0]out;inputclk,reset;reg[7:0]out;always

@(posedgeclkor

negedgereset)beginif(!reset)out=0;elseout=out+1; //計(jì)數(shù)endendmodule異步清零計(jì)數(shù)器modulecount2(out,rese117Verilog語法規(guī)定及實(shí)例課件118環(huán)扭型計(jì)數(shù)器態(tài)序Q3Q2

Q1Q0F態(tài)序Q3Q2Q1Q0F000001000101110001110010211001201001311101310101411110411010501110501101600110610110700010701010環(huán)扭型計(jì)數(shù)器態(tài)序Q3Q2Q1Q0F態(tài)序Q3119modulejohnson(clk,clr,out);inputclk,clr;output[3:0]out;reg[3:0]out;always@(posedgeclk)beginif(clr)out<=4'h0;elsebeginout<=(out>>1);//右移運(yùn)算out[3]<=~out[0];endendmoduleVerilog語法規(guī)定及實(shí)例課件120out<=(out>>1)

a>>n

或a<<n

a代表要進(jìn)行移位的操作數(shù),n代表要移幾位。這兩種移位運(yùn)算都用0來填補(bǔ)移出的空位。例如:start=1;//start在初始時(shí)刻設(shè)為值0001result=(start<<2);//移位后,start的值為0100,然后賦給resultout<=(out>>1)121Verilog語法規(guī)定及實(shí)例課件122modulejohnson(clk,clr,out);inputclk,clr;output[3:0]out;reg[3:0]out;always@(posedgeclkornegedgeclr)beginif(!clr)out<=4'h0;elsebeginout<=(out>>1);//右移運(yùn)算out[3]<=~out[0];endendendmodule

modulejohnson(clk,clr,out);123Verilog語法規(guī)定及實(shí)例課件124modulelfsr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論