<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 設(shè)計(jì)可綜合狀態(tài)機(jī)的指導(dǎo)原則

          設(shè)計(jì)可綜合狀態(tài)機(jī)的指導(dǎo)原則

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

          (1)獨(dú)熱碼

          本文引用地址:http://www.ex-cimer.com/article/148604.htm

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

          (2)case語句

          建議采用case、casex或casez語句來建立狀態(tài)機(jī)的模型。因?yàn)檫@些語句表達(dá)清晰明了,可以方便地從當(dāng)前狀態(tài)分支轉(zhuǎn)向下一個狀態(tài)并設(shè)置輸出。

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

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

          為什么會是這樣呢?因?yàn)閱臃抡嫫鲿r,狀態(tài)機(jī)所有的輸入都不確定,因此立即進(jìn)入default狀態(tài)。如果通過設(shè)置將狀態(tài)變量設(shè)為state1,但是實(shí)際硬件電路的狀態(tài)機(jī)在通電之后,進(jìn)入的狀態(tài)是不確定的,很可能不是state1的狀態(tài),這樣就會產(chǎn)生不必要的沖突。

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

          (3)復(fù)位

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

          (4)惟一觸發(fā)

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

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

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

          因此應(yīng)盡量不要使用綜合工具來設(shè)計(jì)異步狀態(tài)機(jī)。因?yàn)槟壳按蠖鄶?shù)綜合工具在對異步狀態(tài)機(jī)進(jìn)行邏輯優(yōu)化時會胡亂地簡化邏輯,使綜合后的異步狀態(tài)機(jī)不能正常工作。如果一定要設(shè)計(jì)異步狀態(tài)機(jī),建議采用電路圖輸入的方法,而不要用Verilog HDL輸入的方法。

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

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

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

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

          ...

          current_state = state2; //把current state設(shè)置成 2'h2

          ...

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

          'define state1 2 'h1

          'define state2 2 'h2

          ...

          current_state = 'state2; //把current state設(shè)置成 2 'h2



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();