在verilog中为循环写入FSM

在verilog中为循环写入FSM,verilog,fsm,Verilog,Fsm,我想通过一个FSM实现这个for循环 int j; for(int i=0;i<50;i++) { j++ } 我认为需要3种状态:init、increment和done 初始化->初始化 增量->将增量i/j 完成->最终状态 我的尝试 module fsm( clk, z, next_state ); input clk; output [7:0] z; reg [7:0] z; reg [7:0] k;

我想通过一个FSM实现这个for循环

  int j;
   for(int i=0;i<50;i++)
    {
  j++
  }
我认为需要3种状态:init、increment和done

初始化->初始化 增量->将增量i/j 完成->最终状态

我的尝试

module fsm(
    clk, z, next_state
);
  input        clk;
  output [7:0] z;
  reg    [7:0] z;
  reg    [7:0] k;
  reg    [7:0] state, next_state;

  parameter S0=0;
  parameter S1=0;
  parameter S2=0; // my confusion lies here

  always @ (*) begin : next_state_logic
    case ( state )
      S0: begin
        k = 'b0;
        z = 'b0;
        next_state = S1;
        //else next_state = S0;
      end
      S1: begin 
        z=z+1;
        k=k+1; 
        if (k<8'b00110010)
          next_state = S1;
        else
          next_state = S2;
      end
      S2: begin
        z=S2;
      end
      default: next_state = S0;
  endcase
end // continued to the right

// continued from left
always @ (posedge clk) begin: state_assignment
  state <= next_state;
end

endmodule
我还需要测量这个循环执行所需的时钟周期数
建议

缩进代码可以使输入更容易阅读,也更容易让其他人帮助您

如果您不限于verilog-95,则端口列表可以从

module fsm(
  clk, z
);
input        clk;
output [7:0] z;
reg    [7:0] z;
致:

您当前的问题一直处于定义状态。如果需要3个状态,则至少需要2位。因此,reg[1:0]状态;reg[1:0]下一个州;将是所需的最小宽度

你们的州可以定义为:

parameter S0=2'b00;
parameter S1=2'b01;
parameter S2=2'b10; 

注意:如果它们不被覆盖,那么就生成localparams。

thanx Morgan,我已经完成了FSM的设计。现在实际需要的是在一定数量的延迟之后运行FSM模块一定数量的时间。所以在c中,我需要I;i@SangeetSaha睡眠在verilog许多并行硬件中并没有真正的意义。Verilog for design并没有真正的时间概念,只有时钟边缘。如果你真的被卡住了,格式良好的问题通常会得到回答。所以,如果你有一些你认为是一个好问题的东西,那么一定要提出另一个问题。
parameter S0=2'b00;
parameter S1=2'b01;
parameter S2=2'b10;