Verilog FSM

Verilog FSM

寫狀態機的時候遇到一些問題,在某一個狀態(Sn)需要重複執行x次後進入下一個狀態,於是用了一個變量cnt(在狀態Sn-1初始化爲0)記錄執行次數,當cnt>=x時進入下一個狀態,但是最終狀態機崩掉了,用SignalTap測量cnt的數值,發現是亂的,目前還不知道是哪裏的問題,先記錄下,也可能是狀態機寫的不夠規範??感覺也不是!


在網上看了許多狀態機的寫法,都差不多,記錄一個感覺格式還不錯的(三段式):


//第一個進程,同步時序always模塊,格式化描述次態寄存器遷移到現態寄存器
always @ (posedge clk or negedge rst_n) //異步復位
if(!rst_n)
current_state <= IDLE;
else
current_state <= next_state;//注意,使用的是非阻塞賦值

//第二個進程,組合邏輯always模塊,描述狀態轉移條件判斷
always @ (current_state) //電平觸發
begin
next_state = x; //要初始化,使得系統復位後能進入正確的狀態
case(current_state)
S1: if(…)
next_state = S2; //阻塞賦值

endcase
end

//第三個進程,同步時序always模塊,格式化描述次態寄存器輸出
always @ (posedge clk or negedge rst_n)
…//初始化
case(next_state)
S1:
out1 <= 1’b1; //注意是非阻塞邏輯
S2:
out2 <= 1’b1;
default:… //default的作用是免除綜合工具綜合出鎖存器。
endcase
end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章