三段式状态机模板。

“三段式”状态机的Verilog HDL 代码模板如下:
//状态调转
always @(posedge clk) begin
if (!rst_n)
 state <= idle;
else
 state <= next_state;
end
//下一状态的计算
always @(*) begin         ///原本的always @(state) begin,发现老是调不通,状态不跳转,把state改成*后 就行了。
  case(state)              ///原因是三个always是分别独立的,上一个state的变化没有触发,这个always的执行,所以用* 
   s0: next_state = ;   //触发always里的状态变化
   s1: next_state = ;
   ...
   endcase
   end
//输出逻辑的处理
always @(posedge clk) begin
   case(state)
   s0: begin
   out1 <= ;
   out2 <= ;
   ...
   end
   s1: begin
   out1 <= ;
   out2 <= ;
   ...
   end
   ...
   end
   end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的三段式状态机的 Verilog 代码模板: ``` module state_machine ( input clk, input rst, input [n-1:0] input_signal, output reg [m-1:0] output_signal ); // Declare state enum typedef enum logic [1:0] { STATE_IDLE, STATE_WAIT, STATE_PROCESS } state_t; // Declare state and next_state variables state_t state, next_state; // Declare state register reg [1:0] state_reg; // Declare output register reg [m-1:0] output_reg; always @(posedge clk or posedge rst) begin if (rst) begin // Reset state and output registers state_reg <= STATE_IDLE; output_reg <= 'b0; end else begin // Update state and output registers based on current state state_reg <= next_state; output_reg <= output_signal; end end always @(*) begin // Set next_state based on current state and input signal case (state_reg) STATE_IDLE: if (input_signal == 'b1) begin next_state = STATE_WAIT; end else begin next_state = STATE_IDLE; end STATE_WAIT: if (input_signal == 'b0) begin next_state = STATE_PROCESS; end else begin next_state = STATE_WAIT; end STATE_PROCESS: next_state = STATE_IDLE; endcase end // Assign output_signal to output_reg assign output_signal = output_reg; endmodule ``` 其中,`n` 和 `m` 分别是输入和输出信号的位宽。在 `always @(*)` 语句块中,我们可以根据当前状态和输入信号来确定下一个状态 `next_state`。在 `always @(posedge clk or posedge rst)` 语句块中,我们可以根据 `next_state` 来更新状态寄存器 `state_reg` 和输出寄存器 `output_reg`。最后,我们使用 `assign` 语句将 `output_reg` 赋值给 `output_signal`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值