首页 > 解决方案 > Johnson 计数器语法错误。意外令牌:生成

问题描述

我的大学老师要求我实现一个 Johnson Counter 和它的测试台,宽度<=32(他称之为 N 参数),并且实现必须使用generate/for结构。虽然对Johnson Counter有所了解,但不知道generate在这种情况下如何使用,并且在尝试运行测试台时出现了一些错误。到目前为止,这是我的实现:

module johnsonCounter #(parameter N = 32)  
  ( 
    input clk,                
    input rstn,
    output reg [N-1:0] out
  );    

  always @ (posedge clk) begin
    if (!rstn)
      out <= 1;
    else begin
      out[N-1] <= ~out[0];
      generate
        for (int i = 0; i < N-1; i=i+1) begin
          out[i] <= out[i+1];
        end
      endgenerate

    end
  end
endmodule

这是测试台:

module tb;
  parameter N = 32;
  
  reg clk;
  reg rstn;
  wire [N-1:0] out;
  
  johnsonCounter    u0 (.clk (clk),
                .rstn (rstn),
                .out (out));
  
  always #10 clk = ~clk;
  
  initial begin
    {clk, rstn} <= 0;

    $monitor ("T=%0t out=%b", $time, out);
    repeat (2) @(posedge clk);
    rstn <= 1;
    repeat (15) @(posedge clk);
    $finish;
  end
  
  initial begin
    $dumpvars;
    $dumpfile("dump.vcd");
  end
endmodule

这些是错误:

ERROR VCP2000 "Syntax error. Unexpected token: generate[_GENERATE]. This is a Verilog keyword since IEEE Std 1364-2001 and cannot be used as an identifier. Use -v95 argument for compilation." "design.sv" 13  7
ERROR VCP2020 "begin...end pair(s) mismatch detected. 2 <end> tokens are missing." "design.sv" 17  7
ERROR VCP2020 "module/macromodule...endmodule pair(s) mismatch detected. 1 <endmodule> tokens are missing." "design.sv" 17  7
ERROR VCP2000 "Syntax error. Unexpected token: endgenerate[_ENDGENERATE]. This is a Verilog keyword since IEEE Std 1364-2001 and cannot be used as an identifier. Use -v95 argument for compilation." "design.sv" 17  7

欢迎任何帮助=)

标签: logicverilogsystem-verilog

解决方案


以这种方式使用是非法的generate

对于您的代码,只for需要一个循环(没有generate):

  always @ (posedge clk) begin
    if (!rstn)
      out <= 1;
    else begin
      out[N-1] <= ~out[0];
      for (int i = 0; i < N-1; i=i+1) begin
          out[i] <= out[i+1];
      end
    end
  end

有关generate语法,请参阅 IEEE Std 1800-2017,第 27 节。生成构造


推荐阅读