用quartus ii 查看狀態機


有時拿到別人的一份代碼,真是又長又臭,都不知道該從哪個地方看起,特別是有些狀態機很長很長。其實想看懂狀態機,個人覺得比較好的方法就是把狀態機畫出來,至於怎么畫呢,這里有兩個方法,第一:手畫,一邊看着代碼一邊畫,這樣做有一個好處,思路比較清晰,因為是自己畫出來的。第二:用quartus ii畫,這個方法的好處就是快,狠,准。第一個方法大家都會,下面就說說第二個方法吧。

 
第一,編譯並綜合。
第二,tools -> netlist viewers -> RTL viewer 
第三,找到狀態機,雙擊。
第四,完成。
用quartus ii 查看狀態機 - 白色 - gor
Quartus II中對狀態機的設計有一些特別的規定,如果不了解這些規定在設計的時候常常使人產生困惑。
    對於Verilog HDL這些規定是:
    1.The Always Construct that describes the state machine is clocked.
    2.All assignments to the signal or variable that represents the state machine are within the Always Construct.
    3.The state machine has more than two states.
    4.The state register is not used as an output of the module.
    5.The state transition logic does not use arithmetic operators. For example, this condition is not met if the state transition logic uses the expression next_state <= state + 1;, which contains the arithmetic operator +.
    其中第5.條是一條很強的約束,從各種程序測試結果來看,狀態變量(state和next_state)除了可以用於'case (state)'語句以及條件判別'(state==s1)'和狀態參數賦值'next_state=s1'以外,不能用於其它的操作,這就是為什么常常不能綜合成狀態機的原因。我們可以這樣來判斷:將狀態變量(state和next_state)和狀態參數(s1,s2...)看成一些特殊的變量或者標識符,可以用狀態參數或者狀態變量對另外的狀態變量賦值或者判別它們是否相等,但是它們不是'數',一旦將它們看成'數',例如state=s1+1或者state[s1]=1'b1(等數學操作)就不能綜合成狀態機。因此傳統one-hot編碼程序風格(位索引方式):
    case (1'b1) begin
        state[s1]:
        ...
        end
    不能綜合成狀態機。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM