在 Vivado 中,前仿真通过而后仿真失败,并报错 u_e203top_soc 未声明,通常由以下原因引起。以下是详细分析和解决方案:
网表文件未正确加载
后仿真需要综合/实现后的 网表文件(如 .v/.vhd)和 时序文件(.sdf)。如果网表未加载或路径错误,仿真器无法识别设计中的实例 u_e203top_soc。
设计层次结构变化
综合/实现过程可能优化或重命名了模块(如 e203top_soc),导致测试平台(tb_top)中引用的 u_e203top_soc 实例名失效。
仿真设置问题
Vivado 后仿真未自动关联网表文件,或手动仿真时未指定正确的网表路径。
SDF 反标失败
虽然 SDF 错误通常报时序违例,但若 SDF 加载路径错误,可能间接导致模块未找到。
//impl_1/*_netlist.v # 网表文件
//impl_1/*_time_sim.sdf # 时序文件 检查实例化名称:
打开综合后的网表文件(*_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" SDF File: /impl_1/e203top_soc_time_sim.sdf
Scope: tb_top.u_e203top_soc # 指定反标到哪个实例 若使用第三方工具(如 ModelSim):
# 示例:ModelSim 脚本
vlog /impl_1/*_netlist.v # 加载网表
vlog tb_top.v # 加载测试平台
vsim -sdfmax /u_e203top_soc=/impl_1/*_time_sim.sdf tb_top 若综合优化删除了 u_e203top_soc:
none。(* keep_hierarchy = "yes" *) 约束:(* keep_hierarchy = "yes" *)
module e203top_soc (...);undeclared 错误。u_e203top_soc,确认实例是否存在。通过以上步骤,90% 的后仿真未声明错误可被解决。核心在于确保 网表正确加载 和 实例名称匹配。
举报
更多回帖