【问题标题】:Is default value required for a Verilog parameter declaration?Verilog 参数声明是否需要默认值?
【发布时间】:2021-10-01 10:05:22
【问题描述】:

Verilog 代码中的参数通常声明为默认值,例如:

parameter UP = 1;

但是如果参数总是在模块实例化时被覆盖,那么我也看到了没有默认值的声明,比如:

parameter UP;

这个没有默认值的参数声明在ModelSim中可以编译,但是在Riviera-PRO编译失败。

Verilog IEEE Std 1365-2005 部分“4.10.1 模块参数”显示默认值是必需的(不是可选的),如:

因此,如果需要默认值,则 ModelSim 通过接受没有默认值的参数来宽容,或者如果默认值是可选的,则 Riviera-PRO 不支持没有默认值的参数。

因此:Verilog 参数声明是否需要默认值?


下面包含一个计数器模块,包括没有默认值的参数声明,供参考。

module counter
  (
   input            clk,
   input            rst,
   output reg [3:0] cntr
   );

   parameter UP;

   // Counter
   always @(posedge clk or posedge rst)
     begin
        if (rst)
          cntr <= 4'd0;
        else
          if (UP)
            cntr <= cntr + 1;
          else
            cntr <= cntr - 1;
     end

endmodule

下面还提供了一个使用计数器的测试台供参考:

module testbench();

   // Declarations
   reg clk;
   reg rst;
   wire [3:0] cntr;

   // Clock generation
   initial begin
      clk = 0;
      forever #5 clk = ~ clk;
   end

   // Reset generation
   initial begin
      rst = 1;
      #100;
      rst = 0;
   end

   // DUT counter
   counter #(.UP(1)) dut (clk, rst, cntr);

endmodule

【问题讨论】:

    标签: verilog modelsim riviera-pro


    【解决方案1】:

    所有 verilog 标准都留有解释的余地​​。另请注意,1394 最后一次更新是在 2005 年,并且不再处于活动状态。它已被 SystemVerilog 标准取代。

    根据您对 1394 标准的引用,需要默认值 。 如果 ModelSim 忽略它,则该工具违反标准。您可以将其报告给 Mentor。但是,由于历史原因或某些技术原因,这种行为可能是故意的。

    在您的情况下,对标准的这种解释不会影响用户程序的行为(假设参数总是被覆盖)。

    众所周知,多个供应商以不同的方式解释和/或实施标准。有多个违规行为。有些他们拒绝修复,因为客户群可能在他们的代码中使用了这些违规行为。

    System Verilog 标准有一个澄清,允许在端口参数声明中省略值但only

    param_assignment ::= parameter_identifier { unpacked_dimension } [ = constant_param_expression ] ^18

    ^18) 从 param_assignment 中省略 constant_param_expression 或从 a type_assignment 仅在 parameter_port_list 中。但是,从 localparam 中省略它们是不合法的 parameter_port_list 中的声明

    【讨论】:

    • 非常感谢您的详尽回答。我发现缺少的参数值的文件被指定为 Verilog 文件,而不是 SystemVerilog 文件,即使这样,省略的默认值也在注释 18 不支持的“parameter_declaration”中。因此,ModelSim 似乎只是允许这种非标准构造。
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多