verilog parameter localparamdefine使用

xiaoxiao2021-02-28  98

1.define,是宏定义,全局有效。则在整个工程都是有效 2.parameter,参数,可以由调用者修改参数值。在定义模块和例化的时候有一定的差别,在定义模块时:模块名在参数的前面;例化模块时:参数在实例化名的前面

简单举例:

定义模块

module clkgen #(  parameter COUNT=4'd15 ) (  input        clk,  output      clk_en ); reg [3:0] cnt=4'd0; always@(posedge clk) begin  if(cnt<COUNT)   cnt<=cnt+1'b1;  else   cnt<=4'd0; end assign clk_en=(cnt==COUNT)?1'b1:1'b0; endmodule 例化时: `timescale 1ns/1ns module clkgen_tb; reg clk; wire clk_en; clkgen #(  .COUNT(15) ) u_clkgen (  .clk(clk),  .clk_en(clk_en) ); initial begin  clk=0; end always #5 clk=~clk; endmodule

3.localparam,本地参数,调用者不可修改。

转载请注明原文地址: https://www.6miu.com/read-75164.html

最新回复(0)