小梅哥和你一起深入学习FPGA之初学者指南

2016年04月13日 21:20    发布者:小梅哥
感谢论坛给我的诸多照顾,通过和广大电子爱好者深入交流,我真正了解到了很多初学者的困惑。特权同学的深入浅出玩转FPGA系列教程确实不错,想当初,我也是靠着他的视频教程入门的。跟着特权同学的教程,我们能够很快学会QuartusII软件的使用,也能够做一些简单的实验。但是跟着他的教程走了大半年,后来又跟着黑金的教程走了大半年,还有CrazyBingo的VIP教程。感觉他们都很厉害,能够做出那么优秀的设计,可是自己却一直不得要领,出了问题就是找不到原因,不知道怎么去解决。直到我在业界几位大师的带领下系统的学习了一段时间后,我才真正的能够自己进行独立的FPGA系统设计。总结我这一年半时间的FPGA学习经历,有以下心得:一、正确的设计方法尤为重要    很多初学者,包括绝大多数的高校EDA课程,都没有教给学生正确的设计方法,可以这么说,很多高校的授课老师对这门技术的掌握也是连入门的要求都没达到,他们要么干脆不知道要仿真,要么就用Quartus II自带的绘制波形的仿真软件进行简单的测试,很少有老师教学生怎么去进行系统的仿真,更少有老师教学生进行testbench的编写。前天接触一个进行EDA教学的老师,课程实验要求里面说了要进行仿真,但是他不要求学生仿真,究其原因,他自己说的是因为他自己不会写testbench。每天在各大论坛,有那么多的学生在网上咨询着一些入门级的问题,让我们不得不嗟叹,很多大学的课程教学,是很失败的。我以前自学FPGA的时候,也觉得testbench的编写特别的难,想跟人学,却没有人教。导致一直止步不前,对自己所写的代码,执行时会是怎么样一个效果,心里完全没有一个清晰的概念。即那时候的学习,还只停留在代码层,完全没有理解FPGA的工作实质。只是看着别人这么写能行,我也就这么写了。当后来学会了仿真之后,突然一下子就全部理解了,知道了自己的每一行代码生成的电路在执行的时候会是什么情况,知道了FPGA时序设计的本质,知道了怎么通过仿真结果去修改和优化自己的设计。因此,这里我主要就是想说,FPGA设计并不难,只要学习者掌握了正确的学习方法。二、学习参考很重要    在开始学习的过程中,总会遇到各种各样的困难:软件使用不熟练、语法不熟练、基本原理不熟练等等,都会严重打击初学者的积极性。那么针对这三个问题,小梅哥的建议则是:软件不熟练,就跟着视频教程一步一步走,Altera官网有一套视频教程,这些教程由官方出品,具有极高的参考价值,另外,目前网上很多FPGA爱好者也出了有视频教程,如果只是想单纯的学习软件的使用,跟着这些视频教程来走是非常适合的;语法不熟练,就需要去看书了,目前讲verilog语法的书满天飞,但是实际又有多大的价值呢。个人认为,夏宇闻老师的经典教材《Verilog数字设计教程》绝对是一本好书。这本书将Verilog语法的精髓讲的淋漓尽致,对于可综合语法和不可综合语法都很看重,这是其他教材所无法达到的。虽然做FPGA设计,代码必须能够是可综合的,这样才能生成有意义的电路,才能被下载到FPGA芯片中去执行。因此,绝大部分教材就只讲了可综合的设计语法,对于不可综合的语法,只是简单的一带而过,这其实是非常错误的观点。正确的FPGA设计流程,应该是在开发环境中仿真无误后才进行板级验证,而在仿真的过程中,要想使仿真结果能够全面可靠,不可综合的语法运用相当重要。只有运用好了这些语法,我们才能够编写出好的测试文件,对我们的设计进行全面的测试。因此,那些认为不可综合语法不重要的人,大部分对于仿真测试这一块没有深刻的认识。因此,他们也就无法进行很多创新设计和复杂的系统设计。对于连基本电路原理都不熟悉的人,小梅哥就感觉有点无能为力了,只能希望你自己能够多多在网上查阅资料,将基本原理弄清楚。小梅哥从小学六年级拆开自己一台崭新的复读机,接触花花绿绿的电路板开始,到如今,也已经有了十多个年头,这十年,小梅哥无时不刻不在被电子技术的强大魅力所吸引,义无反顾的投入到电子技术的学习中。电子技术的学习,需要激情,需要耐力。给初学者的学习建议:
[*]最开始不要急于求成,一定要掌握正确的设计流程和设计方法,这里应该强烈要求大家使用modelsim-Altera软件对我们的编写代码进行仿真,而不是简单的“代码编写》编译》下板测试》修改代码”的方式,正确的方式应该为“代码编写》功能仿真调试》编译》门级仿真》下板测试”。仿真第一可以节约时间,第二可以让我们对FPGA内部的信号工作时序有非常清晰的认识,使我们能以最快的速度掌握FPGA的设计思想,第三可以培养自主设计能力;
[*]初学者,可能需要花费半个月左右的时间,每天写代码,甚至是抄代码,来熟悉语法。在这个过程中,一定会遇到各种各样的问题,大家肯定会遇到语法错误、符号错误、设计错误。即使没有错误,代码写好后也无法实现预期的效果,此时,最简单有效的方式就是在论坛提问,相信论坛上会有很多高手在这里。小梅哥实在不算是高手,但是我作为版主,也会天天在论坛里回答各种提问。
[*]依葫芦画瓢,这个过程大家可以对着我们开发板提供的教程和代码,依葫芦画瓢,来了解各种外设的驱动原理。我们的开发板所提供的代码都是只是简单的提供了对外设的功能验证,也是为了使初学者能够尽快的掌握。因此,当各位学习有一定感悟后,就可以开始着手自己修改、优化我们的代码,甚至重新编写属于你自己的代码;
[*]创新设计,此时,大家可以寻找手边现有的器件,如各种接口的ADC,传感器,来使用FPGA编写驱动,实现功能。当这一步完成后,大家就基本步入了FPGA开发的大门。此时,也就达到了FPGA初学者的水平。
建议的FPGA学习实验顺序:基本外设:
[*]按键
[*]数码管
[*]蜂鸣器
时序器件:
[*]ADC(TLC549)
[*]DAC(TLC5620)
[*]PS2键盘
[*]UART串口
[*]IIC(AT24C64)
[*]SPI协议
存储器IP的使用:
[*]       FIFO
[*]       RAM
[*]       ROM
[*]……

综合实验,将上面的一些外设,采用自顶向下的结构,设计一些综合实验,来实现自己的创意。以上为FPGA初级班课程的学生需要达到的要求。更多资料请大家随时关注论坛FPGA板块中的资料更新。
如有任何疑问,欢迎加入芯航线FPGA学习支持群(472607506)进行讨论