system-verilog - Systemverilog 跨层次边界的接口
问题描述
当和接口遍历分层边界时,我使用 systemverilog 接口遇到了一些后端问题。我试图在附图中勾勒出情况。
上图显示了使用接口的“常规”方法。接口和连接的模块都在同一层次上实例化。这适用于模拟和后端。
中间的图片显示了我的情况。在顶层,我有一个模块和接口实例化。接口接紫色模块,再接2个子模块。在模拟中这是有效的。
然后综合工具抱怨紫色级别的接口应该是modport。所以我补充说。然而,综合工具将线解释为双向并添加逻辑以促进这一点。在我的设计中,所有电线都是单向的。
我能找到解决此问题的唯一解决方法如下图所示。我通过 modport 连接原始接口(标记为 A)。然后我实例化一个新接口(标记为 B),它与接口 A 具有相同的父接口。接口 A 和 B 都连接到一个连接模块,该模块包含许多语句,例如:
分配接口B.rx1 = 接口A.rx1;
分配接口B.rx2 = 接口A.rx2;
分配 interfaceA.statusX = interfaceB.statusX;
ETC
所以它只是接口A和B的“哑”连接。
这种工作方式感觉非常错误,因为这个连接模块会产生大量开销。是否有一种更好/更简单的方法可以在层次边界上使用界面,不仅可以在模拟中工作,而且可以在综合中工作?
解决方案
分层组合绝对是 SystemVerilog 接口的一个缺点。
InterfaceB
您可以通过使用端口列表创建并连接来自端口的各个信号来简化您的解决方案InterfaceA
。这消除了连接模块。
interface InterfaceB( input rx1, rx2, output ...)'
modport .../ same as what you have
endinterface
推荐阅读
- ruby-on-rails - Ruby - 本年度的 group_by 月份,包括没有数据的月份
- c# - 如何在 DNN 中以编程方式制作新页面
- bash - Bash/Linux:在匹配时合并行;添加最后一个字段
- python - 如何修复“ImportError:没有名为 '_pywrap_tensorflow_internal' 的模块”
- javascript - 在 Mobx 状态树中进行更改后,如何让模型/状态进行监听?
- html - 更改 MailChimp 的成功/错误消息颜色
- css - svg 中跨度的 Xpath
- visual-studio-code - 为什么Vscode Cmd+R 开始调试不起作用
- android - 订阅 Firebase 服务的应用程序在启动时崩溃
- php - 如何将重复数据删除到数组中