用法2种:
1预处理参数。
2时间延时。
在Verilog中,#()是一个参数化的模块声明,用于定义模块的参数。这些参数可以在模块实例化时被传递,以便在模块内部使用。#()中的参数可以是数字、字符串或其他参数化模块。具体说明如下:
-
#()中的参数可以是数字、字符串或其他参数化模块。
-
参数可以在模块实例化时被传递,以便在模块内部使用。
-
#()中的参数可以有默认值 ,如果没有传递参数,则使用默认值。
-
#()中的参数可以在模块内部使用,例如用于计算延迟时间等。
下面是一个简单的Demo,展示了如何在Verilog中使用#()声明一个参数化模块:
默认参数:
cs
module sleep_led #
(
parameter CNT_1US_MAX = 6'd49,// 有默认值的,实例化时可以传入新值
parameter CNT_1MS_MAX = 10'd999,// 没有新值传入,就使用默认值
parameter CNT_1S_MAX = 10'd999
)
(
input clk,
input rst,
input button,
output reg led
);
reg [9:0] cnt_1us;
reg [9:0] cnt_1ms;
reg [9:0] cnt_1s;
always @(posedge clk or posedge rst)
begin
if (rst)
begin
cnt_1us <= 0;
cnt_1ms <= 0;
cnt_1s <= 0;
end
else
begin
if (cnt_1us == CNT_1US_MAX)
begin
cnt_1us <= 0;
cnt_1ms <= cnt_1ms + 1;
end
else
begin
cnt_1us <= cnt_1us + 1;
end
if (cnt_1ms == CNT_1MS_MAX)
begin
cnt_1ms <= 0;
cnt_1s <= cnt_1s + 1;
end
if (cnt_1s == CNT_1S_MAX)
begin
cnt_1s <= 0;
if (button)
begin
led <= ~led;
end
end
end
end
endmodule
时间延时:
cs
`timescale 1ns/1ns
module led
(
input wire key_in , //输入按键
output wire led_out //输出控制led灯
);
#10 //延时10ns
assign led_out = ~key_in ;
endmodule