1. 程式人生 > 其它 >verilog FSM為什麼要使用one hot去編碼狀態

verilog FSM為什麼要使用one hot去編碼狀態

技術標籤:verilogfsm

verilog FSM為什麼要使用one hot去編碼狀態

假設我們有四個狀態A B C D:
編碼規則1:

  • A = 2’b00
  • B = 2’b01
  • C = 2’b10
  • D = 2’b11

編碼規則2:

  • A = 4’b0001
  • B = 4’b0010
  • C = 4’b0100
  • D = 4’b1000

假設存在如下狀態轉移關係在這裡插入圖片描述

編碼規則1

針對編碼規則1,我們可以這樣描述其狀態轉移關係:

module top_module(
    input in,
    input [1:0] state,
    output [1:0] next_state,
    output out); 

    parameter A =
2'b00; parameter B = 2'b01; parameter C = 2'b10; parameter D = 2'b11; assign next_state[A] = (~state[0] & ~state[1] & ~in) | ( ~state[0] & state[1] & ~in); //狀態為A(~state[0] & ~state[1])且in為0 | 狀態為C(~state[0] & state[1])且in為0 endmodule

編碼規則2

module top_module(
    input in,
input [3:0] state, output [3:0] next_state, output out); parameter A = 4'b0001; parameter B = 4'b0010; parameter C = 4'b0100; parameter D = 4'b1000; assign next_state[A] = state[0]&(~in) | state[2]&(~in); // 狀態為A(state[0])且in為0 | 狀態為C(state[2])且in為0 endmodule

明顯編碼規則2的狀態轉移邏輯要比編碼規則1的狀態轉移邏輯要簡單的多。

總結

總結以下:使用one hot編碼會增加會增加一小部分暫存器的位數,但是卻大大簡化了判斷狀態轉移時候的邏輯。所以在寫verilog FSM的時候儘量使用one hot去編碼我們的狀態。