記一個Verilog一段式狀態機的低階錯誤
阿新 • • 發佈:2018-12-18
問題是這樣的,我想在某個狀態state1下根據輸入a改變輸出b的值,但是在晶片裡執行的時候發現只要狀態維持在state1下,b的值始終是從上一個狀態跳到state1時的值,只有在state1變化的邊沿,b的值才會根據輸入a更新。
原始碼如下:
always @ (posedge clk) begin if (rst) begin b <= 'd0; state <= state1; end else begin case (state): state1: begin if (a) b <= 'd1; // 邏輯1 if (c) state <= state2; // 邏輯2 end state2: default: endcase end end
這段程式碼咋一看好像沒什麼問題,state作為控制訊號,
修改過後的程式碼如下:
原始碼的邏輯應該是這樣的: