在Verilog中,#有2种作用。
第一种作用是指定时间延时,如#10,表示延时10个时间单位;
第二种作用在模块定义时指定常量型参数的默认值,在模块实例化时传递常量型参数的指定值。
cs
module uart_tx
//采用#()形式定义常量型参数,为模块的默认值
#(
parameter CLK_FRE = 50, //时钟频率
parameter BAUD_RATE = 115200 //波特率
)
(
input clk, //clock input
input rst_n, //asynchronous reset input, low active
input[7:0] tx_data, //data to send
output reg tx_data_ready, //send ready
output tx_pin //serial data output
);
localparam CYCLE = CLK_FRE * 1000000 / BAUD_RATE;
#10 //延时10ns
endmodule
uart_tx
//采用#()形式传递常量型参数,不传递时模块将采用默认值,传递则采用指定值
#
(
.CLK_FRE(50),
.BAUD_RATE(9600)
) uart_tx_inst
(
.clk (sys_clk ),
.rst_n (rst_n ),
.tx_data (tx_data ),
.tx_data_ready (tx_data_ready ),
.tx_pin (uart_tx )
);