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

Vivado综合后仿真:2D数组端口扁平化后的测试适配问题

适配Vivado综合后仿真中2D数组端口展平的测试调整方案

Vivado综合后仿真时,多维数组端口会被展平为单维或独立端口,针对这类变化,可通过以下方式调整测试用例,尤其是$fscanf赋值环节:


1. 先确认网表端口的实际形态

首先查看综合生成的网表文件(.v/.sv格式),明确展平后端口的准确名称和位宽:

  • 你给出的示例中,原端口reg signed [12:0] mac_ofdIsymbol_tqs [1:0];,网表通常会将其拆分为两个独立单维端口,命名可能是mac_ofdIsymbol_tqs_0和mac_ofdIsymbol_tqs_1(也可能保留括号格式,但网表一般会用合法标识符,括号会被替换为下划线),每个端口位宽都是12:0。

2. 修改DUT例化与$fscanf赋值逻辑

方式一:直接适配展平后的端口

如果测试用例无需兼容前仿真,可直接调整变量定义和例化映射:

// 定义对应展平端口的变量
reg signed [12:0] tq0, tq1;
// 从文件读取数据到变量
$fscanf(test_fd, "%d %d", tq0, tq1);

// 例化DUT时映射到展平后的端口
dut u_dut (
    .mac_ofdIsymbol_tqs_0(tq0),
    .mac_ofdIsymbol_tqs_1(tq1),
    // 其他端口映射
);

方式二:保留原2D数组变量,仅调整例化映射

如果想保留原测试逻辑中的2D数组,只需在例化时将数组元素分别映射到展平端口:

// 保留原2D数组定义
reg signed [12:0] mac_ofdIsymbol_tqs [1:0];
// 原有的$fscanf赋值逻辑不变
$fscanf(test_fd, "%d %d", mac_ofdIsymbol_tqs[0], mac_ofdIsymbol_tqs[1]);

// 例化时拆分映射
dut u_dut (
    .mac_ofdIsymbol_tqs_0(mac_ofdIsymbol_tqs[0]),
    .mac_ofdIsymbol_tqs_1(mac_ofdIsymbol_tqs[1]),
    // 其他端口映射
);

3. 兼容前/后仿真的宏定义方案

为了让测试用例同时支持前仿真(原2D端口)和后仿真(展平端口),可通过宏切换逻辑:

`ifdef POST_SIM
// 后仿真分支:适配展平端口
reg signed [12:0] tq0, tq1;
$fscanf(test_fd, "%d %d", tq0, tq1);

dut u_dut (
    .mac_ofdIsymbol_tqs_0(tq0),
    .mac_ofdIsymbol_tqs_1(tq1),
    // 其他端口
);
`else
// 前仿真分支:使用原2D端口
reg signed [12:0] mac_ofdIsymbol_tqs [1:0];
$fscanf(test_fd, "%d %d", mac_ofdIsymbol_tqs[0], mac_ofdIsymbol_tqs[1]);

dut u_dut (
    .mac_ofdIsymbol_tqs(mac_ofdIsymbol_tqs),
    // 其他端口
);
`endif

在Vivado后仿真时,添加POST_SIM宏定义即可自动适配。


4. 特殊情况:展平为单一大位宽端口

若网表将2D数组展平为一个连续的大位宽端口(比如mac_ofdIsymbol_tqs[25:0],高13位对应索引1的元素,低13位对应索引0),可通过数组拼接适配:

reg signed [12:0] mac_ofdIsymbol_tqs [1:0];
$fscanf(test_fd, "%d %d", mac_ofdIsymbol_tqs[0], mac_ofdIsymbol_tqs[1]);

// 拼接为大位宽变量
reg signed [25:0] flattened_tqs = {mac_ofdIsymbol_tqs[1], mac_ofdIsymbol_tqs[0]};

dut u_dut (
    .mac_ofdIsymbol_tqs(flattened_tqs),
    // 其他端口
);

注意:需确认网表中展平后的位序,避免赋值顺序错误。


关键注意事项

  • 必须以实际网表的端口定义为准,不同综合设置可能导致命名规则差异;
  • 原端口为signed类型时,展平后的端口变量也要保持符号属性,避免符号扩展错误。

内容的提问来源于stack exchange,提问作者Farah Bayomi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:05:25