Vivado 五种仿真类型的区别
我们还是用“建房子”的例子来类比。您已经有了“建筑蓝图”(HLS 生成的 RTL 代码),现在要把它建成真正的房子(FPGA 电路)。这五种仿真就是在这个过程中不同阶段的“质量检查”。
1. 行为仿真 (Run Behavioral Simulation)
- 这是什么? 这是我们之前一直在进行的仿真。它直接在您的 Verilog/VHDL 源代码(建筑蓝图)上运行。
- 检查什么? 只检查逻辑功能是否正确。它假设信号传输是瞬时的,没有任何延迟。
- 好比是? 在电脑上对您的建筑蓝图进行 3D 漫游。您可以检查房间布局对不对,门开的方向对不对,但您无法知道水管里的水流需要多久才能到水龙头。
- 波形特点:非常“干净”,信号变化都严格对齐在时钟边沿,没有任何毛刺和延迟。
2. 综合后功能仿真 (Run Post-Synthesis Functional Simulation)
- 这是什么? 在 Vivado 综合(将蓝图翻译成材料清单)之后,对生成的门级网表进行仿真。
- 检查什么? 检查综合工具是否忠实地将您的蓝图转换成了正确的逻辑门组合。它依然不考虑延迟,只关心逻辑功能。
- 好比是? 检查施工队的“材料清单”和“连接说明”是否和设计师的原始蓝图在功能上完全等价。例如,蓝图上是承重墙,清单里不能是普通石膏板。
- 波形特点:理论上,波形的功能表现应该和行为仿真完全一样。如果不一样,说明综合工具可能出了问题(虽然这种情况很少见)。
3. 综合后时序仿真 (Run Post-Synthesis Timing Simulation)
- 这是什么? 同样在综合后的网表上运行,但这次加入了时序信息。
- 检查什么? 开始考虑物理延迟。它会根据逻辑门本身的固有延迟(例如一个 LUT 从输入变化到输出变化需要的时间)来仿真。但它不知道信号线有多长,所以线延迟是估算的。
- 好比是? 开始考虑物理定律。您知道开水龙头到水出来需要时间,但因为还不知道水管要铺多长,所以只能估算一个大概的延迟。
- 波形特点:波形会开始“错位”!您会看到信号的跳变不再严格对齐时钟边沿,而是会延迟一小段时间。可能会出现毛刺 (glitch)。
4. 实现后功能仿真 (Run Post-Implementation Functional Simulation)
- 这是什么? 在 Vivado 完成布局布线(把所有材料在 FPGA 这块地皮上摆好位置并用电线连起来)之后,对最终的网表进行仿真。
- 检查什么? 再次验证布局布线过程没有改变原始的逻辑功能。这个步骤和“综合后功能仿真”类似,通常可以跳过。
- 好比是? 房子盖好后,再检查一遍功能对不对。
- 波形特点:功能上应与行为仿真一致。
5. 实现后时序仿真 (Run Post-Implementation Timing Simulation)
- 这是什么? 最重要、最精确、最接近真实硬件行为的仿真。
- 检查什么? 在最终的、物理布局布线完成的网表上,加入最精确的单元延迟和布线延迟信息。它能最准确地反映您的设计在真实 FPGA 芯片上运行时的情况。
- 好比是? 竣工验收! 打开真实的水龙头,用秒表掐时间,看水到底几秒钟能流出来。所有时序问题(Setup/Hold violations)在这里都将暴露无遗。
- 波形特点:最“不理想”但最“真实”的波形。信号延迟最长,能精确反映出您的设计是否满足时序要求。
总结对比
仿真类型 | 阶段 | 仿真对象 | 是否考虑时序 | 波形特点 | 速度 |
---|---|---|---|---|---|
行为仿真 | 设计阶段 | RTL 源码 | 否 (理想模型) | 干净,对齐时钟边沿 | 最快 |
综合后功能 | 综合后 | 门级网表 | 否 | 功能同上 | 较快 |
综合后时序 | 综合后 | 门级网表 | 是 (仅单元延迟) | 出现延迟和毛刺 | 较慢 |
实现后功能 | 实现后 | 最终网表 | 否 | 功能同上 | 慢 |
实现后时序 | 实现后 | 最终网表 | 是 (精确的单元+布线延迟) | 延迟最长,最接近真实硬件 | 最慢 |
所以,随着流程的深入,仿真会越来越慢,但波形会告诉你越来越多关于物理世界的“残酷”真相。