Verilog初学者的问题:模块是否可以发布其静态/常量属性,例如地址总线片的宽度或内部寄存器的数量?它不是参数,而是实例化模块固有的信息。它既不是模块输出数据。
类似(不正确的) .addr(地址[ amod.AMOD_ADDR_W -1:0])下面的
module top_mod #(parameter ADDR_W = 32)
(input [ADDR_W-1:0] addr);
amod amod( .addr( addr[amod.AMOD_ADDR_W-1:0] ) );
endmodule
// ---
module amod(
input [AMOD_ADDR_W-1:0] addr
);
// AMOD_ADDR_W is amod's intrinsic property
localparam AMOD_ADDR_W = 2;
endmodule
全球定义似乎不适合我。
我也很欣赏一些有用的Verilog编码提示的链接。
谢谢。
答案 0 :(得分:4)
Verilog的精化过程可防止参数值向上流动。在这种情况下,不需要匹配端口宽度; Verilog将根据需要截断或填充连接。所以你没有必要这样做。
在SystemVerilog中,package
是在module
之间共享参数值的方法。
package amod_pkg;
parameter ADDR_W=2;
endpackage
module amod import amod_pkg::*; (
input [ADDR_W-1:0] addr
);
// ADDR_W is amod's intrinsic property
endmodule
// ---
module top_mod #(parameter ADDR_W = 32)
(input [ADDR_W-1:0] addr);
amod amod( .addr( addr[amod_pkg::ADDR_W-1:0] ) );
endmodule