FPGA调试本身就是挺辛苦的一件事情,尤其是在刚开始调试FPGA的时候,无论培训的时候如何强调一些注意事项,如跨时钟域问题,如接口问题,以及RAM读写冲突问题,但一旦做起项目来,每每还是有同学必须要亲自往这些坑里面跳一次才真正懂得这些BUG的含义。如双口RAM在功能仿真时没有出现问题,但上板调试过程中运行很久才偶尔出现一次BUG,这时就需要花费大量的时间去追溯问题的源头,最后花一周甚至更长的时间才能找到是双口RAM读写冲突的问题,时间早早的就浪费掉了。事实上,上面说跨时钟域或者双口RAM读写冲突的这些问题是可以通过时序仿真仿真出来的。
FPGA验证在芯片设计流程中具有重要的作用,有时候为了找到某些BUG,不得不对FPGA综合出来的网表进行后仿真。后仿真又叫时序仿真,跟课程前面介绍的对写出来的Verilog hdl设计代码和testbench代码建工程进行的功能仿真不同,时序仿真是把综合出来电路中的时延信息加入到仿真的过程中,模拟出跟更接近于在FPGA上真实运行的情况。本文以Quartus II软件为例进行介绍后仿真的步骤和流程。ISE或VIVADO流程类似或关联ModelSim后更自动化。
什么是功能仿真?什么是时序仿真
仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行; 时序仿真是在逻辑综合后或布局布线后进行。
1. 功能仿真 ( 前仿真 )
功能仿真是指在一个设计中, 在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。 布局布线以前的仿真都称作功能仿真, 它包括综合前仿真( Pre-Synthesis Simulation )和综合后仿真( Post-Synthesis Simulation )。 综合前仿真主要针对原理框图的设计 ; 综合后仿真既适合原理图设计 , 也适合基于 HDL 语言的设计。
2. 时序仿真(后仿真)
时序仿真使用布局布线后器件给出的模块和连线的延时信息, 在最坏的情况下对电路的行为作出实际地估价。 时序仿真使用的仿真器和功能仿真使用的仿真器是相同的, 所需的流程和激励也是相同的; 惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时, 并且在仿真结果波形图中,时序仿真后的信号加载了时延, 而功能仿真没有。
一、用Quartus II建立工程。
具体过程可参考如下链接:
https://jingyan.baidu.com/article/cbcede07ef59cf02f40b4ddb.html。建立工程后的文件如下图所示。我们以一个简单的8位计数器为例进行说明。
建立工程的过程中可以配置好综合之后要产生用来做后仿真的网表文件,如果没有提前配置,也可以建好工程后再配置,具体如下图,点击右键,选择settings.
settings打开后出来如下窗口,在左侧选择Simulation,在右侧EDA Netlist Writer settings里面选择门级网表产生的语言以及路径,之后确定即可。
如下图,点击编译按钮,开始进行综合。
综合后的界面如下。