当前位置: 首页 > news >正文

Vivado 五种仿真类型的区别

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 源码否 (理想模型)干净,对齐时钟边沿最快
综合后功能综合后门级网表功能同上较快
综合后时序综合后门级网表是 (仅单元延迟)出现延迟和毛刺较慢
实现后功能实现后最终网表功能同上
实现后时序实现后最终网表是 (精确的单元+布线延迟)延迟最长,最接近真实硬件最慢

所以,随着流程的深入,仿真会越来越慢,但波形会告诉你越来越多关于物理世界的“残酷”真相。

http://www.lryc.cn/news/576259.html

相关文章:

  • Javaweb - 6 BOM 编程 和 DOM 编程
  • python打卡day56
  • VUE使用过程中的碰到问题记录
  • 【深度学习新浪潮】MoE技术入门(简要版)
  • Linux基本指令篇 —— tac指令
  • Apache Kafka 面试应答指南
  • 黑马JVM解析笔记(五):深入理解Java字节码执行机制
  • python训练day43 复习日
  • 10【认识文件系统】
  • 基于springboot的火锅店点餐系统
  • 遥感图像语义分割1-安装mmsegmentation
  • 人工智能-基础篇-2-什么是机器学习?(ML,监督学习,半监督学习,零监督学习,强化学习,深度学习,机器学习步骤等)
  • Python Selenium 滚动到特定元素
  • .NET MAUI跨平台串口通讯方案
  • 【github】从本地更新仓库里的文件笔记
  • C++基础:动态内存分配、输入输出与命名空间详解
  • 如何构建个人AIagent
  • 命名数据网络 | 签名(Signature)
  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • 杭州西湖断桥不断:3D扫描还原‘残雪‘视觉骗局
  • 从0到100:房产中介小程序开发笔记(中)
  • 为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半
  • 详解HashMap底层原理
  • 三、java项目自动部署流水线搭建
  • Java--数组
  • 如何使用免费软件写论文?六个免费论文生成软件使用指南
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • Class2基础优化算法
  • 悦己汉服体验馆小程序(协同过滤算法、WebSocket即时聊天)
  • 优化 ArcPy 脚本性能