Verilog硬件描述語言實(shí)例_第1頁
Verilog硬件描述語言實(shí)例_第2頁
Verilog硬件描述語言實(shí)例_第3頁
Verilog硬件描述語言實(shí)例_第4頁
Verilog硬件描述語言實(shí)例_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

10.6

D觸發(fā)器//例10.6.1moduled_ff(q,d,clk); outputq;inputd,clk;

regq; always@(posedge

clk) q=d;

endmodule

1.

Verilog

語言描述2.

程序說明上升沿和下降沿檢測(cè)語句功能表

From\to01XZ0noposedgeposedgeposedge1negedgeNonegedgenegedgeXnegedgeposedgenoNoZnegedgeposedgenoNo上升沿觸發(fā)指變量值從0變?yōu)?、0變?yōu)閤和z、或者從x,z變?yōu)?,用posedge表示。下降沿觸發(fā)指變量值從1變?yōu)?、1變?yōu)閤和z或者從x,z變?yōu)?,用negedge表示。3.仿真結(jié)果例10.6.1的仿真電路圖:

例10.6.1的仿真波形圖:

Verilog語言有兩種賦值方式:連續(xù)賦值assign和過程賦值。過程賦值用來更新寄存器類型變量的值,過程賦值包括阻塞賦值“=”和非阻塞賦值“<=”兩種。//例10.6.2moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;

regq1,q2; always@(posedge

clk) beginq1=d;q2=q1;end

endmodule阻塞賦值:

阻塞賦值“=”:這種賦值方式是立即執(zhí)行。也就是說執(zhí)行下一條語句時(shí),q1已等于d。在clk時(shí)鐘的上升沿,q1=d和q2=q1兩條語句是先后執(zhí)行的,最后結(jié)果相當(dāng)于q1n+1=dn,q2n+1=qn+1=dn。非阻塞賦值:

//例10.6.3moduled_ff(q1,q2,d,clk); outputq1,q2;inputd,clk;

regq1,q2; always@(posedge

clk) begin q1<=d;q2<=q1;end

endmodule

非阻塞過程賦值語句不會(huì)阻塞進(jìn)程,直到整個(gè)塊的操作執(zhí)行完才一次完成賦值操作。用于幾個(gè)寄存器需要同一時(shí)刻賦值的情況。q1n+1=dn,q2n+1=q1n=dn-1例10.6.2的仿真波形圖:例10.6.3的仿真波形圖:

10.7

計(jì)數(shù)器10.7.14位二進(jìn)制加法計(jì)數(shù)器1.Verilog語言描述//例10.7.1modulecount4(out,reset,clk);output[3:0]out;inputreset,clk;reg[3:0]out;always@(posedge

clk)beginif(reset)out<=0;//同步清零elseout<=out+1;//計(jì)數(shù)end

endmodule2.

程序說明這個(gè)計(jì)數(shù)器只有同步復(fù)位和計(jì)數(shù)功能。時(shí)鐘的上升沿有效,當(dāng)clk信號(hào)的上升沿到來時(shí),如果清零信號(hào)為1,則計(jì)數(shù)器清零,否則計(jì)數(shù)器進(jìn)行計(jì)數(shù)。3.仿真結(jié)果例10.7.1的仿真電路圖

例10.7.1的仿真波形圖:

由仿真電路圖可知例10.7.1實(shí)現(xiàn)了4位二進(jìn)制加法計(jì)數(shù)器的邏輯功能。reset為高電平時(shí),計(jì)數(shù)器清零。10.7.2同步置數(shù)同步清零加法計(jì)數(shù)器

//例10.7.2modulecount(out,data,load,reset,clk);output[7:0]out;input[7:0]data;inputload,clk,reset;reg[7:0]out;always@(posedge

clk)//clk上升沿觸發(fā)beginif(!reset)out<=8'h00;//同步清零,低電平有效elseif(!load)out<=data; //同步預(yù)置elseout<=out+1; //計(jì)數(shù)end

endmodule1.

Verilog

語言描述2.程序說明

clkresetloadout0x清零10置數(shù)(data)11計(jì)數(shù)計(jì)數(shù)器功能表

這是一個(gè)8位計(jì)數(shù)器,計(jì)數(shù)范圍為0到255,上升沿到來時(shí)計(jì)數(shù),具有同步置數(shù)和同步清零功能,在時(shí)鐘的上升沿進(jìn)行判斷。3.仿真結(jié)果例10.7.2的仿真波形圖:

由圖可知,當(dāng)reset=0時(shí),計(jì)數(shù)器清零;reset=1、load=0時(shí)計(jì)數(shù)器置數(shù);當(dāng)reset=1、load=1時(shí),計(jì)數(shù)器計(jì)數(shù)。10.7.3

異步清零計(jì)數(shù)器1.Verilog語言描述//例10.7.3modulecount2(out,reset,clk);output[7:0]out;inputclk,reset;reg[7:0]out;always@(posedge

clkornegedgereset)begin

if(!reset)out<=0;elseout<=out+1; //計(jì)數(shù)end

endmodule2.

仿真結(jié)果例10.7.3的仿真電路圖:

例10.7.3的仿真波形圖:

10.7.4扭環(huán)型計(jì)數(shù)器態(tài)序Q3Q2

Q1Q0F態(tài)序Q3Q2Q1Q0F000001000101110001110010211001201001311101310101411110411010501110501101600110610110700010701010扭環(huán)型計(jì)數(shù)器狀態(tài)轉(zhuǎn)換表

1.Verilog語言描述//例10.7.4modulejohnson(clk,clr,out);inputclk,clr;output[3:0]out;reg[3:0]out;always@(posedge

clkornegedge

clr)beginif(!clr)out<=4'h0;elsebeginout<=(out>>1);out[3]<=~out[0];endend

endmodule2.程序說明程序行1的out<=(out>>1)語句使用了右移運(yùn)算符來實(shí)現(xiàn)右移運(yùn)算功能,移位運(yùn)算符包括右移位運(yùn)算符“>>”和左移位運(yùn)算符“<<”。其使用方法如下:

a>>n

或a<<n

a代表要進(jìn)行移位的操作數(shù),n代表要移幾位。這種移位運(yùn)算都用0來填補(bǔ)移出的空位。3.

仿真結(jié)果例10.7.4的仿真電路圖:例10.7.4的仿真波形圖:10.8狀態(tài)機(jī)

在有限的狀態(tài)內(nèi),在時(shí)鐘的驅(qū)動(dòng)下,通過給定初始狀態(tài),能夠自動(dòng)完成狀態(tài)間的循環(huán)和相應(yīng)狀態(tài)輸出的時(shí)序邏輯電路。1.狀態(tài)機(jī)的概念0/00/01/01/01/01/10/00/010狀態(tài)轉(zhuǎn)換圖din/op用觸發(fā)器設(shè)計(jì)狀態(tài)機(jī)用觸發(fā)器設(shè)計(jì)狀態(tài)機(jī)C11J1KFF1C11J1KFF2dinCPop23(b)Mealy型狀態(tài)機(jī)結(jié)構(gòu)圖

(a)Moore型狀態(tài)機(jī)結(jié)構(gòu)圖輸出為當(dāng)前狀態(tài)的函數(shù)。輸出為當(dāng)前狀態(tài)和輸入的函數(shù)。2.狀態(tài)機(jī)的分類10.8.1Moore型狀態(tài)機(jī)Moore型狀態(tài)機(jī)的結(jié)構(gòu)圖:

Moore型狀態(tài)機(jī)的狀態(tài)圖

modulemoore(clk,din,op);inputclk,din;outputop;reg[1:0]current_state,next_state;regop;parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;//第一個(gè)always進(jìn)程——時(shí)序邏輯電路always@(posedge

clk)begincurrent_state<=next_state;endS0:beginop=0;

if(din==0)

next_state=S0;

else

next_state=S1;end//第二個(gè)always進(jìn)程——組合邏輯電路always@(current_stateordin)begincase(current_state)S1:beginop=1;if(din==1)

next_state=S1;

else

next_state=S2;endS2:beginop=0;

if(din==1)

next_state=S2;

else

next_state=S3;endS3:beginop=0;

if(din==0)

next_state=S3;

else

next_state=S0;enddefault://case缺省項(xiàng),防止產(chǎn)生鎖存器beginop=0;

next_state=S0;endendcaseendendmodule

(4)Mealy型狀態(tài)機(jī)的Verilog語言描述

Mealy型狀態(tài)機(jī)結(jié)構(gòu)圖

Mealy型狀態(tài)機(jī)狀態(tài)圖

Mealy型:輸出是當(dāng)前狀態(tài)和輸入的函數(shù)。module

mealy_machine(clk,din,op);inputclk,din;outputop;reg[1:0]current_state,next_state;regop;parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;//第一個(gè)always進(jìn)程——時(shí)序邏輯電路always@(posedge

clk)begincurrent_state<=next_state;end//第二個(gè)always進(jìn)程always@(current_stateordin)begincase(current_state)S0:begin

if(din==0)begin

next_state=S0;op=0;end

elsebegin

next_state=S1;op=1;endendS1:begin

if(din==1)begin

next_state=S1;op=1;end

elsebegin

next_state=S2;op=0;endendS2:begin

if(din==1)begin

next_state=S2;op=0;end

elsebegin

next_state=S3;op=1;endendS3:begin

if(din==0)begin

next_state=S3;op=0;end

elsebegin

next_state=S0;op=1;endenddefault:begin//case缺省項(xiàng),防止產(chǎn)生鎖存器op=0;

next_state=S0;endendcaseendendmoduleMealy型狀態(tài)機(jī)的仿真波形圖Moore型狀態(tài)機(jī)的仿真波形圖輸入或狀態(tài)改變時(shí),輸出立即改變。狀態(tài)的變化決定輸出的變化。仿真結(jié)果自動(dòng)售貨機(jī)功能:(4)用狀態(tài)機(jī)設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī)

它的投幣口每次只能投入一枚五角或一元的硬幣。投入一元五角錢硬幣后機(jī)器自動(dòng)給出一杯飲料;投入兩元(兩枚一元)硬幣后,在給出飲料的同時(shí)找回一枚五角的硬幣,投幣時(shí)只能一個(gè)一個(gè)地投。根據(jù)設(shè)計(jì)要求,共有7個(gè)變量,分別為:clk:時(shí)鐘輸入;

reset:系統(tǒng)復(fù)位信號(hào);

half_dollar:代表投入5角硬幣;

one_dollar:代表投入1元硬幣;

half_out:售貨機(jī)找回一枚5角硬幣信號(hào);

dispense:機(jī)器售出一瓶飲料;

collect:提示投幣者取走飲料。設(shè)計(jì)分析:輸入:高位一元,低位五角;

00—不投幣,01

—投幣五角,10—投幣一元;輸出:高位為售出飲料,低位為找回五角硬幣;

00—沒有輸出,10—售出飲料,11—售出飲料的同時(shí)找回五角硬幣。狀態(tài)轉(zhuǎn)換圖的確定one_dollar

half_dollar/dispensehalf_out/*clk:時(shí)鐘;

reset:

系統(tǒng)復(fù)位

輸入:half_dollar:投入五角硬幣;one_dollar:投入一元硬幣;

狀態(tài):idle:空閑狀態(tài);half:五角硬幣狀態(tài);one:一元硬幣狀態(tài);

輸出:dispense:售出一瓶飲料;half_out:找回五角硬幣;collect:提示投幣者取走飲料*/Verilog語言描述modulemachine(one_dollar,half_dollar,collect,half_out,dispense,reset,clk);parameteridle=2'b00,half=2'b01,one=2'b10;input

one_dollar,half_dollar,reset,clk;outputcollect,half_out,dispense;regcollect,half_out,dispense;reg[1:0]D;//always進(jìn)程always@(posedge

clk)beginif(reset)//當(dāng)reset為1時(shí),系統(tǒng)復(fù)位,初始為idle狀態(tài)begindispense=0;collect=0;

half_out=0;D=idle;endelsecase(D)idle:if(half_dollar)begindispense=0;collect=0;

half_out=0;D=half;endelseif(one_dollar)begindispense=0;collect=0;

half_out=0;D=one;endelsebegindispense=0;collect=0;

half_out=0;D=idle;endhalf:

if(half_dollar)begindispense=0;collect=0;

half_out=0;D=one;

endelseif(one_dollar)begindispense=1;

collect=1;

half_out=0;D=idle;endelsebegindispense=0;collect=0;

half_out=0;D=half;endone:

if(half_dollar)begindispense=1;collect=1;

half_out=0;D=idle;endelseif(one_dollar)begindispense=1;collect=1;

half_out=1;D=idle;endelsebegindispense=0;collect=0;

half_out=0;D=one;enddefault://case缺省項(xiàng)begindispense=0;collect=0;

half_out=0;D=idle;endendcase

endendmodule自動(dòng)售貨機(jī)的仿真波形圖:仿真結(jié)果連續(xù)兩次投入一元硬幣后輸出結(jié)果。連續(xù)三次投入五角硬幣后輸出結(jié)果?!?0-5】某雷達(dá)站有三部雷達(dá)A、B、C,其中A和B的功率消耗相等,C的功率是A的兩倍。這些雷達(dá)由兩臺(tái)發(fā)電機(jī)X和Y供電,發(fā)電機(jī)X的最大輸出功率等于雷達(dá)A的功率消耗,發(fā)電機(jī)Y的最大輸出功率是X的3倍。要求設(shè)計(jì)一個(gè)邏輯電路,能夠根據(jù)各個(gè)雷達(dá)的啟動(dòng)和關(guān)閉信號(hào),以最節(jié)約電能的方式控制發(fā)電機(jī)X和Y的啟動(dòng)、停止。要求:1.由題意列出真值表(標(biāo)明相關(guān)邏輯變量的邏輯定義);2.寫出Verilog語言描述。moduletcm(a,b,c,X,Y); inputa,b,c; outputX,Y;

regX,Y; always

begin

if(((a==0)&&(b==0))&&(c==0))

begin X=0;Y=0;

end

elseif(((a==0)&&(b==0))&&(c==1))

begin X=0;Y=1;

end

方式一:elseif(((a==0)&&(b==1))&&(c==0))

begin X=1;Y=0;

endelseif(((a==0)&&(b==1))&&(c==1))

begin X=0;Y=1; endelseif(((a==1)&&(b==0))&&(c==0))

begin X=1;Y=0;

endelseif(((a==1)&&(b==0))&&(c==1))

begin X=0;Y=1;

end

elseif(((a==1)&&(b==1))&&(c==0))begin X=0;Y=1;

endelse

begin

X=1;Y=1;

endendendmodule

moduletcm(a,b,c,X,Y); inputa,b,c; outputX,Y;

regX,Y; always@(aorborc)case({a,b,c})3'b000:{X,Y}=2'b00;3'b001:{X,Y}=2'b01;3'b010:{X,Y}=2'b10;3'b011:{X,Y}=2'b01;3'b100:{X,Y}=2'b10;3'b101:{X,Y}=2'b01;3'b110:{X,Y}=2'b01;3'b111:{X,Y}=2'b11;default:{X,Y}=2'bx;endcaseendmodule方式二:【10-6】用FPGA器件實(shí)現(xiàn)一個(gè)用于步進(jìn)電機(jī)驅(qū)動(dòng)電路的序列脈沖發(fā)生器,步進(jìn)電機(jī)有ABCDE

五相繞組,工作時(shí)的導(dǎo)通順序?yàn)锳B--ABC--BC--BCD--CD--CDE--DE--DEA--EA--EAB--AB。要求:1.列出狀態(tài)轉(zhuǎn)換表;2.用VerilogHDL語言編寫程序。CPQa

QbQc

Qd

Qe01100011110020110030111040011050

溫馨提示

  • 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)論