我有一个具有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
答案 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页上解释了在逻辑综合过程中可以使用未知运算符的方式。