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