【发布时间】:2021-03-08 17:08:56
【问题描述】:
我想将以下定义放在一个默认包中,我将其包含在我的所有其他 SystemVerilog 模块中:
let max(a,b) = a > b ? a : b;
但是,当我尝试在模块中使用导入的 let 定义时,我被告知我正在尝试使用非本地函数定义并出现 VCS 错误。
为什么?
【问题讨论】:
标签: system-verilog let register-transfer-level
我想将以下定义放在一个默认包中,我将其包含在我的所有其他 SystemVerilog 模块中:
let max(a,b) = a > b ? a : b;
但是,当我尝试在模块中使用导入的 let 定义时,我被告知我正在尝试使用非本地函数定义并出现 VCS 错误。
为什么?
【问题讨论】:
标签: system-verilog let register-transfer-level
这个简单的例子没有问题。确保包总是在在被导入之前编译。从包中正确导入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
【讨论】: