Verilog語法規定及實例課件_第1頁
Verilog語法規定及實例課件_第2頁
Verilog語法規定及實例課件_第3頁
Verilog語法規定及實例課件_第4頁
Verilog語法規定及實例課件_第5頁
已閱讀5頁,還剩129頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

—“告訴我你想要電路做什么,我給你提供能實現這個功能的硬件電路”VHDL

—和VerilogHDL類似ABEL、AHDL

—“告訴我你想要什么樣的電路,我給你提供這樣的電路”VerilogHDL與其他HDL比較VerilogHDL3什么是VerilogHDL能夠對數字邏輯電路的功能和結構進行描述的一種高級編程語言PLD/FPGA的設計開發語言編寫程序描述數字電路的功能與結構描述電路的功能描述電路的結構表達具有并行性什么是VerilogHDL4VerilogHDL特點

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

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

inputa,b;

inputs;

outputy;

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

inputa,b;

inputs;

outputy;

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

assignd=a&(~s);

assigne=b&s;

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

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

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

inputa,b,s;

outputy;

regy;always@(soraorb)

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

&&(與)、||(或)、!(非)與邏輯優先級別高于或邏輯,但都低于關系和等式運算符。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邏輯運算符&&(與)、12結構型描述結構級Verilog適合開發小規模元件,如ASIC和FPGA的單元Verilog內部帶有描述基本邏輯功能的基本單元(primitive),如and門。綜合產生的結果網表通常是結構級的。用戶可以用結構級描述簡單的組合或時序邏輯。下面是MUX的結構級描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時。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結構型描述結構級Verilog適合開發小規模元件,如ASIC134選1數據選擇器實例之一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數據選擇器實例之一modulemux4_1(out14wire[7:0]bus; //8位矢量網表busreg[0:40]addr;//41位矢量寄存器addrreg[-1:4]b; //6位矢量寄存器bbus[0] //bus的第0位bus[2:0] //bus的三位最低有效位。注意不能用bus[0:2],應和定義中保持一致。addr[0:1] //addr的兩位最高有效位wire[7:0]bus; //8位矢量網表bus15數的表示方法整型常量decimal,hexadecimal,octalorbinaryformat.兩種表達方法簡單的十進制數.10,9,156.<位寬(可選)><'進制><0-9andatof(hexadecimal)>attention!必須在進制符號前加“'”號,并且“'”號和進制符號間不能存在空格進制符號:b或B(二進制),d或D(十進制),h或H(十六進制),o或O(八進制)659//Asigneddecimalnumber'h837FF//isahexadecimalnumber'b101 //isa3-bitbinarynumber'o7460//isanoctalnumber4af//isillegal(hexadecimalformatrequires'h)數的表示方法整型常量16數字與進制之間可以有空格5'D3數字電路中,x表示不定值,z表示高阻態??稍谑M制,八進制和二進制中使用x和z,十六進制中一個x表示有四位都是x,八進制中一個x表示三位都是x,二進制中則表示一位是x。z用法同理。unsizedconstants32bit10=32'd10=32'b10101=32'd1=32'b1當實際數據位數小于定義的位寬時,如果是無符號數,則在左邊補零,如果無符號數最左邊是“x”,則在左邊補“x”,如果無符號數左邊是“z”,則在左邊補“z”

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

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

case(表達式)

選項值1:語句1; 選項值2:語句2; 選項值3:語句3;

…default:

缺省語句;endcasecase語句的語法結構case(表達式)19Verilog語法規定及實例課件204選1數據選擇器實例之二

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數據選擇器實例之二always@(in0ori21if(表達式1)

語句1;elseif(表達式2)

語句2;elseif…else

語句n;if(表達式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缺省項問題moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always

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

rega=0;y=rega;

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

always

@(aorborc)begin

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

y=rega;

endendmodule

moduleex4reg(y,a,b,c);28Verilog語法規定及實例課件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實例(Instances),例化(instantiation)設計中我們可能需要調用一些已經定義好的模塊,作為我們電路中的單元,調用這些模塊的過程,稱為實例化(instantiation),調用完之后,這些電路中的模塊單元稱為實例(Instance)。實例的使用格式為:<模塊名><實例名><端口列表>;實例(Instances),例化(instantiation32模塊的定義只是說明該模塊的功能與接口,它只提供了一個模板,它要在電路中獲得實際應用與實現需要被調用(實例化)。Verilog中不允許嵌套定義模塊,即一對module和endmodule之間只能定義一個模塊。但一個模塊內可以通過實例的方式多次調用其他模塊。模塊的定義只是說明該模塊的功能與接口,它只提供了一個模板,它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語法規定及實例課件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;//輸出驅動7個筆劃段always@(D3orD2orD1orD0)begincase({D3,D2,D1,D0})//用case語句進行譯碼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

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

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

@(posedgeclk) q=d; endmoduleD觸發器及仿真研究例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語法規定及實例課件44計數器及仿真研究例9.6.13

4位加法計數器

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

同步置數同步清零加法計數器

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

同步置數同步清零加法計數器modulecount(ou47Verilog語法規定及實例課件48Verilog語法規定及實例課件49

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

@(posedgeclkor

negedgereset)beginif(!reset)out=0;elseout=out+1; //計數endendmodule異步清零計數器modulecount2(out,rese50Verilog語法規定及實例課件51環扭型計數器態序Q3Q2

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

a>>n

或a<<n

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

modulejohnson(clk,clr,out);56Verilog語法規定及實例課件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語法規定及實例課件59

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

half_out狀態idle:未投幣前初始狀態狀態half:投入五角狀態one:投入一元(一元或兩五角)設計一個自動售貨機的邏輯電路。它的投幣口每次只能投入一枚五角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語法規定及實例課件66Verilog語法規定及實例課件67VerilogHDL第九章硬件描述語言簡介VerilogHDL第九章硬件描述語言簡介68HDL的含義HardwareDescriptionLanguageHDL的含義69VerilogHDL與其他HDL比較VerilogHDL

—“告訴我你想要電路做什么,我給你提供能實現這個功能的硬件電路”VHDL

—和VerilogHDL類似ABEL、AHDL

—“告訴我你想要什么樣的電路,我給你提供這樣的電路”VerilogHDL與其他HDL比較VerilogHDL70什么是VerilogHDL能夠對數字邏輯電路的功能和結構進行描述的一種高級編程語言PLD/FPGA的設計開發語言編寫程序描述數字電路的功能與結構描述電路的功能描述電路的結構表達具有并行性什么是VerilogHDL71VerilogHDL特點

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

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

inputa,b;

inputs;

outputy;

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

inputa,b;

inputs;

outputy;

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

assignd=a&(~s);

assigne=b&s;

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

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

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

inputa,b,s;

outputy;

regy;always@(soraorb)

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

&&(與)、||(或)、!(非)與邏輯優先級別高于或邏輯,但都低于關系和等式運算符。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邏輯運算符&&(與)、79結構型描述結構級Verilog適合開發小規模元件,如ASIC和FPGA的單元Verilog內部帶有描述基本邏輯功能的基本單元(primitive),如and門。綜合產生的結果網表通常是結構級的。用戶可以用結構級描述簡單的組合或時序邏輯。下面是MUX的結構級描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時。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結構型描述結構級Verilog適合開發小規模元件,如ASIC804選1數據選擇器實例之一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數據選擇器實例之一modulemux4_1(out81wire[7:0]bus; //8位矢量網表busreg[0:40]addr;//41位矢量寄存器addrreg[-1:4]b; //6位矢量寄存器bbus[0] //bus的第0位bus[2:0] //bus的三位最低有效位。注意不能用bus[0:2],應和定義中保持一致。addr[0:1] //addr的兩位最高有效位wire[7:0]bus; //8位矢量網表bus82數的表示方法整型常量decimal,hexadecimal,octalorbinaryformat.兩種表達方法簡單的十進制數.10,9,156.<位寬(可選)><'進制><0-9andatof(hexadecimal)>attention!必須在進制符號前加“'”號,并且“'”號和進制符號間不能存在空格進制符號:b或B(二進制),d或D(十進制),h或H(十六進制),o或O(八進制)659//Asigneddecimalnumber'h837FF//isahexadecimalnumber'b101 //isa3-bitbinarynumber'o7460//isanoctalnumber4af//isillegal(hexadecimalformatrequires'h)數的表示方法整型常量83數字與進制之間可以有空格5'D3數字電路中,x表示不定值,z表示高阻態??稍谑M制,八進制和二進制中使用x和z,十六進制中一個x表示有四位都是x,八進制中一個x表示三位都是x,二進制中則表示一位是x。z用法同理。unsizedconstants32bit10=32'd10=32'b10101=32'd1=32'b1當實際數據位數小于定義的位寬時,如果是無符號數,則在左邊補零,如果無符號數最左邊是“x”,則在左邊補“x”,如果無符號數左邊是“z”,則在左邊補“z”

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

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

case(表達式)

選項值1:語句1; 選項值2:語句2; 選項值3:語句3;

…default:

缺省語句;endcasecase語句的語法結構case(表達式)86Verilog語法規定及實例課件874選1數據選擇器實例之二

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數據選擇器實例之二always@(in0ori88if(表達式1)

語句1;elseif(表達式2)

語句2;elseif…else

語句n;if(表達式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缺省項問題moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always

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

rega=0;y=rega;

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

always

@(aorborc)begin

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

y=rega;

endendmodule

moduleex4reg(y,a,b,c);95Verilog語法規定及實例課件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實例(Instances),例化(instantiation)設計中我們可能需要調用一些已經定義好的模塊,作為我們電路中的單元,調用這些模塊的過程,稱為實例化(instantiation),調用完之后,這些電路中的模塊單元稱為實例(Instance)。實例的使用格式為:<模塊名><實例名><端口列表>;實例(Instances),例化(instantiation99模塊的定義只是說明該模塊的功能與接口,它只提供了一個模板,它要在電路中獲得實際應用與實現需要被調用(實例化)。Verilog中不允許嵌套定義模塊,即一對module和endmodule之間只能定義一個模塊。但一個模塊內可以通過實例的方式多次調用其他模塊。模塊的定義只是說明該模塊的功能與接口,它只提供了一個模板,它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語法規定及實例課件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;//輸出驅動7個筆劃段always@(D3orD2orD1orD0)begincase({D3,D2,D1,D0})//用case語句進行譯碼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

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

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

@(posedgeclk) q=d; endmoduleD觸發器及仿真研究例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語法規定及實例課件111計數器及仿真研究例9.6.13

4位加法計數器

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

同步置數同步清零加法計數器

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

同步置數同步清零加法計數器modulecount(ou114Verilog語法規定及實例課件115Verilog語法規定及實例課件116

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

@(posedgeclkor

negedgereset)beginif(!reset)out=0;elseout=out+1; //計數endendmodule異步清零計數器modulecount2(out,rese117Verilog語法規定及實例課件118環扭型計數器態序Q3Q2

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

a>>n

或a<<n

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

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

溫馨提示

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

評論

0/150

提交評論