<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è) > 嵌入式系統 > 設計應用 > 設計可綜合狀態(tài)機的指導原則

設計可綜合狀態(tài)機的指導原則

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

(1)獨熱碼

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

因為大多數FPGA內部的觸發(fā)器數目相當多,又加上獨熱碼機(ONe hot STate machine)的譯碼邏輯最為簡(jiǎn)單,所以在采用FPGA實(shí)現的機時(shí),往往采用獨熱碼機(即每個(gè)狀態(tài)只有一個(gè)寄存器置位的狀態(tài)機)。

(2)case語(yǔ)句

建議采用case、casex或casez語(yǔ)句來(lái)建立狀態(tài)機的模型。因為這些語(yǔ)句表達清晰明了,可以方便地從當前狀態(tài)分支轉向下一個(gè)狀態(tài)并設置輸出。

采用這些語(yǔ)句狀態(tài)機時(shí),不要忘記寫(xiě)上case語(yǔ)句的最后一個(gè)分支default,并將狀態(tài)變量設為'bx。這就等于告知器:case語(yǔ)句已經(jīng)指定了所有的狀態(tài)。這樣器就可以刪除不需要的譯碼電路,使生成的電路簡(jiǎn)潔,并與要求一致。

如果將缺省狀態(tài)設置為某一確定的狀態(tài)(例如:設置default:state = state1),行不行呢?”這樣做有一個(gè)問(wèn)題需要注意:因為盡管器產(chǎn)生的邏輯和設置“default:state='bx”時(shí)相同,但是狀態(tài)機的Verilog HDL模型綜合前和綜合后的仿真結果會(huì )不一致。

為什么會(huì )是這樣呢?因為啟動(dòng)仿真器時(shí),狀態(tài)機所有的輸入都不確定,因此立即進(jìn)入default狀態(tài)。如果通過(guò)設置將狀態(tài)變量設為state1,但是實(shí)際硬件電路的狀態(tài)機在通電之后,進(jìn)入的狀態(tài)是不確定的,很可能不是state1的狀態(tài),這樣就會(huì )產(chǎn)生不必要的沖突。

因此,還是設置“default:state='bx”與實(shí)際硬件電路相一致。但在有多余狀態(tài)的情況下還是應將缺省狀態(tài)設置為某一確定的有效狀態(tài),因為這樣做能使狀態(tài)機若偶然進(jìn)入多余狀態(tài)后仍能在下一時(shí)鐘跳變沿時(shí)返回正常工作狀態(tài),否則會(huì )引起死鎖。

(3)復位

狀態(tài)機應該有一個(gè)異步或同步復位端,以便在通電時(shí)將硬件電路復位到有效狀態(tài),也可以在操作中將硬件電路復位(大多數FPGA結構都允許使用異步復位端)。

(4)惟一觸發(fā)

目前大多數綜合器往往不支持在一個(gè)always塊中由多個(gè)事件觸發(fā)的狀態(tài)機(即隱含狀態(tài)機,implicit state machines)。因此為了能綜合出有效的電路,用Verilog HDL描述的狀態(tài)機應明確地由惟一時(shí)鐘觸發(fā)。

(5)異步狀態(tài)機

異步狀態(tài)機是沒(méi)有確定時(shí)鐘的狀態(tài)機,它的狀態(tài)轉移不是由惟一的時(shí)鐘跳變沿所觸發(fā)。目前大多數綜合器不能綜合采用Verilog HDL描述的異步狀態(tài)機。

因此應盡量不要使用綜合工具來(lái)設計異步狀態(tài)機。因為目前大多數綜合工具在對異步狀態(tài)機進(jìn)行邏輯優(yōu)化時(shí)會(huì )胡亂地簡(jiǎn)化邏輯,使綜合后的異步狀態(tài)機不能正常工作。如果一定要設計異步狀態(tài)機,建議采用電路圖輸入的方法,而不要用Verilog HDL輸入的方法。

(6)狀態(tài)賦值

Verilog HDL中,狀態(tài)必須明確賦值,通常使用參數parameters或宏定義define語(yǔ)句加上賦值語(yǔ)句來(lái)實(shí)現。

使用參數parameters語(yǔ)句賦狀態(tài)值如下所示:

parameter state1 = 2 'h1, state2 = 2 'h2;

...

current_state = state2; //把current state設置成 2'h2

...

使用宏定義define語(yǔ)句賦狀態(tài)值如下所示:

'define state1 2 'h1

'define state2 2 'h2

...

current_state = 'state2; //把current state設置成 2 'h2



關(guān)鍵詞: 原則 指導 狀態(tài) 綜合 設計

評論


相關(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>