RISC-V技术论坛
直播中

贾永世

8年用户 1901经验值
私信 关注
[问答]

vivado跑tb_top,前仿可以通过后仿通不过,为什么?

报错就是not declare u_e203top_soc

回帖(1)

贾小龙

2025-11-10 17:11:21

在 Vivado 中,前仿真通过而后仿真失败,并报错 u_e203top_soc 未声明,通常由以下原因引起。以下是详细分析和解决方案:




根本原因分析




  1. 网表文件未正确加载

    后仿真需要综合/实现后的 网表文件(如 .v/.vhd)和 时序文件.sdf)。如果网表未加载或路径错误,仿真器无法识别设计中的实例 u_e203top_soc




  2. 设计层次结构变化


    综合/实现过程可能优化或重命名了模块(如 e203top_soc),导致测试平台(tb_top)中引用的 u_e203top_soc 实例名失效。




  3. 仿真设置问题


    Vivado 后仿真未自动关联网表文件,或手动仿真时未指定正确的网表路径。




  4. SDF 反标失败


    虽然 SDF 错误通常报时序违例,但若 SDF 加载路径错误,可能间接导致模块未找到。






解决方案


步骤 1:确认网表文件正确生成



  • 检查 Vivado 工程目录:  
    //impl_1/*_netlist.v     # 网表文件
    //impl_1/*_time_sim.sdf  # 时序文件

  • 若文件缺失,重新运行 综合(Synthesis)实现(Implementation)




步骤 2:修正测试平台(tb_top)




  • 检查实例化名称

    打开综合后的网表文件(*_netlist.v),搜索 e203top_soc 的实例名。若名称被优化(如改为 u_e203top_soc_int),需同步更新 tb_top


    // 修改前
    e203top_soc u_e203top_soc (...);

    // 修改后(根据网表中的实际名称)
    e203top_soc u_e203top_soc_int (...);



  • 显式绑定网表(推荐):

    tb_top 中直接调用网表模块,而非 RTL 源码:


    // 替换 RTL 模块
    // `include "e203top_soc.v"`

    // 改为调用网表模块
    `include "/impl_1/e203top_soc_netlist.v"





步骤 3:配置 Vivado 后仿真设置



  1. 在 Vivado 中:

    Flow Navigator → SIMULATION → Run Simulation → Post-Implementation Timing Simulation

  2. 确保在仿真属性中正确关联网表和 SDF:

    • 右键点击仿真设置 → Simulation

    • Compilation 选项卡中,确认网表文件已包含。

    • SDF Options 中添加 SDF 文件路径:
      SDF File: /impl_1/e203top_soc_time_sim.sdf
      Scope: tb_top.u_e203top_soc  # 指定反标到哪个实例





步骤 4:手动仿真时指定网表路径


若使用第三方工具(如 ModelSim):


# 示例:ModelSim 脚本
vlog /impl_1/*_netlist.v  # 加载网表
vlog tb_top.v                   # 加载测试平台
vsim -sdfmax /u_e203top_soc=/impl_1/*_time_sim.sdf tb_top



步骤 5:检查设计保留策略


若综合优化删除了 u_e203top_soc



  • 在 Vivado 综合设置中启用 保留层次结构

    Settings → Synthesis → Options → Flatten Hierarchy 设为 none

  • 或添加 (* keep_hierarchy = "yes" *) 约束:
    (* keep_hierarchy = "yes" *)
    module e203top_soc (...);




验证流程



  1. 重新综合并实现设计。

  2. 运行后仿真,观察是否仍有 undeclared 错误。

  3. 若报错持续,打开网表文件搜索 u_e203top_soc,确认实例是否存在。


通过以上步骤,90% 的后仿真未声明错误可被解决。核心在于确保 网表正确加载实例名称匹配

举报

更多回帖

发帖
×
20
完善资料,
赚取积分