电汇申报后的localparam

时间:2014-02-12 10:17:06

标签: verilog

由于一个非常奇怪的原因(我们使用的脚本),我需要能够在模块中声明连线和注册后声明一个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的链接。谢谢!

2 个答案:

答案 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。它可以在电线声明后声明,没问题。