IEEE 1800-2017 LRM 在第 25.9 节虚拟接口中指出:
尽管接口可能包含对其主体外部对象的分层引用或引用的端口 其他接口,在声明中包含这些引用的接口是非法的 虚拟接口。
下面是这种不允许的分层引用的示例吗?
interface some_other_intf();
bit some_signal;
endinterface
interface some_intf();
some_other_intf intf();
task foo();
intf.some_signal <= 0;
endtask
endinterface
virtual some_intf some_vif;
我有一个工具抱怨包含intf.some_signal <= 0
的行。虽然intf.some_signal
是一个分层引用,但它是一个相对引用,所以我不明白为什么会不允许这样做。
intf
是接口主体的一部分。我不确定如何解释引用其他接口部分的端口。
引用另一个接口的端口示例
interface some_other_intf();
bit some_signal;
parameter T = int;
endinterface
interface some_intf(some_other_interface intf);
task foo();
intf.some_signal <= 0;
endtask
typefef intf.T myT;
myT another_signal;
endinterface
virtual some_intf some_vif;
问题出现在参考some_vif.another_signal
它的类型可能会根据 T 连接到intf
的参数化而变化。
对于大多数用例来说,这不是问题,但SystemVerilog委员会从未花时间澄清可以允许的具体情况;刚刚做出了广泛的全面禁止。