gpt4 book ai didi

verilog - 什么是在编译时抛出错误的 LINT/综合安全语句?

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

我有一个模块,它传递一个参数,然后实例化与定义的参数相对应的另一个模块。

但是,如果没有为特定参数组合定义案例,我希望在编译时抛出错误以突出显示问题,如下所示:

generate
if (PARAM1 == 1 && PARAM2 == 2) begin

// instantiate module logic_A

end else if (PARAM1 == 2 && PARAM2 == 1) begin

// instantiate module logic_B

end else begin

// throw an error at compile time if we haven't
// defined a case for those parameters

end
endgenerate

但是,尽管插入了错误,但该代码仍然需要可综合(在 Verilog 中,而不是 SystemVerilog 中)并通过 LINTing。

有谁知道在这种情况下我可以用什么?预先感谢您。

最佳答案

我在姊妹网站 Electronics StackExchange 上针对“a way of conditionally triggering a compile-time error in verilog”回答了非常类似的问题。解决方案是有条件地实例化不存在的模块。我建议不存在的模块有一个很长的名称和有意义的名称来解释错误。这也降低了不存在的模块意外地与现有模块同名的风险。

generate
if (PARAM1 == 1 && PARAM2 == 2) begin : use_logicA
// instantiate module logic_A
end
else if (PARAM1 == 2 && PARAM2 == 1) begin : use_logicB
// instantiate module logic_B
end
else begin : illegal
illegal_parameter_condition_triggered_will_instantiate_an non_existing_module();
end
endgenerate

这是有效的,因为只有在细化阶段评估参数值之后才会检查不存在的模块是否存在。

<小时/>

更好的解决方案是使用 SystemVerilog 方法;特别是使用符合 IEEE Std 1800-2009 标准或更新标准的模拟器。然后,您可以使用 $error() 并给出更有意义的消息来处理错误(例如,打印触发错误条件的参数值)。您可以在IEEE Std 1800-2012中阅读更多相关信息。 20.11细化系统任务

generate
if (PARAM1 == 1 && PARAM2 == 2) begin : use_logicA
// instantiate module logic_A
end
else if (PARAM1 == 2 && PARAM2 == 1) begin : use_logicB
// instantiate module logic_B
end
else begin : illegal
$error("Expected PRAM1/2 to be 1/2 or 2/1, but was %0d/%0d", PARAM1, PARAM2 );
end
endgenerate

关于verilog - 什么是在编译时抛出错误的 LINT/综合安全语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685905/

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