当和接口遍历层次结构边界时,使用systemverilog接口遇到了一些后端问题。我试图在附图中勾勒出这种情况。
上面的图片显示了使用接口的“常规”方法。接口和连接的模块都在相同的层次结构级别上实例化。这适用于仿真和后端。
中间的图片显示了我的情况。在顶层,我有一个模块和接口实例化。该接口连接到紫色模块,然后连接到2个子模块。在模拟中,这可行。
然后综合工具抱怨紫色级别的接口应该是一个modport。所以我补充了。但是,综合工具将导线解释为双向的,并添加了逻辑来简化这一过程。在我的设计中,所有导线都是单向的。
下图显示了我只能找到解决此问题的唯一解决方法。我通过modport连接原始接口(标记为A)。然后,我实例化一个新接口(标记为B),该接口具有与接口A相同的父接口。接口A和B都连接到包含许多语句的连接模块,例如:
分配interfaceB.rx1 = interfaceA.rx1;
分配interfaceB.rx2 = interfaceA.rx2;
分配interfaceA.statusX = interfaceB.statusX;
等
所以它只是接口A和B的“哑”连接。
这种工作方式感觉很错误,因为此连接模块会产生大量开销。是否存在一种很好/更容易的在分层边界上使用该接口的方法,该接口不仅可用于模拟,而且可用于综合?
答案 0 :(得分:0)
层次结构绝对是SystemVerilog接口的缺点。
您可以通过使用端口列表创建InterfaceB
并连接来自InterfaceA
端口的各个信号来简化解决方案。这样就消除了连接模块。
interface InterfaceB( input rx1, rx2, output ...)'
modport .../ same as what you have
endinterface