<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > Verilog HDL設計進(jìn)階:有限狀態(tài)機的設計原理及其代

Verilog HDL設計進(jìn)階:有限狀態(tài)機的設計原理及其代

作者: 時(shí)間:2013-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

對于用FPGA實(shí)現的有限狀態(tài)機建議采用獨熱碼。因為雖然采用獨熱編碼多用了兩個(gè)觸發(fā)器,但所用組合電路可省下許多,因而使電路的速度和可靠性有顯著(zhù)提高,而總的單元數并無(wú)顯著(zhù)增加。

本文引用地址:http://dyxdggzs.com/article/189516.htm


采用了獨熱碼后有了多余的狀態(tài),就有一些不可到達的狀態(tài),為此在CASE語(yǔ)句的最后需要增加default分支項,以確保多余狀態(tài)能回到Idle狀態(tài)。


另外還可以用另一種風(fēng)格的 模型來(lái)表示同一個(gè)有限狀態(tài)。在這個(gè)模型中,我們用always語(yǔ)句和連續賦值語(yǔ)句把狀態(tài)機的觸發(fā)器部分和組合邏輯部分分成兩部分來(lái)描述,如下所示。


例4.3:有限狀態(tài)機模型3

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg [1:0] state ;
wire [1:0] Nextstate;

parameter //狀態(tài)聲明
Idle = 2’b00, Start = 2’b01,
Stop = 2’b10, Clear = 2’b11;

always @(posedge Clock)
if (!Reset) begin
state = Idle; //復位狀態(tài)
end
else
state = Nextstate; //狀態(tài)轉換

assign Nextstate = //狀態(tài)變換條件
(state == Idle ) ? (A ? Start : Idle):
(state==Start ) ? (!A ? Stop : Start ):
(state== Stop ) ? (A ? Clear : Stop ):
(state== Clear) ? (!A ? Idle : Clear) : Idle;

assign F = (( state == Stop) A ); //狀態(tài)輸出
assign G = (( state == Clear) (!A || !Reset)) //狀態(tài)輸出
endmodule

下面是第4種風(fēng)格的 模型來(lái)表示同一個(gè)有限狀態(tài)。在這個(gè)模型中,我們分別用沿觸發(fā)的always語(yǔ)句和電平敏感的always語(yǔ)句把狀態(tài)機的觸發(fā)器部分和組合邏輯部分分成兩部分來(lái)描述。


例4.4:有限狀態(tài)機模型4。

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg [1:0] state, Nextstate;

parameter //狀態(tài)聲明
Idle = 2’b00, Start = 2’b01,
Stop = 2’b10, Clear = 2’b11;

always @(posedge Clock)
if (!Reset) begin
state = Idle; //默認狀態(tài)
end
else
state = Nextstate; //狀態(tài)轉換

always @( state or A ) begin
F=0;
G=0;
if (state == Idle) begin //處于Idel狀態(tài)時(shí),對A判斷
if (A)
Nextstate = Start; //Start狀態(tài)
else
Nextstate = Idle; //保持Idel狀態(tài)
G=1;
end
else if (state == Start) //處于Start狀態(tài)時(shí),對!A判斷
if (!A)
Nextstate = Stop; //Stop狀態(tài)
else
Nextstate = Start; //保持Start狀態(tài)
else if (state == Stop) //處于Stop狀態(tài)時(shí),對A判斷
if (A)
Nextstate = Clear; //Clear狀態(tài)
else
Nextstate = Stop; //保持Stop狀態(tài)
else if (state == Clear) begin //處于Clear狀態(tài)時(shí),對!A判斷
if (!A)
Nextstate = Idle; //Idel狀態(tài)
else
Nextstate = Clear; //保持Clear狀態(tài)
F=1;
end
else
Nextstate= Idle; //默認狀態(tài)
End
endmodule

上面4個(gè)例子是同一個(gè)狀態(tài)機的4種不同的 模型,它們都是可綜合的,在設計復雜程度不同的狀態(tài)機時(shí)有它們各自的優(yōu)勢。如用不同的綜合器對這4個(gè)例子進(jìn)行綜合,綜合出的邏輯電路可能會(huì )有些不同,但邏輯功能是相同的。


下面講解有限狀態(tài)機設計的一般步驟。


(1)邏輯抽象,得出狀態(tài)轉換圖。
就是把給出的一個(gè)實(shí)際邏輯關(guān)系表示為時(shí)序邏輯函數,可以用狀態(tài)轉換表來(lái)描述,也可以用狀態(tài)轉換圖來(lái)描述,這就需要完成以下任務(wù)。


① 分析給定的邏輯問(wèn)題,確定輸入變量、輸出變量以及電路的狀態(tài)數。通常是取原因(或條件)作為輸入變量,取結果作為輸出變量。
② 定義輸入、輸出邏輯狀態(tài)的含意,并將電路狀態(tài)順序編號。
③ 按照要求列出電路的狀態(tài)轉換表或畫(huà)出狀態(tài)轉換圖。
這樣,就把給定的邏輯問(wèn)題抽象到一個(gè)時(shí)序邏輯函數了。


(2)狀態(tài)化簡(jiǎn)。
如果在狀態(tài)轉換圖中出現這樣兩個(gè)狀態(tài),它們在相同的輸入下轉換到同一狀態(tài)去,并得到一樣的輸出,則稱(chēng)它們?yōu)榈葍r(jià)狀態(tài)。顯然等價(jià)狀態(tài)是重復的,可以合并為一個(gè)。電路的狀態(tài)數越少,存儲電路也就越簡(jiǎn)單。狀態(tài)化簡(jiǎn)的目的就在于將等價(jià)狀態(tài)盡可能地合并,以得到最簡(jiǎn)的狀態(tài)轉換圖。


(3)狀態(tài)分配。
狀態(tài)分配又稱(chēng)狀態(tài)編碼。通常有很多編碼方法,編碼方案選擇得當,設計的電路可以很簡(jiǎn)單。反之,若編碼方案選得不好,則設計的電路就會(huì )復雜許多。


實(shí)際設計時(shí),需綜合考慮電路復雜度與電路性能之間的折衷。在觸發(fā)器資源豐富的FPGA或ASIC設計中,采用獨熱編碼(one-hot-coding)既可以使電路性能得到保證,又可充分利用其觸發(fā)器數量多的優(yōu)勢。


(4)選定觸發(fā)器的類(lèi)型并求出狀態(tài)方程、驅動(dòng)方程和輸出方程。


(5)按照方程得出邏輯圖。

用Verilog HDL來(lái)描述有限狀態(tài)機,可以充分發(fā)揮硬件描述語(yǔ)言的抽象建模能力,使用always塊語(yǔ)句和case(if)等條件語(yǔ)句及賦值語(yǔ)句即可方便實(shí)現。具體的邏輯化簡(jiǎn)及邏輯電路到觸發(fā)器映射均可由計算機自動(dòng)完成。上述設計步驟中的第(2)、(4)、(5)步不再需要很多的人為干預,使電路設計工作得到簡(jiǎn)化,效率也有很大的提高。



關(guān)鍵詞: Verilog HDL 進(jìn)階 代碼

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>