在verilog实例中#(10)的目的是什么?

时间:2017-03-08 01:54:42

标签: verilog

现在我试图了解一些verilog代码,如下所示,

  dataproc #(10) proc01
     (

      .dout                             (dout01[9:0]),               
      .clk                              (clkin01),          
      .rst_n                            (rst_in01_n),    
      .din                              (dout[9:0])
    );     

实际上我没有达到这个目的

 #(10)
这是什么? verilog的目的是什么?

我通常按以下方式使用

 dataproc u_dataproc
(
...
...
)

但我以前从未见过

  

#(10)

更新

我已经更新了模块。

module dataproc 
  #(parameter w = 1)
   (
    input              clk,
    input              rst_n,
    input [w-1:0]      din,
    output wire [w-1:0] dout
    ); 

   reg [w-1:0]  NP_dout;
   assign dout = NP_dout;

endmodule 

1 个答案:

答案 0 :(得分:0)

它是parameter,您在制作模块实例时会覆盖它。

假设你有一个类似下面的模块。

module temp();
  parameter a = 2;
  bit [a-1:0] b1;
endmodule

现在,如果您获取上述模块的实例并想要更改默认参数值(这反过来会更改该模块的底层硬件),那么您可以执行以下操作。

module abc();
  temp t1();
  temp #(4) t2(); // Changes the default parameter value

  initial
  begin
    $display("Size of t1.b1 - %0d", $size(t1.b1));
    $display("Size of t2.b1 - %0d", $size(t2.b1));
  end
endmodule

// Output 
Size of t1.b1 - 2
Size of t2.b1 - 4
  

请注意,参数必须在运行时或之前具有值   在详细阐述时间。因此,您无法在模拟过程中更改参数   运行