【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

 

posted @ 2023-04-24 13:03  AnchorX  阅读(889)  评论(0编辑  收藏  举报