templates - SystemVerilog 中的参数化端口声明
问题描述
我正在尝试开发一个可以将两个接口之一作为端口的模块。模块的行为变化很小,具体取决于使用两个接口中的哪一个,因此我想将它实现为单个模块。
module m(
input logic clock,
input logic reset,
`ifdef IF1
if1.receiver link
`else
if2.receiver link
`endif
...
);
上面的代码工作正常,但我想将选择参数化,因为我可能想在设计中实例化这个模块的不同版本。
像这样的东西:
module m #(parameter IF = 0)(
input logic clock,
input logic reset,
generate
if (IF1)
if1.receiver link
else
if2.receiver link
endgenerate
...
);
现在这第二个例子不起作用但是这可以在 system-verilog 中实现吗?我在语言规范中找不到明确的答案。
解决方案
您可以使用通用interface
端口而不是指定if1
or if2
。然后,您可以将任何类型的接口连接到该端口,只要所有对名称的引用对所有类型都有效。因此,在您的示例中,两个接口都需要一个接收器 modport。
推荐阅读
- mongodb - mongodb中$match中的多个条件
- ios - 如何向我的 tabBarController 添加约束?
- c++ - 如果我在使用 PTHREAD_PROCESS_SHARED 时不调用 pthread_mutex_destroy 会发生什么
- talend - Talend - 如何使用 tloop 或 tmap 将出生日期循环到当前年份?
- authentication - CakePHP 4 的 CakePHP 2 用户数据库/密码迁移
- xcode - “像素率限制:0”和“像素率限制:1”有什么区别?
- php - PHP $_FILES 大小 总问题
- c++ - 如何将 char 数组传递给 constexpr 构造函数?
- javascript - 在 React.js 的功能组件中首次渲染之前调用 api
- sql - CASE WHEN 选择要带回 ORACLE SQL 的值列表