1. 程式人生 > >記一個Verilog一段式狀態機的低階錯誤

記一個Verilog一段式狀態機的低階錯誤

問題是這樣的,我想在某個狀態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作為控制訊號,

修改過後的程式碼如下:

原始碼的邏輯應該是這樣的: