出于一个非常奇怪的原因(我们使用的脚本),我需要能够在模块中声明wire和regs之后声明一个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代码吗?如果能链接到文档中的相关章节,我也将不胜感激。谢谢!
发布于 2014-02-12 20:41:02
这是有效的Verilog (2001)。Verilog2001看到了localparam的引入,对于所有版本,在此上下文中使用参数在语法上仍然有效。localparam表示它不能被重写。
用法可以在23.10覆盖SystemVerilog IEEE Std 1800-2012的模块参数一节中看到。
来自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发布于 2014-02-13 12:41:27
一点儿没错。根据Verilog IEEE Std 1364-2001,您可以在Verilog代码中使用localparam。它可以在wire声明之后声明,这没有问题。
https://stackoverflow.com/questions/21724904
复制相似问题