由于一个非常奇怪的原因(我们使用的脚本),我需要能够在模块中声明连线和注册后声明一个localparam:
module blah (clk, rst, in, out);
input clk;
input rst;
input [2:0] in;
output [3:0] out;
wire res;
localparam NUMBER=5;
...
这是合法的verilog代码吗?我还要感谢文档中相关seciton的链接。谢谢!
答案 0 :(得分:4)
这是有效的Verilog(2001)。 Verilog 2001看到localparam
的引入,对于所有版本,在这种情况下使用参数在语法上仍然有效。 localparam
表示无法覆盖。
用法可见SystemVerilog IEEE Std 1800-2012的 23.10覆盖模块参数部分。
来自IEEE 1800-2012:
例如:
module generic_fifo
#(MSB=3, LSB=0) // parameter port list parameters
(input wire [MSB:LSB] in,
input wire clk, read, write, reset,
output logic [MSB:LSB] out,
output logic full, empty );
parameter DEPTH=4; // module item parameter
localparam FIFO_MSB = DEPTH*MSB;
localparam FIFO_LSB = LSB;
// These constants are local, and cannot be overridden.
// They can be affected by altering the value parameters above
logic [FIFO_MSB:FIFO_LSB] fifo;
logic [LOG2(DEPTH):0] depth;
always @(posedge clk or posedge reset) begin
casez ({read,write,reset})
// implementation of fifo
endcase
end
endmodule
答案 1 :(得分:0)
完全。根据{{3}},您可以在Verilog代码中使用localparam。它可以在电线声明后声明,没问题。