学习FPGA其实也不算久,开始的时候参考别人的代码并不多,大多是自己写的,那时候做时序逻辑多一些。参加了中嵌的培训班,一个多月的时间在熟悉ISE软件的使用以及 verilog 语法方面下了苦功,也参考了不少书,算是为自己打下了比较好的基础。因为那时候培训的方向是软件无线电方面的,所以做了很多有关的模块程序,之前的日志里也发表了很多,关键是一个兴趣,感觉仿真后看到自己的一个个算法思想得到实现真有成就感。后来停了一段时间,因为实在没有比较有意思的活干了。
直到前段时间开始使用SP306的开发板,然后会参考它们的代码,受益匪浅吧。现在组长已经给正活干了,跟的大项目我是基本都有所熟悉了,然后那个里面做总控的FPGA的代码开始进行总攻了,要把前辈们的代码都消化了,然后更好的为下一代升级版的产品服务。这个看verilog程序估计是大家都比较头疼的事,小的模块都没问题,大模块大项目,有时候就比较难以入手了,因为HDL的设计是不同于软件编程的,软件其实无非一个大while或者再有一些中断,大多是顺序执行的,慢慢一步一步往下走总会弄明白。HDL的并行性很强,要是你按照软件的思路来那肯定行不通,那么该怎么办呢?我就班门弄斧说点自己的一点快速进阶的小窍门吧。
既然HDL设计是并行的,那么就只能各个击破了。我的习惯是先抓几个重要端口,比如 时钟 (CLK)、复位(RESET)等出现频率比较高的端口,把它先弄清楚,比如时钟是什么频率的?复位是高有效还是低有效?
然后呢,最好是对照原理图来理解程序。这就需要你有一定功底的硬件常识了,一些常用器件的操作时序什么的一定要做到心中有数,至少要知其一二吧,这样在读程序时才会达到事半功倍的效果。比例说你要先读懂FPGA与AD芯片的程序,那么你先把AD的各个端口(如片选,读写,转换,转换完成中断等端口)在verilog程序中出现的地方多做一下分析,比如我找CS信号,看看什么时候它拉低有效,那么你可以在Find in file窗口中输入CS,然后EN TE R,这样ISE就会在底层的信息窗口中罗列出所有使用了CS信号的语句方便你的查找分析,你把每个出现CS的地方分析到了,那么你就明白verilog在硬件上是如何操作CS信号的。所有信号多分析完以后,我想你就明白了这个AD与FPGA的接口了。
读懂verilog有时比较累,因为程序是别人写的,你要让别人牵着鼻子走也是难免的。关键是要有耐心,多分析,有条件可以问问高手(最好是代码的作者)。