如何将组合逻辑代码连接至模块的interface modport?
SystemVerilog接口临时连接组合逻辑的解决方案
要在顶层模块中将dst_rd_blk的sec_rd接口临时连接到组合逻辑,核心是先实例化对应接口,再通过接口桥接组合逻辑与模块端口,具体实现如下:
关键逻辑说明
SystemVerilog的接口端口无法直接绑定到零散信号或组合逻辑块,必须先实例化接口实体,再通过接口的modport匹配信号方向,完成组合逻辑与模块的连接。
完整修改后的顶层模块代码
module top ( input logic clk ); // 1. 实例化sec_rd接口 sec_rd_if sec_rd_inst ( .clk (clk) ); // 2. 组合逻辑块:驱动接口的输入信号(对应dst模块的输入) always_comb begin // 临时逻辑示例:可按需修改,需避免组合latch(保证所有分支都有赋值) sec_rd_inst.sec_rd = 1'b0; sec_rd_inst.sec_rd_addr = 8'h00; // 可选:添加条件触发逻辑 // if (some_internal_condition) begin // sec_rd_inst.sec_rd = 1'b1; // sec_rd_inst.sec_rd_addr = 8'h20; // end // 若需读取模块输出的sec_rd_rdy,直接调用即可 // logic rdy_signal; // rdy_signal = sec_rd_inst.sec_rd_rdy; end // 3. 连接模块的接口端口到实例化的接口(指定dst modport匹配方向) dst_rd_blk rd_blk ( .clk (clk), .sec_rd (sec_rd_inst.dst) ); endmodule
注意事项
- modport匹配:
dst_rd_blk使用dstmodport,连接时必须指定sec_rd_inst.dst,确保信号输入输出方向与模块定义一致。 - 组合逻辑规范:驱动
sec_rd和sec_rd_addr时,要保证所有分支都有赋值,避免生成不必要的组合latch,引发仿真或综合错误。 - 信号读取:模块输出到接口的
sec_rd_rdy可直接在组合逻辑中读取,无需额外配置。
内容的提问来源于stack exchange,提问作者DarinT
相关产品推荐
相关产品推荐

