FSM中不可访问状态的默认值

时间:2019-05-07 10:14:49

标签: verilog fsm

我有一个具有3个状态的状态机。每个状态都有与之关联的特定输出值。在合成过程中,如果未在第4状态分配输出,则会收到警告。没有过渡到第4状态,因此无法访问。在第4种状态下,我应该分配什么输出?

我在互联网上看到一个示例,他们为其分配了“未知值”。这会提高性能吗?有某种危险吗?

reg [1:0] state;
reg [7:0] out;

always @(state) begin
    case (state)
        2'b00: out = 8'hAA;
        2'b01: out = 8'hBB;
        2'b10: out = 8'hCC;
        default: out = 8'bxxxx_xxxx;
    endcase
end

1 个答案:

答案 0 :(得分:2)

  

我在互联网上看到一个示例,他们为其分配了“未知值”。这会提高性能吗?有某种危险吗?

不,这并不危险。分配未知值可为综合工具提供另一个优化的自由度。但是,重要的是要记住,硅中不存在未知状态。换句话说,综合工具将在此状态下采用一个值。您唯一要说明的是,您不在乎该状态。

但是,实际上没有必要在代码中分配未知状态。由于您不必关心2'b11状态(因为它是不可访问的),因此只需执行以下操作:

reg [1:0] state;
reg [7:0] out;

always @(state) begin
    case (state)
        2'b00: out = 8'hAA;
        2'b01: out = 8'hBB;
        default: out = 8'hCC;
    endcase
end

这可能类似于综合工具的工作。

请记住,虽然可以分配未知状态,但是与未知状态相比则不可行! The Verilog Hardware Description Language (5th edition) by Thomas & Moorby's在第39页上解释了在逻辑综合过程中可以使用未知运算符的方式。