版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第13章設(shè)計(jì)可綜合的狀態(tài)機(jī)的指導(dǎo)原則同步狀態(tài)機(jī)可以設(shè)計(jì)復(fù)雜的時(shí)序邏輯電路同步有限狀態(tài)機(jī)的要素狀態(tài):狀態(tài)變量,劃分邏輯順序輸出:某一狀態(tài)時(shí)完成的事輸入:進(jìn)入某個(gè)狀態(tài)的條件有限狀態(tài)機(jī)類型米勒型狀態(tài)機(jī)摩爾型狀態(tài)機(jī)Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));圖1.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Mealy狀態(tài)機(jī))下一狀態(tài)的邏輯F輸出邏輯
G狀態(tài)寄存器時(shí)鐘信號(hào)clk
clk
輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)
Moor狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào))
輸出信號(hào)=G(當(dāng)前狀態(tài));
下一狀態(tài)的邏輯F輸出邏輯
G狀態(tài)寄存器時(shí)鐘信號(hào)clk
clk
輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)圖2.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Moor狀態(tài)機(jī))有限狀態(tài)機(jī)FSM標(biāo)準(zhǔn)FSM要安全,穩(wěn)定性高FSM速度高,滿足設(shè)計(jì)的頻率高FSM面積小,滿足設(shè)計(jì)的面積要求FSM設(shè)計(jì)要清晰易懂、易維護(hù)有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開關(guān)圖3.4狀態(tài)轉(zhuǎn)移圖Idle
Start
StopClear
A/K1=0
!AA/K2=1
!Reset/K2=0K1=0!Reset/K2=0K1=0
(!Reset|!A)/K2=0K1=1!Reset/K2=0K1=0有限狀態(tài)機(jī)HDL描述wire、reg,狀態(tài)編碼用reg型parameter用于描述狀態(tài)名稱,易讀;獨(dú)熱 碼好always: 根據(jù)主時(shí)鐘沿完成同步時(shí)序的狀態(tài)轉(zhuǎn)移
根據(jù)信號(hào)敏感表完成組合邏輯輸出 根據(jù)時(shí)鐘沿完成同步時(shí)序邏輯的輸出case/endcase:完成進(jìn)入每個(gè)狀態(tài)的操作
default:狀態(tài)變量=‘bx有限狀態(tài)機(jī)的Verilog描述定義模塊名和輸入輸出端口;定義輸入、輸出變量或寄存器;定義時(shí)鐘和復(fù)位信號(hào);定義狀態(tài)變量和狀態(tài)寄存器;用時(shí)鐘沿觸發(fā)的always塊表示狀態(tài)轉(zhuǎn)移過程;在復(fù)位信號(hào)有效時(shí)給狀態(tài)寄存器賦初始值;描述狀態(tài)的轉(zhuǎn)換過程:符合條件,從一個(gè)狀態(tài)到另外一個(gè)狀態(tài),否則留在原狀態(tài);驗(yàn)證狀態(tài)轉(zhuǎn)移的正確性,必須完整和全面。fsmmodulefsm(Clock,Reset,A,K2,K1);endmoduleClockResetAK2K1inputClock,ResetA;outputK2,K1;regK2,K1;reg
[1:0]state,nextstate;parameter
Idle=2'b00,Start=2'b01,Stop=2'b10,Clear=2'b11;信號(hào)說明,引腳變量和常量Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));圖1.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Mealy狀態(tài)機(jī))下一狀態(tài)的邏輯F輸出邏輯
G狀態(tài)寄存器時(shí)鐘信號(hào)clk
clk
輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)modulefsm(Clock,Reset,A,K2,K1);endmodule表示方法之三(續(xù))信號(hào)變量、常量聲明每一個(gè)時(shí)鐘沿產(chǎn)生一次可能的狀態(tài)變化state產(chǎn)生下一狀態(tài)的組合邏輯nextstate產(chǎn)生輸出K1的組合邏輯產(chǎn)生輸出K2的組合邏輯表示方法之三(續(xù))
//--------每一個(gè)時(shí)鐘沿產(chǎn)生一次可能的狀態(tài)變化-----------always@(posedgeClock)beginif(!Reset)state<=Idle;elsestate<=nextstate;end//-------------------------------------------------------表示方法之三(續(xù))//------產(chǎn)生下一狀態(tài)的組合邏輯-------------------------
always@(stateorA)case(state)Idle:if(A)
nextstate=Start;elsenextstate=Idle;Start:if(!A)nextstate=Stop;elsenextstate=Start;Stop:if(A)nextstate=Clear;elsenextstate=Stop;Clear:if(!A)nextstate=Idle;elsenextstate=Clear;default:nextstate=2'bxx;
endcase表示方法之三(續(xù))//----產(chǎn)生輸出K1的組合邏輯--------------always@(stateorResetorA)if(!Reset)K1=0;elseif(state==Clear&&!A)//從Clear轉(zhuǎn)向IdleK1=1;elseK1=0;
//---產(chǎn)生輸出K2的組合邏輯---------------always@(stateorResetorA)if(!Reset)K2=0;elseif(state==Stop&&A)//從Stop轉(zhuǎn)向ClearK2=1; elseK2=0;//------------------------------------------endmodule
狀態(tài)機(jī)modulemux2(clk,ina,out);inputclk,ina;outputout;regout;reg[1:0]state;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;always@(posedge
clk)beginstate<=s0;out<=0;case(state)s0:beginstate<=(ina==1)?s1:s0;out<=0;ends1:beginstate<=(ina==1)?s2:s0;out<=0;ends2:beginstate<=(ina==1)?s3:s0;out<=0;ends3:beginstate<=(ina==1)?s3:s0;out<=1;end
endcaseendendmodule
狀態(tài)機(jī)的測(cè)試模塊`timescale1ns/1nsmodulet;
rega;
reg
clock,rst;wirek2,k1;initial//initial常用于仿真時(shí)信號(hào)的給出。
begina=0;
rst=1;//給復(fù)位信號(hào)變量賦初始值
clock=0;//給時(shí)鐘變量賦初始值
#22rst=0;//使復(fù)位信號(hào)有效
#133rst=1;//經(jīng)過一個(gè)多周期后使復(fù)位信號(hào)無效
end
狀態(tài)機(jī)的測(cè)試模塊
always#50clock=~clock;//產(chǎn)生周期性的時(shí)鐘
always@(posedgeclock)//在每次時(shí)鐘正跳變沿時(shí)刻產(chǎn)生不同的abegin#30a={$random}%2;//每次a是0還是1是隨機(jī)的。
#(3*50+12);//a的值維持一段時(shí)間
endinitialbegin#100000$stop;end//系統(tǒng)任務(wù),暫停仿真以便觀察仿真波形。
//-----------調(diào)用被測(cè)試模塊t.m----------
fsmm(.Clock(clock),.Reset(rst),.A(a),.K2(k2),.K1(k1));
endmodule
13.2典型狀態(tài)機(jī)實(shí)例宇宙飛船控制器宇宙飛船控制器just_launchedis_landedabort_missionall_systems_goclklaunch_shuttleland_shuttlestart_countdownstart_trip_metercnt13.2典型狀態(tài)機(jī)實(shí)例宇宙飛船控制器just_launchedis_landedabort_mission/launch_shuttle=1/land_shuttle=1/start_trip_meter=1HOLDSEQUENCELANDLAUNCHON_MISSIONcnt=0/start_countdown=1all_systems_gomodulestatemachine(launch_shuttle,land_shuttle,start_countdown,
start_trip_meter,clk,all_systems_go,just_launched,
is_landed,cnt,abort_mission);outputlaunch_shuttle,land_shuttle,start_countdown;
outputstart_trip_meter;inputclk,just_launched,is_landed,abort_mission,all_systems_go;input[3:0]cnt;
reg
launch_shuttle,land_shuttle,start_countdown,start_trip_meter;//設(shè)置獨(dú)熱碼狀態(tài)的參數(shù)
parameterHOLD=5'b00001,SEQUENCE=5'b00010, LAUNCH=5'b00100,ON_MISSION=5'b01000,LAND=5'b10000;
reg[4:0]state;always@(negedge
clkorposedge
abort_mission)begin//檢查異步reset的值,即abort_mission的值
if(abort_mission){launch_shuttle,land_shuttle,start_trip_meter,start_countdown}<=4'b0000;state<=LAND;elsebegin/*主狀態(tài)機(jī),狀態(tài)變量state*/case(state) HOLD:if(all_systems_go)beginstate<=SEQUENCE;
start_countdown<=1;endelsestate<=HOLD;SEQUENCE:if(cnt==0)state<=LAUNCH;elsestate<=SEQUENCE;
LAUNCH:beginstate<=ON_MISSION;
launch_shuttle<=1;endON_MISSION://取消使命前,一直留在使命狀態(tài)
if(just_launched)
start_trip_meter<=1;elsestate<=ON_MISSION;LAND:if(is_landed)state<=HOLD;elsebegin
land_shuttle<=1;state<=LAND;enddefault:state=5'bxxxxx;
endcaseend end //endofalwaysendmoduleModuleclk_3(clkin,reset,clkout); inputclkin,reset;
reg[1:0]state;
regclk1; always@(posedge
clkinornegedgereset) if(!reset) state<=2’b00; else
case(state) 2’b00:state<=2’b01; 2’b01:state<=2’b11; 2’b11:state<=2’b00;
default:state<=2’b00;
endcase always@(negedge
clkornegedgereset) if(!reset) clk1<=1’b0; else clk1<=state[0]; assignclk_out=state[0]&clk1;endmodule13.3綜合的一般原則綜合之前要仿真布局布線要仿真不用異步狀態(tài)機(jī)電平敏感的鎖存器最好用連續(xù)賦值語句13.4語言指導(dǎo)原則Always塊只能有一個(gè)事件控制“@(eventexpression)”可表示時(shí)序邏輯,也可表示組合邏輯(不推薦)兩個(gè)沿posedge
negedge
產(chǎn)生時(shí)序邏輯電路時(shí)序always塊最好一個(gè)沿觸發(fā)(同步)每個(gè)always塊中被賦值的信號(hào)應(yīng)是reg型Always@(敏感電平列表)塊表示組合邏輯,參與賦值的信號(hào)必須在敏感列表中出現(xiàn)13.4語言指導(dǎo)原則賦值對(duì)寄存器(reg)和整型(integer)變量賦值只能在一個(gè)always塊中進(jìn)行把某一個(gè)信號(hào)賦值為’bx,綜合器解釋為無關(guān)狀態(tài),其形成的硬件電路最簡單13.5可綜合風(fēng)格的模塊實(shí)例13.5.1組合邏輯電路設(shè)計(jì)實(shí)例【13.1】8位帶進(jìn)位加法module
adder_8(cout,sum,a,b,cin);
output
cout;
output [7:0]sum;
input
cin;
input [7:0]a,b;
assign {cout,sum}=a+b+cin;endmodule13.5.1組合邏輯電路設(shè)計(jì)實(shí)例【13.2】指令譯碼電路的設(shè)計(jì)實(shí)例(利用電平敏感的always塊來設(shè)計(jì)組合邏輯)//操作碼的宏定義`defineplus 3'd0`defineminus 3'd1`defineband 3'd2`definebor 3'd3`defineunegate3'd4【13.2】指令譯碼電路的設(shè)計(jì)實(shí)例(利用電平敏感的always塊來設(shè)計(jì)組合邏輯)modulealu(out,opcode,a,b);output[7:0]out;input[2:0]opcode;input[7:0]a,b;
reg[7:0]out;always@(opcodeoraorb)//用電平敏感的always塊描述組合邏輯
begin
case(opcode)`plus:out=a+b;//算術(shù)運(yùn)算
`minus:out=a-b;`band:out=a&b;//位運(yùn)算
`bor:out=a|b;`unegate:out=~a;//單目運(yùn)算
default:out=8'hx;
endcaseendendmodule【13.3】利用task和電平敏感的always塊設(shè)計(jì)比較后重組信號(hào)的組合邏輯.modulesort4(ra,rb,rc,rd,a,b,c,d);parametert=3;output[t:0]ra,rb,rc,rd;input[t:0]a,b,c,d;
reg[t:0]ra,rb,rc,rd;always@(aorborcord)//用電平敏感的always塊描述組合邏輯
begin:local//此處begin-end塊必須有一模塊名因?yàn)閴K中定義了局部變量
reg[t:0]va,vb,vc,vd;{va,vb,vc,vd}={a,b,c,d};sort2(va,vc);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);{ra,rb,rc,rd}={va,vb,vc,vd};end【13.3】利用task和電平敏感的always塊設(shè)計(jì)比較后重組信號(hào)的組合邏輯.
tasksort2;
inout[t:0]x,y;
reg[t:0]tmp;if(x>y)begin
tmp=x;x=y;y=tmp;end
endtaskendmodule【13.4】比較器的設(shè)計(jì)實(shí)例(利用賦值語句設(shè)計(jì)組合邏輯)modulecompare(equal,a,b); parametersize=1; outputequal; input[size-1:0]a,b; assignequal=(a==b)?1:0;endmodule【13.5】3-8譯碼器設(shè)計(jì)實(shí)例(利用賦值語句設(shè)計(jì)組合邏輯)moduledecoder(out,in); output[7:0]out; input[2:0]in; assignout=1'b1<<in;/****把最低位的1左移in(根據(jù)從in口輸入的值)位,并賦予out****/endmodule【13.6】8-3編碼器的設(shè)計(jì)實(shí)例//編碼器設(shè)計(jì)方案之一:moduleencoder1(none_on,out,in);outputnone_on;output[2:0]out;input[7:0]in;
reg[2:0]out;
reg
none_on;always@(in)begin:local//此處begin-end塊必須有一模塊名
integeri;out=0;none_on=1;/*returnsthevalueofthehighestbitnumberturnedon*/for(i=0;i<8;i=i+1)if(in[i])beginout=i;
none_on=0;endendendmodule【13.6】8-3編碼器的設(shè)計(jì)實(shí)例//編碼器設(shè)計(jì)方案之二:moduleencoder2(none_on,out2,out1,out0,h,g,f,e,d,c,b,a);inputh,g,f,e,d,c,b,a;outputnone_on,out2,out1,out0;wire[3:0]outvec;assignoutvec=h?4'b0111:g?4'b0110:f?4'b0101:e?4'b0100:d?4'b0011:c?4'b0010:b?4'b0001:a?4'b0000:4'b1000;assignnone_on=outvec[3];assignout2=outvec[2];assignout1=outvec[1];assignout0=outvec[0];endmodule【13.6】8-3編碼器的設(shè)計(jì)實(shí)例(方案之三)moduleencoder3(none_on,out2,out1,out0,h,g,f,e,d,c,b,a); inputh,g,f,e,d,c,b,a; outputout2,out1,out0,none_on;
reg[3:0]outvec; assign{none_on,out2,out1,out0}=outvec; always@(aorborcordoreorforgorh)
if(h) outvec=4'b0111; elseif(g) outvec=4'b0110; elseif(f) outvec=4'b0101; elseif(e) outvec=4'b0100; elseif(d) outvec=4'b0011; elseif(c) outvec=4'b0010; elseif(b) outvec=4'b0001; elseif(a) outvec=4'b0000; else outvec=4'b1000;endmodule【13.7】多路器的設(shè)計(jì)實(shí)例(方案之一)modulemux1(out,a,b,sel); outputout; inputa,b,sel; assignout=sel?a:b;endmodule使用連續(xù)賦值、case語句或if-else語句可以生成多路器電路,如果條件語句(case或if-else)中分支條件是互斥的話,綜合器能自動(dòng)地生成并行的多路器?!?3.7】多路器的設(shè)計(jì)實(shí)例(方案之二)modulemux2(out,a,b,sel);outputout;inputa,b,sel;
regout;
//用電平觸發(fā)的always塊來設(shè)計(jì)多路器的組合邏輯
always@(aorborsel)case(sel)1'b1:out=a;1'b0:out=b;default:out='bx;
endcaseendmodule【13.7】多路器的設(shè)計(jì)實(shí)例(方案之三)modulemux3(out,a,b,sel); outputout; inputa,b,sel;
regout; always@(aorborsel) begin if(sel) out=a; elseout=b; endendmodule【13.8】奇偶校驗(yàn)位生成器設(shè)計(jì)實(shí)例moduleparity(even_numbits,odd_numbits,input_bus); outputeven_numbits,odd_numbits; input[7:0]input_bus; assignodd_numbits=^input_bus; assigneven_numbits=~odd_numbits;endmodule【13.9】
三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)實(shí)例(用連續(xù)賦值語句建立三態(tài)門模型)三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之一:moduletrist1(out,in,enable); outputout; inputin,enable; assignout=enable?in:'bz;endmodule【13.9】
三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)實(shí)例(bufif1是一個(gè)Verilog門級(jí)原語(primitive))三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之二:moduletrist2(out,in,enable); outputout; inputin,enable;
//bufif1是一個(gè)Verilog門級(jí)原語(primitive)
bufif1mybuf1(out,in,enable);endmodule【13.10】三態(tài)雙向驅(qū)動(dòng)器設(shè)計(jì)實(shí)例modulebidir(tri_inout,out,in,en,b);
inout
tri_inout; outputout; inputin,en,b; assigntri_inout=en?In:'bz; assignout=tri_inout^b;endmodule【13.11】觸發(fā)器設(shè)計(jì)實(shí)例moduledff(q,data,clk); outputq; inputdata,clk;
regq; always@(posedge
clk) begin q<=data; endendmodule【13.12】電平敏感型鎖存器設(shè)計(jì)實(shí)例之一modulelatch1(q,data,clk); outputq; inputdata,clk; assignq=clk?data:q;endmodule【13.13】帶置位和復(fù)位端的電平敏感型鎖存器設(shè)計(jì)實(shí)例之二modulelatch2(q,data,clk,set,reset); outputq; inputdata,clk,set,reset; assignq=reset?0:(set?1:(clk?data:q));endmodule【13.14】電平敏感型鎖存器設(shè)計(jì)實(shí)例之三modulelatch3(q,data,clk); outputq; inputdata,clk;
regq; always@(clkordata)
if(clk) q=data;endmodule【13.15】移位寄存器設(shè)計(jì)實(shí)例moduleshifter(din,clk,clr,dout); inputdin,clk,clr; output[7:0]dout;
reg[7:0]dout; always@(posedge
clk)
if(clr) //清零
dout<=8'b0; else begin
dout<=dout<<1;//左移一位
dout[0]<=din;//把輸入信號(hào)放入寄存器的最低位
endendmodule【13.16】八位計(jì)數(shù)器設(shè)計(jì)實(shí)例之一modulecounter1(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于撫養(yǎng)權(quán)的離婚協(xié)議
- 2.3《林黛玉進(jìn)賈府》【中職專用】高一語文(高教版2023基礎(chǔ)模塊上冊(cè))
- 湖南省郴州市第六中學(xué)觀山學(xué)校2023-2024學(xué)年七年級(jí)上學(xué)期第三次月考生物試題(原卷版)-A4
- 2023年地震數(shù)據(jù)采集系統(tǒng)項(xiàng)目籌資方案
- PEP人教版小學(xué)六年級(jí)上冊(cè)Unit6 How do you feel B Lets try Lets talk
- 《知識(shí)與個(gè)人知識(shí)》課件
- 電工(初級(jí)工)測(cè)試題及參考答案
- 山東省濟(jì)寧市微山縣2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 養(yǎng)老院老人入住資料制度
- 養(yǎng)老院老人安全管理制度
- 2023年江蘇省南通市中考英語試題(含答案解析)
- 浙江省護(hù)士執(zhí)業(yè)注冊(cè)健康體檢表
- 《世界遺產(chǎn)背景下的影響評(píng)估指南和工具包》
- 發(fā)貨員崗位安全操作規(guī)程
- 5G-無線網(wǎng)絡(luò)規(guī)劃概述課件
- ICT基本原理-課件
- 創(chuàng)新思維與創(chuàng)業(yè)實(shí)驗(yàn)-東南大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 電網(wǎng)檢修工程預(yù)算定額
- 六年級(jí)上冊(cè)英語說課稿-Unit6 There are four seasons in a year Lesson 35-36|人教(精通)
- 大班語言故事吉吉和磨磨
- 裝配式建筑混凝土結(jié)構(gòu)施工技術(shù)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論