【发布时间】: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