用法2种:
1预处理参数。
2时间延时。
在Verilog中,#()是一个参数化的模块声明,用于定义模块的参数。这些参数可以在模块实例化时被传递,以便在模块内部使用。#()中的参数可以是数字、字符串或其他参数化模块。具体说明如下:
1. #()中的参数可以是数字、字符串或其他参数化模块。
2. 参数可以在模块实例化时被传递,以便在模块内部使用。
3. #()中的参数可以有默认值,如果没有传递参数,则使用默认值。
4. #()中的参数可以在模块内部使用,例如用于计算延迟时间等。
下面是一个简单的Demo,展示了如何在Verilog中使用#()声明一个参数化模块:
默认参数:
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)
beginif (rst)begincnt_1us <= 0;cnt_1ms <= 0;cnt_1s <= 0;endelsebeginif (cnt_1us == CNT_1US_MAX)begincnt_1us <= 0;cnt_1ms <= cnt_1ms + 1;endelsebegincnt_1us <= cnt_1us + 1;endif (cnt_1ms == CNT_1MS_MAX)begincnt_1ms <= 0;cnt_1s <= cnt_1s + 1;endif (cnt_1s == CNT_1S_MAX)begincnt_1s <= 0;if (button)beginled <= ~led;endendend
endendmodule
时间延时:
`timescale 1ns/1nsmodule led
(input wire key_in , //输入按键output wire led_out //输出控制led灯
);#10 //延时10nsassign led_out = ~key_in ;endmodule