You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Interface的Modport信号传递到其他Module中?

问题分析与解决方案

你的代码核心问题出在信号名称不匹配和Modport映射错误,导致时钟、复位信号无法通过Interface正常传递,以下是具体修正方案:


核心问题点

  1. 信号定义与引用不一致:
    • test_intf中未定义clk信号,但MEM modport里错误引用了input clk;而clk_reset实际驱动的是aclk信号
    • clk_reset模块驱动的是areset_n,但MEM modport和mem模块里引用的是未被赋值的reset_n,导致该信号始终为x
  2. Modport方向逻辑错误:时钟、复位信号是从clk_reset输出,需要在MEM modport中定义为输入,才能完成跨模块传递

修正后的完整代码

1. 修正Interface定义

interface test_intf;
    logic aclk;
    logic bclk;
    logic areset_n;

    logic               wr_in;
    logic               rd_en;
    logic    [ 9:0]     wr_addr;
    logic    [23:0]     wr_data;
    logic    [ 9:0]     rd_addr;
    logic     [23:0]    rd_data;

    // CLK_RESET模块输出时钟、复位信号
    modport CLK_RESET (output aclk, bclk, areset_n);
    // MEM模块输入时钟、复位及控制信号,输出读数据
    modport MEM (input aclk, areset_n, wr_in, rd_en, wr_addr, wr_data, rd_addr, output rd_data);
endinterface

2. 修正mem模块的敏感列表与信号引用

module mem(
    test_intf.MEM intf
);

always @(posedge intf.aclk or negedge intf.areset_n)
begin
    if(!intf.areset_n) begin
        // 复位逻辑编写
    end else begin
        // 正常读写逻辑编写
    end
end
endmodule

3. 保持clk_reset与testbench代码不变

你的clk_reset模块和Testbench的Interface实例化方式是正确的,无需修改。


关键注意事项

  • Modport必须严格匹配Interface内部信号:禁止引用Interface中未定义的信号,否则会出现未知值x
  • 信号方向要统一:输出模块(如clk_reset)在Modport中定义信号为output,输入模块(如mem)在对应Modport中定义为input,确保信号流向正确
  • 避免信号名混淆:尽量使用统一的信号命名规则,减少reset_n/areset_n这类易混淆的命名,降低出错概率

内容的提问来源于stack exchange,提问作者bu-ral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:25:37