【Verilog HDL】常量的参数化及跨模块传递
- 申明变量
Verilog中申明常量主要有两种方式:parameter localparam
localparam用法与parameter基本一致,只是localpara定义的参数通常只在所在模块范围内使用,其赋值无法被模块之外的参数定义所改变。
- parameter的跨模块传递
parameter在同一个模块中的赋值通常有两种方式,即在一个module的端口申明之后和端口申明之前两种方式。
//module的端口申明之前 module 【模块名】#(【参数定义】) (【端口列表】); 【参数定义】 【逻辑功能】 endmodule //module的端口申明之后 module 【模块名】(【端口列表】); 【参数定义】 【逻辑功能】 endmodule
若希望parameter赋值能在模块之间传递,即parameter值从上层模块传递到例化的下层模块,建议在module的端口申明之前进行parameter定义。
//下层模块 module para_example_sub#( parameter MSB = 3, parameter LSB = 0 // 注意这里没有分号或逗号 ) ( input [MSB:0] i_data, output [MSB:LSB] o_data ); assign o_data = i_data[MSB:LSB]; endmodule //上层模块 module vlg_design( input [7:0] i_data, output [7:0] o_data ); localparam LOCAL_MSB = 7; localparam LOCAL_LSB = 4; para_example_sub#( .MSB (LOCAL_MSB), .LSB (LOCAL_LSB) ) uut_para_example_sub( .i_data (i_data[LOCAL_MSB:0]) .o_data (o_data[LOCAL_MSB:LOCAL_LSB]) ); assign o_data[LOCAL_LSB-1:0] = 'b0; endmodule