硬體描述語言與驗證

在上方狀態機的描述中,於第2個always區塊開頭寫「next = state;」的原因,下列何者正確?

always @(posedge clk)
    state <= next;
always @(*) begin
    next = state;
    case (state)
        IDLE: if (start) next = RUN;
        RUN:  if (done)  next = IDLE;
    endcase
end
  1. A表示不符合條件時就停留在目前的狀態,並在所有情況下都決定next的值以防止閂鎖器
  2. B為了每次都讓狀態回到IDLE
  3. C為了停止時脈
查看答案與解析

正確答案:A. 表示不符合條件時就停留在目前的狀態,並在所有情況下都決定next的值以防止閂鎖器

將狀態機分成更新狀態的暫存器區塊與決定下一個狀態的組合電路區塊來撰寫,是常見的形式。在組合電路這一側,若start或done為0時沒有對next賦值,就會產生閂鎖器。若在開頭寫「next = state;」,就能清楚表達「不符合任何條件時停留在目前的狀態」的意圖,同時防止閂鎖器。

  • A. 正確。先決定了預設值。
  • B. 意思是保持目前的狀態,並不是回到IDLE。
  • C. 與時脈無關。
練習這個領域 前往領域頁面

硬體描述語言與驗證的其他題目

  1. 米利型(Mealy)狀態機的特徵,下列何者正確?
  2. 在狀態機的狀態編碼中,獨熱編碼(one-hot)的特徵,下列何者正確?
  3. 在具有3個狀態的狀態機中,記憶狀態所需的正反器數量的組合,下列何者正確(二進位編碼/獨熱編碼)?
  4. 在上方的4位元計數器中,當count為15時時脈上升,count會變成多少?
  5. 在Verilog中將8位元的訊號a與b相加,並把結果賦值給8位元的訊號s(assign s = a + b;)。需要注意的地方,下列何者正確?

這個領域的比較