2301_79683729 2026-03-24 14:15 采纳率: 0%
浏览 2

带EDT的serial仿真Mismatch,怎么定位到具体reg

在用VCS对pattern执行chain serial或scan serial的仿真时,出现Mismatch如下,但这是serial的仿真,且有EDT压缩逻辑,这里无法报出具体的reg,我该怎么定位到是哪条chain的哪个reg出现的Mismatch呢?

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-03-24 14:16
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在使用 VCS 进行 Serial Scan 或 Chain Serial 仿真 时,如果出现 Mismatch,但因为有 EDT(Embedded Deterministic Test)压缩逻辑 的存在,导致无法直接定位到具体的 Register(reg),这是比较常见的问题。以下是一个详细的解决方案和定位方法:


    一、问题分析

    1. EDT 压缩逻辑的作用

    • EDT 是一种用于减少测试数据量的机制,通过将多个寄存器(registers)压缩成一个或几个扫描链(scan chain)进行测试。
    • 在仿真中,由于压缩逻辑的存在,实际的寄存器地址信息可能被隐藏,导致无法直接看到哪个寄存器发生了不匹配。

    2. Mismatch 的表现

    • 仿真中报告了 Mismatch,但没有具体指出是哪条 scan chain 上的哪个 register。
    • 这是因为 EDT 压缩后的数据与原始寄存器数据之间的映射关系被隐藏了。

    二、定位 Mismatch 的关键步骤

    为了定位到是哪条 chain 的哪个 reg 出现了 mismatch,可以按照以下步骤进行:

    1. 确认仿真模式是否为 EDT 模式

    • 检查仿真脚本中是否启用了 EDT 模式。
    • 如果是 EDT 模式,说明需要考虑压缩逻辑对数据的影响。

    2. 使用 VCS 的调试功能获取详细信息

    VCS 提供了一些调试选项,可以帮助你查看压缩后的 scan chain 数据和对应的原始寄存器地址。

    ✅ 方法一:使用 +vcs+dump+ 参数

    vcs -R +vcs+dump+all -timescale=1ns/1ps +access+all +define+TESTMODE=1 +define+EDT_ENABLE=1
    
    • +vcs+dump+all:启用所有信号的 dump,包括压缩后的 scan chain 和原始寄存器。
    • +access+all:确保所有寄存器都能被访问。
    • +define+EDT_ENABLE=1:确保 EDT 逻辑被正确启用。

    ✅ 方法二:使用 +vcs+trace+ 参数

    vcs -R +vcs+trace+all -timescale=1ns/1ps +access+all +define+TESTMODE=1 +define+EDT_ENABLE=1
    
    • +vcs+trace+all:记录所有信号的波形,便于后续分析。

    3. 查看 VCS 的 trace 文件(.fsdb 或 .vcd)

    • 打开 trace 文件,查找 scan chain 的输入输出数据
    • 注意观察 EDT 编码后的数据原始寄存器的数据 之间的对应关系。

    4. 使用 VCS 的 wave 工具查看压缩后的 scan chain

    • 使用 VCS 提供的 wave 工具,查看压缩后的 scan chain 数据。
    • 例如:
      wave -i <trace_file.fsdb>
      
    • 在 wave 界面中,找到 scan_inscan_out 信号,观察它们的变化。

    5. 分析 scan chain 的结构

    • 根据设计文档,了解每个 scan chain 对应的寄存器列表。
    • 通过压缩算法(如 EDT 的编码方式),将压缩后的 scan chain 数据反向解码,还原出原始的寄存器值。

    三、代码层面的处理建议

    如果你能访问到 RTL 设计文件,可以尝试以下方法来辅助定位:

    ✅ 修改仿真脚本以打印 scan chain 的原始寄存器地址

    你可以修改仿真脚本,添加一些调试信息,例如:

    # 在仿真脚本中添加如下命令
    set sim_options "-R +vcs+dump+all +access+all +define+TESTMODE=1 +define+EDT_ENABLE=1"
    

    或者在仿真过程中,动态打印某些 scan chain 的内容:

    # 在仿真过程中执行以下命令
    simulator->print("Scan_chain_0_data", "Scan_chain_0_data");
    simulator->print("Scan_chain_1_data", "Scan_chain_1_data");
    

    四、推荐工具和方法

    | 工具/方法 | 用途 | |----------|------| | VCS Waveform Viewer | 查看压缩后的 scan chain 数据 | | EDT 解码工具 | 将压缩数据还原为原始寄存器值 | | Design Compiler / DC Shell | 分析 scan chain 结构 | | Verdi | 高级波形分析工具,支持 EDT 解码 |


    五、总结

    要定位 EDT 压缩下的 serial scan 仿真 mismatch,你需要:

    1. 确认 EDT 是否启用
    2. 使用 VCS 的调试参数(如 +vcs+dump+all
    3. 查看 trace 文件,分析 scan chain 数据
    4. 利用 EDT 解码工具还原原始寄存器地址
    5. 结合设计文档和 scan chain 结构进行匹配分析

    六、示例代码(修改后的仿真脚本)

    # 修改后的仿真脚本示例
    vcs -R +vcs+dump+all +access+all +define+TESTMODE=1 +define+EDT_ENABLE=1 \
        +vcs+trace+all \
        -timescale=1ns/1ps \
        -sverilog \
        -f design_files.f \
        -o simv
    

    如果你能提供具体的 Mismatch 报告内容scan chain 的结构描述,我可以进一步帮你定位到具体的 register!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月24日