在进行FPGA工程开发中,我们都会接触到仿真这个环节。笔者在之前就粗略的提及过FPGA开发一定要仿真,要养成仿真的习惯。
很多初学者或者学艺不精的工程师都比较排斥仿真。当然,如果您也排斥仿真,那么您就要扪心自问一下自己是属于初学者还是学艺不精的工程师。
很多初学者入门FPGA的时候所学习的编程例子都是很简单的,比如流水灯、数码管点亮之类的。这种入门级别的例子有个特点,代码量少,逻辑简单,分析容易。而且大家刚开始都是照着书本抄一遍的,基本上都是没有什么问题的。一上板子就发现效果出来了。
当然,初学者也会进行一些仿真,但是也仅仅是因为书籍有提及到这样一个功能,然后就尝试一下这个功能。久而久之很多人厌倦了仿真,觉得仿真很浪费时间,他们往往更倾向于直接烧录到板子上,然后观察效果,最后调试代码。
突然有一天,初学者发现了FPGA开发工具中有个虚拟逻辑分析仪,以Xilinx 公司为例,初学者发现了ChipScope这个工具。这个工具可以直接在板子上捕捉内部寄存器值。很多初学者觉得可以用这个软件完全取代仿真。
笔者想先从哲学的角度来分析一下。一个技术没有被淘汰,证明它是市场公认的,不可取代的。遥想当年的BB机,一下子就被淘汰了,因为已经有了可以取代它的产品出现了。FPGA的仿真是一个大方向,甚至有很多第三方的仿真软件。为什么这些软件没有被淘汰,这就说明了还没有哪项技术可以取代仿真这个环节,如果真的有,就不会有仿真软件了。
为什么需要仿真?仿真有什么优势?
仿真可以让设计者能够很快知道模块输出值是否正确。说到这,就有读者想问,直接上板子不是更快吗?如果你以后的工作都是用FPGA来跑流水灯,点数码管的话,那么直接上板子确实是比较快。但是笔者相信,不会有哪个公司要求你用FPGA仅仅是跑个流水灯的。如果设计者遇到稍微复杂一点的工程,注意笔者说的是稍微复杂一点,还不是很复杂。那么当您完成一次综合、布局布线、生成bit文件的时间超过半个小时是很正常的。当你发现效果不对,又返回来打算用个ChipScope插入寄存器查看怀疑对象,那么问题来了,你打算用ChipScope查看多少个寄存器值呢?ChipScope是利用FPGA内部资源来存储数据达到捕捉的功能,加入过大的ChipScope会使得布局布线更为困难,时间会更久。再者ChipScope存储量是有限的,不可能从时间0开始一直存储下去。存满了,下次再来就刷新了。从上面看开,如果不仿真,单纯的用ChipScope进行捕捉,每综合一次消耗大量的时间,再者ChipScope能观察到的信号有限,以及功能单一。这样一个流程下来,也许一天也未必能找到问题的所在,更别说处理问题了。
如果换成仿真,你可以添加大量的观察信号,可以从时间0开始就得到数据,对于稍微复杂的工程,不用跑半个小时的仿真已经可以出很多数据了,足够开发者逐步分析了。
可能初学者在笔者的再三强调下还是不喜欢仿真。笔者也只是希望大家不要走太多弯路,纵观现在网上FPGA论坛或者是交流社区,大家更多讨论的是我这里有个项目,我这里出了个问题,我这里这个不知道应该怎么处理。很多书籍也是,直接告诉大家怎么建工程,举例一些代码什么的,甚至有些书籍只是翻译FPGA厂家手册而已。笔者并不是说哪些书籍不好,哪些论坛不好,大家还是要多读书,多交流。只是在FPGA的学习上,有很多东西被大家忽略的,人们忽略的不是技术,而是思想。没有一个正确的思想,怎么能做好一件事呢。
最后,让我们从今天开始,打开软件,开始仿真!