Intel® Quartus® Prime Pro Edition用户指南: 设计建议

ID 683082
日期 9/28/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

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