如何在Verilog中“发布”模块属性?

时间:2017-06-09 10:55:41

标签: verilog

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编码提示的链接。

谢谢。

1 个答案:

答案 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