gpt4 book ai didi

parameters - 是否可以通过 Verilog/SystemVerilog 中的模块层次结构向上传递常量参数?

转载 作者:行者123 更新时间:2023-12-02 02:51:53 27 4
gpt4 key购买 nike

假设您的层次结构中有一个较低级别的模块,该模块具有相当复杂的参数计算。此参数计算不能方便地在更高级别的模块中复制,因为它使用来自低级别其他参数的信息。现在假设您在层次结构中还有一个更高级别的模块,需要引用该参数来计算不同的参数。

在(System)Verilog 中是否有一种方法可以在计算更高级别模块的参数时从较低级别模块的实例化中读取参数?

当然,您可以尝试在这里使用“接口(interface)”...

interface interface_low ();                                                                         

localparam VERY_COMPLEX_PARAM = 1 + 1;

endinterface;

interface interface_high (interface_low if_low);

localparam OTHER_PARAM = if_low.VERY_COMPLEX_PARAM + 1;

endinterface

...但是尝试编译此代码段以使用 Riviera-PRO 进行仿真将返回错误“参数初始值不能包含外部引用:if_low.COMPLEX_PARAM+1。”。或者,您可以尝试类似...

module low_level #(parameter SOME_NUM = 1, localparam VERY_COMPLEX_PARAM = SOME_NUM + 1) (output logic [31 : 0] out);

always_comb
begin
out = VERY_COMPLEX_PARAM;
end

endmodule


module high_level (output logic [31:0] out);

logic [31:0] low_out;

low_level #(.SOME_NUM (4)) ll (low_out);


localparam OTHER_PARAM = ll.VERY_COMPLEX_PARAM + 1;

always_comb
begin
out = OTHER_PARAM;
end

endmodule

...但它又会导致错误“参数初始值不能包含外部引用:ll.VERY_COMPLEX_PARAM+1。”

总是可以简单地重新组织实现,以便常量参数严格向下传递,但我觉得这是一个乏善可陈的解决方案。在那种情况下,更高级别的模块现在计算常量,这些常量引用层次结构中低得多的实现细节。将低级模块中的依赖项添加到更高级别的模块似乎很愚蠢,只是为了满足有关常量计算的限制。

那么,有没有更好的办法呢?

最佳答案

参数评估必须从上到下进行。您的接口(interface)示例应该作为接口(interface)端口工作,不被视为分层引用(它确实适用于我尝试过的其他两个工具)。

对于您的特定示例,您可以使用

const int OTHER_PARAM = ll.VERY_COMPLEX_PARAM + 1;  

只要 OTHER_PARAM 没有被用在需要常量的地方。您可能会遇到与综合工具支持相同的问题。

另一种选择是将参数放在一个包中,并让下层和上层模块导入相同的包。

关于parameters - 是否可以通过 Verilog/SystemVerilog 中的模块层次结构向上传递常量参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51900174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com