我想使用" $ value $ plusargs"如下所示,
module top();
...
reg data;
real READ_FREQ
initial begin
if (!$value$plusargs("READ_FREQ=%0F", READ_FREQ))
READ_FREQ = 197;
end
parameter wclk = 300;
parameter rclk = READ_FREQ;
always #(rclk/2.0) i_rclk = ~i_rclk;
...
endmodule
但是当我编译上面的代码时,我遇到了错误,例如
irun: *E,VLGERR: An error occurred during parsing. Review the log file for errors with the code *E and fix those identified problems to proceed. Exiting with code (status 1).
irun(64): 12.10-p001: (c) Copyright 1995-2012 Cadence Design Systems, Inc.
file: ./top.v
parameter rclk = READ_FREQ;
|
ncvlog: *E,NOTPAR (./top.v,197|41): Illegal operand for constant expression [4(IEEE)].
如何在verilog中使用$ value $ plusargs?
答案 0 :(得分:2)
您无法将运行时变量分配给参数。只能在编译期间(默认值)和精化(覆盖值)分配参数。 $value$plusargs
在运行时执行,它也无法分配参数。
除了期限值rclk
之外,您尚未证明需要使用i_rclk
的位置。您可以将代码修改为以下内容以获得预期的效果。
real READ_FREQ;
initial begin
if (!$value$plusargs("READ_FREQ=%0F", READ_FREQ)) begin
READ_FREQ = 197;
end
forever #(READ_FREQ/2.0) i_rclk = ~i_rclk;
end