【问题标题】:Why can't I import a let definition from a package, in a SystemVerilog module?为什么我不能在 SystemVerilog 模块中从包中导入 let 定义?
【发布时间】:2021-03-08 17:08:56
【问题描述】:

我想将以下定义放在一个默认包中,我将其包含在我的所有其他 SystemVerilog 模块中:

let max(a,b) = a > b ? a : b;

但是,当我尝试在模块中使用导入的 let 定义时,我被告知我正在尝试使用非本地函数定义并出现 VCS 错误。

为什么?

【问题讨论】:

    标签: system-verilog let register-transfer-level


    【解决方案1】:

    这个简单的例子没有问题。确保包总是在被导入之前编译。从包中正确导入pkg::*pkg::max。或者直接使用pkg::max(a,b),不导入。是的,使用支持这种语法的编译器。

    package pkg;
      let max(a,b) = a > b ? a : b;
    endpackage:pkg
    
    module top();
      import pkg::*;
      
      int a = 1,b = 2;
      initial begin
        $display("max of %d and %d is %d", a, b, max(a,b));
      end
    endmodule
    

    【讨论】:

    • 谢谢,@Serge!您使用哪个 SystemVerilog 编译器来验证此代码?
    • synopsys VCS 以及 aldec、cadence 和导师(均来自 eda playground)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2015-11-28
    • 1970-01-01
    • 2021-05-07
    • 2021-04-24
    • 2018-07-01
    相关资源
    最近更新 更多