FPGA的仿真分类
发布时间:2026/8/15 11:25:06 作者:尧图编辑部 阅读量:1,286

摘要本文系统介绍了 FPGA 仿真的三大分类功能仿真、综合后仿真和时序仿真。详细阐述了各类仿真的定义、执行时机、延迟信息、核心目的、工程现状及 Quartus 中的操作方法并提供了时序仿真的三种分析方法。适合 FPGA 初学者和需要系统了解仿真分类的开发者阅读。一、引言目录一、引言二、FPGA 仿真的三大分类2.1 功能仿真前仿真 / RTL 仿真2.1.1 定义与执行时机2.1.2 延迟信息2.1.3 核心目的2.1.4 工程现状2.1.5 Quartus 中的启动方式2.1.6 关于功能仿真界定标准的特别说明2.2 综合后仿真门级仿真 / 网表仿真2.2.1 定义与执行时机2.2.2 延迟信息2.2.3 核心目的2.2.4 工程现状2.2.5 Quartus 中的启动方式2.3 时序仿真后仿真 / 布局布线后仿真2.3.1 定义与执行时机2.3.2 延迟信息2.3.3 核心目的2.3.4 前置条件2.3.5 Quartus 中的分析方法方法一ModelSim 波形观察方法二TimeQuest 时序分析器推荐方法三前后仿波形对比作为 FPGA 初学者在使用 ModelSim-Altera 进行入门项目时很容易遇到各种问题。仿真可以在一定程度上规避上板后出现的问题。仿真主要有两个作用一是在确定没有 Verilog 语法错误之后进行时序逻辑功能上的排错和验证二是在没有板子的条件下观看波形效果图。本文主要介绍使用 ModelSim-Altera 进行仿真的分类基础知识。二、FPGA 仿真的三大分类2.1 功能仿真前仿真 / RTL 仿真2.1.1 定义与执行时机定义功能仿真是指对设计代码进行的逻辑功能验证仿真。执行时机在 Quartus 软件语境下综合Synthesis之后、布局布线Place Route之前对综合后的网表进行仿真但强制忽略延迟信息。在通用教材语境下综合之前对 RTL 源码进行仿真。仿真对象Quartus 语境综合后的门级网表但延迟被清零。教材语境RTL 源码.v文件。2.1.2 延迟信息不包含任何延迟信息理想 0 延迟模型因此功能仿真也称为理想仿真。无论是针对 RTL 源码还是综合后网表仿真器都会忽略或强制清零所有门延迟和布线延迟。2.1.3 核心目的验证设计模块的逻辑功能是否正确。常见验证内容计数器能否按预期计数。状态机跳转是否正常。组合逻辑输出是否符合真值表。按键消抖逻辑是否产生正确的脉冲。2.1.4 工程现状功能仿真是 FPGA 开发中频率最高、最常用的仿真类型。90% 以上的 Bug 应在此阶段发现并修复。建议每写完一个模块就立即编写对应的 Testbench 进行功能仿真避免问题累积到后期难以定位。2.1.5 Quartus 中的启动方式菜单路径Tools→Run Simulation Tool→RTL Simulation或Tools→Run Simulation Tool→Gate Level Simulation此时仍属于功能仿真范畴因为尚未加载 SDF 时序信息ModelSim 自动拉起加载对应仿真对象并运行。2.1.6 关于功能仿真界定标准的特别说明在通用数字电路教材中功能仿真特指综合前的 RTL 仿真但在 Quartus II 软件中功能仿真Functional Simulation指的是不包含任何时序信息SDF的仿真其目的仅为验证逻辑功能。因此当题目描述为对综合后的网表进行仿真但不带布局布线后的时序信息时在 Quartus 语境下的正确答案是功能仿真而在通用教材语境下则对应综合后仿真门级仿真。考试时请以题目所在语境为准。简单总结功能仿真这个名词在 Quartus 里是按目的命名的看功能、不要时序在教材里是按对象命名的看 RTL。两种说法都对关键看语境。2.2 综合后仿真门级仿真 / 网表仿真2.2.1 定义与执行时机定义综合后仿真是指对综合工具生成的门级网表进行的仿真。执行时机综合Synthesis之后布局布线Place Route之前。仿真对象综合后的.vqm或.vo网表文件 器件库模型。2.2.2 延迟信息仅包含门延迟Cell Delay不包含布线延迟。原因此时尚未进行布局布线信号在芯片内部的物理走线路径未知因此无法计算线延迟。2.2.3 核心目的验证综合器是否将 RTL 代码正确地翻译成了门级电路。检查综合过程中是否存在语法误译或优化错误。2.2.4 工程现状现代综合工具如 Quartus 的quartus_map成熟度极高综合后仿真已逐渐被省略。仅在怀疑综合器存在 Bug、或使用第三方综合工具时才需要主动执行。2.2.5 Quartus 中的启动方式菜单路径Tools→Run Simulation Tool→Gate Level SimulationQuartus 会自动生成网表文件并拉起 ModelSim 加载。2.3 时序仿真后仿真 / 布局布线后仿真2.3.1 定义与执行时机定义时序仿真是指对布局布线后的网表结合SDF 延迟文件进行的仿真。执行时机布局布线Place Route完成之后。仿真对象布局布线后的网表.vo或.vho SDF 延迟文件.sdo。2.3.2 延迟信息包含完整的物理延迟信息门延迟Cell Delay逻辑门本身的响应时间。布线延迟Wire Delay信号在芯片内部金属线上传输的延迟。SDF 文件由布局布线工具Fitter生成包含了芯片内部真实的物理参数。2.3.3 核心目的验证设计在实际芯片上能否稳定工作在目标时钟频率。重点检查建立时间Setup Time数据在时钟沿到来前必须保持稳定的时间。保持时间Hold Time数据在时钟沿到来后必须保持稳定的时间。如果时序违例需要通过修改代码或增加时序约束来解决。在软件中一般查看Slow 1200mV 85C Model和Fast 1200mV 0C Model来看是否出现建立违规和保持违规slack(裕量 0才合格 ) TNS(负裕量总和 0 才合格)一般的解决方法就是写sdc文件下面是参照格式set_input_delay -max 2.0 -clock clk [get_ports r*]set_input_delay -min -1.0 -clock clk [get_ports r*]set_output_delay -max 2.0 -clock clk [get_ports k*]set_output_delay -min -1.0 -clock clk [get_ports k*]2.3.4 前置条件必须先完成全编译Start Compilation确保 Fitter 步骤已跑完。必须正确分配引脚约束和时钟约束否则 SDF 文件中的延迟数据无效。2.3.5 Quartus 中的分析方法时序仿真的核心是验证设计在实际芯片上能否稳定工作常用以下三种分析方法方法一ModelSim 波形观察放大波形检查时钟边沿与数据变化之间的时间关系。若数据变化紧贴时钟边沿或出现毛刺说明可能存在时序违例。方法二TimeQuest 时序分析器推荐打开Tools→Timing Analyzer生成时序网表读取 SDC 约束文件查看Setup Summary和Hold Summary报告精确定位违例路径方法三前后仿波形对比对比功能仿真前仿与时序仿真后仿波形前仿边沿陡峭后仿边沿变缓含物理延迟若后仿出现前仿没有的毛刺或错误跳变说明存在竞争冒险需优化逻辑