第4章常用電路VerilogHDL設(shè)計_第1頁
第4章常用電路VerilogHDL設(shè)計_第2頁
第4章常用電路VerilogHDL設(shè)計_第3頁
第4章常用電路VerilogHDL設(shè)計_第4頁
第4章常用電路VerilogHDL設(shè)計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)與電子工程設(shè)計第4章常用電路VerilogHDL設(shè)計本章我們通過具體實例說明如何用VerilogHDL設(shè)計一些常用的數(shù)字電路,這里我們給出了VerilogHDL描述模型和綜合后的原理圖。本章我們還介紹了一些比較復(fù)雜的VerilogHDL設(shè)計的綜合實例,這些例子說明了可綜合VerilogHDL層次設(shè)計的方法。4.1常用組合電路模塊的設(shè)計4.1.1簡單門電路的描述1.基本門電路的描述下面是一個簡單的門電路的例子,我們用幾種方式對同一個門電路進(jìn)行了描述。例4.1(1)調(diào)用門原語modulegate1(a,b,c,d,z);inputa,b,c,d;outputz;nor(s1,b);or(s2,a,b);and(s3,s1,c,d);nand(z,s2,s3);endmodule如圖4-1所示是其綜合以后的原理圖。圖4-1簡單的門電路(2)用assign連續(xù)賦值語句描述102第4章常用電路VerilogHDL設(shè)計modulegate2(a,b,c,d,z);inputa,b,c,d;outputz;wires1,s2,s3;assigns1=~b;assigns2=a|b;assigns3=s1&c&d;assignz=~(s2&s3);endmodule用如下代碼描述電路是等效的modulegate3(a,b,c,d,z);inputa,b,c,d;。outputz;assignz=~((a|b)&(~b&c&d));endmodule如圖4-2所示是其綜合以后的原理圖。圖4-2簡單的門電路(3)用過程賦值語句描述modulegate4(a,b,c,d,z);inputa,b,c,d;outputz;regz;regs1,s2,s3;always@(aorborcord)begins1=~b;s2=a|b;s3=s1&c&d;103EDA技術(shù)與電子工程設(shè)計z=~(s2&s3);endendmodule同樣,我們還可以用如下代碼描述。modulegate5(a,b,c,d,z);inputa,b,c,d;outputz;regz;always@(aorborcord)beginz=~((a|b)&(~b&c&d));endendmodule其綜合以后的原理圖與圖4-2所示是一樣的。2.三態(tài)門下面我們分別用VerilogHDL的關(guān)鍵字、assign語句和過程賦值語句三種方式來描述一個三態(tài)門,該三態(tài)門有一個輸入端a、一個輸出端y和一個控制端en。當(dāng)控制端en為1y=a;當(dāng)控制端en為0(低)時,(高)時,輸出為高阻態(tài)。例4.2(1)用bufif1關(guān)鍵字描述的三態(tài)門moduletristate1(en,a,y);inputen,a;outputy;triy;bufif1tri_1(y,a,en);endmodule如圖4-3所示是其綜合以后的原理圖。圖4-3三態(tài)門(2)用assign語句描述的三態(tài)門104第4章常用電路VerilogHDL設(shè)計moduletristate2(en,a,y);inputen,a;outputy;assigny=en?a:1'bz;endmodule(3)用過程賦值語句描述的三態(tài)門moduletristate3(en,a,y);inputen,a;outputy;regy;always@(enora)beginif(en)y=a;elsey=1'bz;endendmodule3.三態(tài)雙向驅(qū)動器下面我們來描述一個三態(tài)雙向驅(qū)動器例4.3三態(tài)雙向驅(qū)動器modulebidir(en,a,b,z,y);inputen,a,b;outputz;inouty;assigny=en?a:1'bz;assignz=y^b;endmodule如圖4-4(a)所示是其綜合以后的原理圖,(b)是其用MAX+plusII編譯生成的模塊符號。105EDA技術(shù)與電子工程設(shè)計(a)(b)圖4-4三態(tài)雙向驅(qū)動器4.1.2譯碼器1.2-4譯碼器下面是一個用連續(xù)賦值語句描述的2-4譯碼器。例4.42-4譯碼器moduledecoder2_4(a,b,en,y);inputa,b,en;output[3:0]y;wireabar,bbar;assignabar=~a;assignbbar=~b;assigny[0]=~(en&abar&bbar);assigny[1]=~(en&abar&b);assigny[2]=~(en&a&bbar);assigny[3]=~(en&a&b);endmodule如圖4-5所示是其綜合后的原理圖。106第4章常用電路VerilogHDL設(shè)計圖4-52-4譯碼器3-8譯碼器下面的例子我們用case語句描述了一個3-8譯碼器。例4.53-8譯碼器moduledecoder3_8(s1,s2,s3,in,y);input[2:0]in;inputs1,s2,s3;output[7:0]y;reg[7:0]y;wires;always@(inors1ors2ors3)beginif(~s1)y=8'b11111111;elseif(~(s2&s3))y=8'b11111111;elsebegincase(in)3'd0:y=8'b11111110;3'd1:y=8'b11111101;3'd2:y=8'b11111011;3'd3:y=8'b11110111;3'd4:y=8'b11101111;3'd5:y=8'b11011111;3'd6:y=8'b10111111;107EDA技術(shù)與電子工程設(shè)計3'd7:y=8'b01111111;endcaseendendendmodule如圖4-6所示是其綜合后的原理圖。圖4-63-8譯碼器這一例子中,我們可以用if-else語句來代替case語句。例4.6moduledecoder3_82(y,in,s1,s2,s3);output[7:0]y;input[2:0]in;inputs1,s2,s3;reg[7:0]y;108第4章常用電路VerilogHDL設(shè)計always@(inors1ors2ors3)beginif(~s1)y=8'b11111111;elseif(~(s2&s3))y=8'b11111111;if(in==0)elseelseelseelseelseelseelseelseendy=8'b11111110;if(in==1)y=8'b11111101;if(in==2)y=8'b11111011;if(in==3)y=8'b11110111;if(in==4)y=8'b11101111;if(in==5)y=8'b11011111;if(in==6)y=8'b10111111;y=8'b01111111;endmodule如圖4-7所示是其綜合后的原理圖。109EDA技術(shù)與電子工程設(shè)計圖4-73-8譯碼器從這些例子我們可以看出,用不同的方法描述所綜合出來的電路是不一樣的。2.七段LED數(shù)碼管顯示譯碼器下面的模塊描述了一個七段LED數(shù)碼管顯示譯碼器。例4.7moduledecode4_7(d0,d1,d2,d3,a,b,c,d,e,f,g);inputd0,d1,d2,d3;outputa,b,c,d,e,f,g;rega,b,c,d,e,f,g;always@(d0ord1ord2ord3)begincase({d3,d2,d1,d0})4ˊd0:{a,b,c,d,e,f,g}=7ˊb1111110;110第4章常用電路VerilogHDL設(shè)計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ˊbx;endcaseendendmodule在上一章中,我們已經(jīng)對這一電路進(jìn)行了描述,并給出了其綜合以后的原理圖。4.1.3編碼器下面的例子我們用if-else語句實現(xiàn)了一個8-3優(yōu)先編碼器。if-else條件語句的分支是有優(yōu)先順序的,該模塊正是利用了其這一特點,編碼器的輸入為a、b、c、d、e、f、g、h,輸入信號高電平有效,h的優(yōu)先級最高。例4.88-3優(yōu)先編碼器moduleencoder8_3(a,b,c,d,e,f,g,h,none_on,outcode);inputa,b,c,d,e,f,g,h;outputnone_on;output[2:0]outcode;reg[3:0]outtemp;assign{none_on,outcode}=outtemp;always@(aorborcordoreorforgorh)beginif(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;111EDA技術(shù)與電子工程設(shè)計elseouttemp=4'b1000;endendmodule如圖4-8所示是其綜合以后的原理圖。圖4-88-3優(yōu)先編碼器用MAX+plusII對該電路進(jìn)行仿真,得到如圖4-9所示的波形圖。圖4-98-3優(yōu)先編碼器仿真波形4.1.4數(shù)據(jù)選擇器下面我們來描述一個數(shù)據(jù)選擇器例4.94選1數(shù)據(jù)選擇器112第4章常用電路VerilogHDL設(shè)計modulemul4_1(d0,d1,d2,d3,sel,z);inputd0,d1,d2,d3;input[1:0]sel;outputz;regz;always@(d0ord1ord2ord3orsel)begincase(sel)2'b00:z=d0;2'b01:z=d1;2'b10:z=d2;default:z=d3;endcaseendendmodule在上一章不同抽象級別的VerilogHDL模型中,我們還用其它的方式描述了數(shù)據(jù)選擇器模型的建立,這里不再贅述。如圖4-10所示是其綜合以后的原理圖。圖4-104選1數(shù)據(jù)選擇器4.1.5數(shù)字比較器下面我們來描述一個數(shù)據(jù)比較器,輸入為無符號數(shù)。例4.10modulecompare2(a,b,eq,gt,lt,ne,ge,le);parametern=2;input[n-1:0]a,b;outputeq,gt,lt,ne,ge,le;reg[5:0]result;113EDA技術(shù)與電子工程設(shè)計always@(aorb)if(a==b)result=6'b100011;elseif(a>b)result=6'b010110;else//(a<b)result=6'b001101;assign{eq,gt,lt,ne,ge,le}=result;endmodule如圖4-11所示是其綜合后的原理圖。圖4-11數(shù)字比較器4.1.6奇偶校驗器下面的例子我們描述的是一個輸入為8位的奇偶校驗器,對并行輸入的8位數(shù)據(jù)進(jìn)行奇偶檢測,產(chǎn)生奇校驗位odd_bit和偶校驗位even_bit。例4.11moduleparity(even_bit,odd_bit,in);outputeven_bit,odd_bit;input[7:0]in;assignodd_bit=^in;assigneven_bit=~odd_bit;endmodule如圖4-12所示是其綜合后的原理圖。114第4章常用電路VerilogHDL設(shè)計圖4-12奇偶校驗器4.1.7算術(shù)邏輯運算單元下面描述的是一個算術(shù)邏輯運算單元,其邏輯功能為:加、與非、比較和異或。我們用一個連續(xù)賦值語句來實現(xiàn)。例4.12modulesimp_alu(a,b,opcode,dataz,compz);parametern=2;input[n-1:0]a,b;input[1:0]opcode;output[n-1:0]dataz;outputcompz;parameteradd_op=0,nand_op=1,gt_op=2,xor_op=3;assigndataz=(opcode==add_op)?a+b:(opcode==nand_op)?~(a+b):(opcode==xor_op)?a^b:'bx;assigncompz=(opcode==gt_op)?a>b:'bx;endmodule如圖4-13所示是其綜合后的原理圖。115EDA技術(shù)與電子工程設(shè)計圖4-13ALU單元在這一節(jié)中,我們描述了一些常用的組合邏輯電路模塊,我們看到主要有兩種方式來描述組合邏輯電路:一種是用連續(xù)賦值語句assign描述,一種是用過程賦值語句always塊描述。這兩種方式中,用連續(xù)賦值語句描述的組合邏輯電路更為自然,和硬件電路有明確的對應(yīng)關(guān)系,中間變量,中有明確的層次也比較清楚;用過程賦值語句描述的組合邏輯電路需要寄存器類型的間變量可以多處使用,不對應(yīng)于某一連線,其所綜合出的邏輯可能和描述沒對應(yīng)關(guān)系,所以我們建議盡量使用連續(xù)賦值語句來描述組合邏輯電路。4.2常用的時序電路模塊的設(shè)計4.2.1D觸發(fā)器1.簡單的D觸發(fā)器下面我們看一個基本D觸發(fā)器的例子例4.13moduledff(d,clk,q);input[7:0]d;inputclk;output[7:0]q;reg[7:0]q;always@(posedgeclk)q=d;endmodule116第4章常用電路VerilogHDL設(shè)計如圖4-14所示是其對應(yīng)的綜合后的原理圖。圖4-14基本D觸發(fā)器2.帶異步清D觸發(fā)器。0、異步置1端的下面的例子給基本D觸發(fā)器加上了異步清0、異步置1端。例4.14moduledff_async(d,reset,preset,clk,q);inputd,reset,preset;inputclk;outputq;regq;always@(posedgeclkorposedgepresetornegedgereset)if(~reset)q=1'b0;elseif(preset)q=1'b1;elseq=d;endmodule如圖4-15所示是其綜合后的原理圖。圖4-15帶異步清0、異步置1端的D觸發(fā)器3.帶同步清0、同步置1端的D觸發(fā)器下面我們來描述一個同步清0、同步置1的D觸發(fā)器。117EDA技術(shù)與電子工程設(shè)計例4.15moduledff_sync(d,reset,preset,clk,q);inputd,reset,preset;inputclk;outputq;regq;always@(posedgeclk)if(~reset)q=1'b0;elseif(preset)q=1'b1;elseq=d;endmodule如圖4-16所示是其綜合后的原理圖。圖4-16帶同步清0、同步置1端的D觸發(fā)器。4.2.2數(shù)據(jù)鎖存器1.數(shù)據(jù)鎖存器1下面的例子我們描述了一個電平敏感的一位數(shù)據(jù)鎖存器。例4.16moduled_latch(d,enable,q,qn);inputenable,d;outputq,qn;regq,qn;always@(dorenable)beginif(enable)begin118第4章常用電路VerilogHDL設(shè)計q=d;qn=~q;endelseendbeginq=q;qn=~q;endendmodule如圖4-17所示是其綜合后的原理圖。圖4-17電平敏感一位數(shù)據(jù)鎖存器2.數(shù)據(jù)鎖存器下面我們給上例中鎖存器加上復(fù)位信號,其描述如下。例4.17moduled_latch_asyn(d,enable,reset,q);inputenable,d,reset;outputq;regq;always@(dorenableorreset)if(~reset)q=1'b0;elseif(enable)q=d;elseq=q;endmodule如下圖4-18所示是其綜合后的原理圖。119EDA技術(shù)與電子工程設(shè)計圖4-18帶復(fù)位信號的數(shù)據(jù)鎖存器4.2.3數(shù)據(jù)寄存器下面的例子描述的是一個8位數(shù)據(jù)寄存器。該寄存器每次對8位并行輸入數(shù)據(jù)信號同步寄存,并帶有一個高電平有效的異步清0控制端。例4.18modulereg8(d,clk,clr,q);input[7:0]d;inputclk,clr;output[7:0]q;reg[7:0]q;always@(posedgeclkorposedgeclr)if(clr)q=8'b0;elseq=d;endmodule如下圖4-19所示是其綜合后的原理圖。120第4章常用電路VerilogHDL設(shè)計圖4-198位數(shù)據(jù)寄存器數(shù)據(jù)寄存器和數(shù)據(jù)鎖存器是兩種不同的電路,兩者都具有數(shù)據(jù)寄存的功能,但數(shù)據(jù)鎖器一般由電平信號來控制,寄存器一般由同步時鐘信號控制。兩者使用在不同的場合:若屬于電平敏感型電路,數(shù)據(jù)有效滯后于控制信號有效,則只能使用鎖存器;若數(shù)據(jù)有效提前于控制信號,并要求同步,則使用數(shù)據(jù)寄存器。4.2.4移位寄存器下面的例子我們設(shè)計了一個通用的移位寄存器。該移位寄存器能實現(xiàn)串行輸入、串行移位輸出;并行輸入,串行移位輸出;串行輸入,并行移位輸出;并行輸入,并行移位輸出的功能。其功能表如下:S0S1Q[2]Q[2]Q[1]Q[1]Q[0]Q[0]00011011Q[1]Q[0]RightinQ[1]LeftinParin[2]Q[2]Partin[1]Partin[0]例4.19modulereg_shift2(partin,leftin,rightin,s0,s1,clk,clr,q);output[2:0]q;input[2:0]partin;inputclk,clr,leftin,rightin,s0,s1;reg[2:0]q;121EDA技術(shù)與電子工程設(shè)計always@(posedgeclkornegedgeclr)if(~clr)q=3'b000;elsecase({s0,s1})2'b00:q=q;2'b01:q={q[1:0],rightin};2'b10:q={leftin,q[2:1]};2'b11:q=partin;endcaseendmodule如圖4-20是其綜合后的原理圖。圖4-203位通用移位寄存器4.2.5計數(shù)器1.二進(jìn)制計數(shù)器下面我們描述一個加法/減法計數(shù)器。Updown是計數(shù)器的加/減控制端,Load是同步預(yù)置端,Reset是同步清0端。例4.20modulebin_counter(datain,load,reset,updown,clk,q);parametern=8;input[n-1:0]datain;inputclk,updown,load,reset;122第4章常用電路VerilogHDL設(shè)計output[n-1:0]q;reg[n-1:0]counter;assignq=counter;always@(posedgeclk)if(~reset)counter<=0;elseif(load)counterelse<=datain;if(updown)counter<=counter+1;elsecounter<=counter-1;endmodule綜合后其原理圖如圖4-21所示。圖4-21加法/減法計數(shù)器2.格雷碼計數(shù)器下面的例子描述的是一個格雷碼計數(shù)器,格雷碼的產(chǎn)生遵守如下規(guī)則:第一比特(最左一位)不變,第二比特由第一位與第二位異或產(chǎn)生,第三比特由第二位與第三位異或產(chǎn)生,依此類推。例4.21modulegray_counter(reset,clk,q);123EDA技術(shù)與電子工程設(shè)計parametern=3;inputclk,reset;output[1:n]q;reg[1:n]counter,graytemp;integeri;always@(posedgeclk)if(~reset)counter<=0;elsecounter<=counter+1;always@(counter)begingraytemp[1]=counter[1];for(i=2;i<=n;i=i+1)graytemp[i]=counter[i-1]^counter[i];endassignq=graytemp;endmodule如圖4-22所示是其綜合以后的原理圖。圖4-22格雷碼計數(shù)器3.約翰遜計數(shù)器124第4章常用電路VerilogHDL設(shè)計約翰遜計數(shù)器是一種移位計數(shù)器,其產(chǎn)生規(guī)則是:如果最左端的一位是1,則左移并在最后一位添0;如果最左端的一位是0,則左移并在最后一位添1。下面的例子描述的是一個三位的約翰遜計數(shù)器。例4.22modulejohnson_counter(reset,clk,q);parametern=3;inputclk,reset;output[1:n]q;reg[1:3]q;always@(posedgeclk)if(~reset)q<=0;elsebeginif(!q[1])q<={q[1:n-1],1'b1};elseq<={q[1:n-1],1'b0};endendmodule如圖4-23所示是其綜合后的原理圖。圖4-23約翰遜計數(shù)器4.2.6ROM/RAM模塊例4.23描述了一個RAM塊,該RAM塊的尺寸為256×8,即數(shù)8位。該RAM塊的設(shè)計,lpm_ram_dp函數(shù)描述的是一個輸入/輸出端據(jù)總線和地址總線的寬度均為調(diào)用了MAX+plusII軟件的LPM宏單元庫中的lpm_ram_dp函數(shù),口分開的參數(shù)化的RAM模塊。125EDA技術(shù)與電子工程設(shè)計例4.23moduleram256x8(data,wraddress,rdaddress,input[7:0]data;wren,clock,q);input[7:0]wraddress;input[7:0]rdaddress;inputwren;inputclock;output[7:0]q;wire[7:0]sub_wire0;wire[7:0]q=sub_wire0[7:0];lpm_ram_dplpm_ram_dp_component(.rdclock(clock),.wren(wren),.wrclock(clock),.data(data),.rdaddress(rdaddress),.wraddress(wraddress),.q(sub_wire0));defparamlpm_ram_dp_component.lpm_width=8,lpm_ram_dp_component.lpm_widthad=8,lpm_ram_dp_component.lpm_indata="REGISTERED",lpm_ram_dp_component.lpm_wraddress_control="REGISTERED",lpm_ram_dp_component.lpm_rdaddress_control="REGISTERED",lpm_ram_dp_component.lpm_outdata="UNREGISTERED",lpm_ram_dp_component.lpm_hint="USE_EAB=ON";endmodule利用LPM宏單元庫的lpm_ram_dp,可以方便地構(gòu)成任意大尺寸的RAM塊。該RAM塊的內(nèi)容存儲于與其名稱對應(yīng)的﹒mif(MemoryInitializationFile)文件中,MIF文件是一個ASCII文本文件,其可以手工創(chuàng)建,也可以是模擬仿真的輸出結(jié)果。4.2.7有限狀態(tài)機(FSM)設(shè)計有限狀態(tài)機FSM(FiniteStateMachine)是時序邏輯電路經(jīng)常采用的一種方式,經(jīng)常用于設(shè)計數(shù)字系統(tǒng)的控制模塊,是許多數(shù)字電路的核心。狀態(tài)的轉(zhuǎn)換是設(shè)計者預(yù)先安排好的,用VerilogHDL的case、if-else語句可以:當(dāng)前狀態(tài)寄存器、下一狀態(tài)產(chǎn)生邏輯電路和輸出邏輯當(dāng)前狀態(tài)寄存器屬于寄存器(時序)邏輯電路,用于存儲狀態(tài)它們不僅與輸入信號有關(guān),而且關(guān)。根據(jù)輸出信號產(chǎn)生方法的不同,狀態(tài)機可分為兩類:米里型(Mealy)和摩爾型(Moore),摩爾型狀態(tài)機的輸出僅是當(dāng)前狀態(tài)的函數(shù),米里型狀態(tài)很好地描述基于狀態(tài)機的設(shè)計。一個有限狀態(tài)機由三部分組成產(chǎn)生電路。向量。下一狀態(tài)產(chǎn)生邏輯電路和輸出邏輯產(chǎn)生電路都屬于組合邏輯電路,與寄存器當(dāng)前所處的狀態(tài)有126第4章常用電路VerilogHDL設(shè)計機的輸出是當(dāng)前狀態(tài)和當(dāng)前輸入的函數(shù)。實用的狀態(tài)機一般都設(shè)計為同步時序電路,它在時鐘信號的觸發(fā)下完成各個狀態(tài)之間的轉(zhuǎn)移。并且通常使用一個異步的復(fù)位信號,保證狀態(tài)機加電后進(jìn)入一個已知的有效狀態(tài)。對于復(fù)位后的起始狀態(tài)應(yīng)選擇合理,以保證整個系統(tǒng)的簡捷高效。狀態(tài)機有3種方法表示:狀態(tài)圖、狀態(tài)表和流程圖,這三種方法是等價的,相互之間可以轉(zhuǎn)換。一般地常用狀態(tài)圖的方法表示。由于FPGA器件的寄存器數(shù)量比較多,采用一位熱碼編碼方式能有效地提高電路的性能和可靠性,有利于提高器件資源的利用率,因此,常建議采用該編碼方式。所謂一位熱碼編碼,是就采用n位(或n個觸發(fā)器)來編碼具有n個狀態(tài)的狀態(tài)機。采用一位熱碼編碼能有效地節(jié)省和簡化組合邏輯電路。下面有例子描述的是一個摩爾型狀態(tài)機,用case語句很好地描述其狀態(tài)轉(zhuǎn)換關(guān)系,輸出邏輯可放置在相應(yīng)的分枝描述。例4.24modulemooreFSM(a,clk,z);inputa,clk;outputz;regz;parameters0=0,s1=1,s2=2,s3=3;reg[1:0]state;always@(posedgeclk)case(state)s0:beginz<=1;state<=(!a)?s0:s1;ends1:beginz<=0;state<=(!a)?s1:s2;ends2:beginz<=0;state<=(!a)?s3:s0;ends3:beginz<=1;state<=(!a)?s2:s3;end127EDA技術(shù)與電子工程設(shè)計endcaseendmodule如圖4-24所示是其綜合后的原理圖。圖4-24摩尓型狀態(tài)機原理圖例4.25上面的例子我們還可以這樣描述,將狀態(tài)的轉(zhuǎn)換與輸出邏輯分別用兩個always語句來描述。modulemooreFSM2(a,clk,z);inputa,clk;outputz;regz;parameters0=0,s1=1,s2=2,s3=3;reg[1:0]state;always@(posedgeclk)case(state)s0:state<=(!a)?s0:s1;s1:state<=(!a)?s1:s2;s2:state<=(!a)?s3:s0;s3:state<=(!a)?s2:s3;endcasealways@(posedgeclk)case(state)s0:z<=1;128第4章常用電路VerilogHDL設(shè)計s1:z<=0;s2:z<=0;s3:z<=1;endcaseendmodule圖4-25是其綜合后的原理圖圖4-25摩尓型狀態(tài)機原理圖下面我們來描述一個米里型狀態(tài)機的例子,一般地用兩個always語句來描述米里型狀態(tài)機,一個用來描述其時序邏輯,一個用來描述組合邏輯(包括次態(tài)邏輯和輸出邏輯)。例4.26modulemealyFSM(a,reset,clk,z);inputa,reset,clk;outputz;regz;parameterst0=4'b00,st1=4'b01,st2=4'b10;reg[0:1]current_s,next_s;always@(posedgeresetorposedgeclk)if(reset)current_s<=st0;elsecurrent_s<=next_s;always@(current_sora)case(current_s)st0:beginz=(a)?1:0;129EDA技術(shù)與電子工程設(shè)計next

溫馨提示

  • 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

提交評論