如何解决sc_port 和 sc_export 的区别
有人能清楚直观地解释 SystemC 中 sc_port
和 sc_export
之间的区别吗?什么时候使用端口,什么时候使用导出?
我已经阅读了部分手册,但我仍然无法理解两者之间的主要概念区别。
解决方法
来自IEEE Standard for Standard SystemC® 语言参考手册
类 sc_export 允许模块为其父模块提供接口。出口转发接口 对导出绑定到的通道的方法调用。导出定义了一组服务(由 导出的类型)由包含导出的模块提供。
通过导出提供接口是简单实现接口的模块的替代方法。 显式导出的使用允许单个模块实例以结构化的方式提供多个接口 方式。
如果模块要调用属于子模块中通道实例的成员函数,则调用 应该通过导出子模块来实现。
所有这一切的结果是,如果没有 sc_export,则需要在父模块中创建一个 sc_port 并将其连接到子模块的端口,以便将子模块的端口公开为父模块的端口。使用 sc_export 允许直接将子端口公开为父模块的端口。只需创建一个 sc_export 实例并将其绑定到子端口即可。
有关完整说明和类规范,请参阅 IEEE Standard for Standard SystemC ® 语言参考手册的 5.13 部分
附言如果您不打算将代码转换为 VHDL,则无需使用 sc_export
。 SystemC 只是标准的 C++ 并且端口只是普通的公共成员(你可以有一个 private
端口,但似乎没什么意义)所以你可以引用它并假装它是其父模块的成员或任何其他可以访问它的模块。
SystemC 要求是每个 port 或 export 必须绑定/连接到 通道(未绑定端口除外,但让我们忽略他们现在)。这个通道实例化的地方是端口和导出的区别。
对于 export,channel 实例必须位于具有 export 的同一模块中,或者位于其内部的子模块中。
对于 port,channel 实例必须位于带有端口的模块之外。
想象一个模块 top_module 有两个子模块 sender 和 receiver 用一位数据在其中实例化将发送方连接到接收方。如果您选择使发送方的输出数据为 sc_port 类型,那么您将需要在 top_module 中实例化通道,例如 sc_signal,并且绑定语句最好在top_module 的构造函数。但是,如果您选择使发送方的输出数据为 sc_export 类型,那么您将需要在子模块 sender 中实例化通道。因为您本质上是将频道的功能“导出”到发送方之外的世界。
这是我对端口和导出的直观理解。请保留我的“必须”声明,因为 Accellera 实现不强制执行此类规则,但与绑定顺序(自上而下与自下而上)的关系比其他任何事情都重要。
作为一个经验法则,我总是将导出用于所有模块的输出和端口。我的理念是,“你驾驶它,你拥有它”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。