分层边界上的 Systemverilog 接口

Systemverilog interfaces over hierarchical boundaries

当接口跨越层级边界时,我在使用 systemverilog 接口时遇到了一些后端问题。我试着在附图中勾勒出情况。

上图显示了"regular"使用接口的方法。接口和连接的模块都在同一层次结构中实例化。这适用于模拟和后端。

中图是我的情况。在顶层,我有一个模块和接口实例化。该接口接紫色模块,再接2个子模块。在模拟中这有效。

然后综合工具报错说紫色层的接口应该是modport。所以我补充说。然而,综合工具将线路解释为双向的,并添加了逻辑来促进这一点。在我的设计中,所有电线都是单向的。

我能找到的解决此问题的唯一解决方法如下图所示。我通过 modport 连接原始接口(标记为 A)。然后我实例化一个新接口(标记为 B),它与接口 A 具有相同的父接口。接口 A 和 B 都连接到一个包含很多语句的连接模块,例如:

分配接口B.rx1 = 接口A.rx1;

分配interfaceB.rx2 = interfaceA.rx2;

分配 interfaceA.statusX = interfaceB.statusX;

等等

所以它只是接口 A 和 B 的 "dumb" 连接。

这种工作方式感觉很不对劲,因为这个连接模块会产生大量开销。是否有一种更好/更简单的方法来使用分层边界上的接口,它不仅适用于模拟而且适用于综合?

谢谢

分层组合绝对是SystemVerilog接口的一个缺点。

您可以通过使用端口列表创建 InterfaceB 并连接到来自 InterfaceA 端口的各个信号来简化您的解决方案。这消除了连接模块。

interface InterfaceB( input rx1, rx2, output ...)'
 modport .../ same as what you have
endinterface