仅对英特尔可见 — GUID: mwh1409959613013
Ixiasoft
1.6.4.2.2. SystemVerilog状态机编码示例
使用以下编码样式描述SystemVerilog中的状态机。
使用枚举类型的SystemVerilog状态机
模块enum_fsm是一个使用枚举类型的SystemVerilog状态机实现的示例。
在 Intel® Quartus® Prime Pro Edition 综合中,为状态机定义状态的枚举类型必须是无符号整数类型。如果未将枚举类型指定为int unsigned,那么默认情况下综合使用带符号的int类型。在这种情况下, Intel® Quartus® Prime软件可以综合设计,但不能推断或优化作为状态机的逻辑。
module enum_fsm (input clk, reset, input int data[3:0], output int o);
enum int unsigned { S0 = 0, S1 = 2, S2 = 4, S3 = 8 } state, next_state;
always_comb begin : next_state_logic
next_state = S0;
case(state)
S0: next_state = S1;
S1: next_state = S2;
S2: next_state = S3;
S3: next_state = S3;
endcase
end
always_comb begin
case(state)
S0: o = data[3];
S1: o = data[2];
S2: o = data[1];
S3: o = data[0];
endcase
end
always_ff@(posedge clk or negedge reset) begin
if(~reset)
state <= S0;
else
state <= next_state;
end
endmodule