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)
- 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
-
-
-
-
- `timescale 1ns/1ns
- module led
- (
- input wire key_in , //输入按键
- output wire led_out //输出控制led灯
- );
-
- #10 //延时10ns
-
- assign led_out = ~key_in ;
-
- endmodule