当前位置: 首页 > 编程学习 > 其它语言 > Verilog > 正文

FPGA学习之路:一路走来

2018-04-23 来源:博客园/NingHeChuan

既然选择了远方,便不顾风雨兼程,一路走下去。  —韩彬

在看bingo的书时,看到这样写到。做什么事情都不容易,学习也是,所以一个词很重要不忘初心。作为一名大二的学生,我很高兴能够将自己学习FPGA的过程记录下来,一是方便自己以后回头看的时候能够有所感触,而是想分享自己初学入门是的一些经验给予初学者,能尽量少走弯路。

我是大一暑假开始学习FPGA的,我是微电子专业,学校大三才开数电,大一的时候受老师推荐进了一个实验室,但是没有好好珍惜机会。最后便不退自出。大二学校FPGA创新实验室纳新,我非常想加入所以利用暑假的时间来学习。刚开始学习的时候没有一上来就摸代码,而是先从数电书开始看起,这是我第一次自学一门课,对着数电电子书看没感觉,后来就看ppt,遇到很多第一次接触的概念,但是没有办法没人去问,只能自己硬着头皮硬啃下来,现在回想起来真是非常感谢自己当时能静心去学,在刚开学那么忙的时候能顺利进去实验室去学习。附上数电电子书、ppt以及Verilog基本语法链接链接:http://pan.baidu.com/s/1dFywrpZ 密码:hh1f。

数电PPT和数电书要对应着看PPT上哪里看不懂了就看书上的详解,实在不行就百度,如果是自己自学的话这个过程是很慢的,所以在学校有老师教,这样的学习时间是很宝贵的,去外面学也不是不可,确实花了钱还是能学到东西的。但是我还是选择自学,毕竟囊中羞涩。基本上数电看上俩章的内容后你就会对组合逻辑有简单的理解,然后就可以看Verilog HDL语法了,我博客里有写赛思灵公司的开发工具ISE14.7安装包以及安装教程,使用详解。ISE使用方便适合着,主要是因为仿真激励不用自己写。只要有C语言编程基础,看一些简单的Verilog语法就可以上手操作编译了。

一路走来,在实验室里做了一些小任务,碰到一些我以为不可解决的难题,最后也都慢慢化解。所以就将自己大一上学期的一些心得体会总结出来,未来的学习之路会更加坎坷曲折,愿我能不忘初心。

心得与体会

1.FPGA设计思想。记得该开始学习FPGA的时候,总是以读完题目就开始写代码,只是刚开始的工程比较小,只需要一两个always块,输入输出一写,基本也能写出来。但是随着工程逐渐变大,这样一拿到题目就直接敲代码的方法就难免有很多弊端。比如我在编写多功能数字表的时候想加入闹钟,时钟,秒表的功能,但是一上来就敲代码,最后写完了时钟的功能后发现闹钟秒表加进去很麻烦,最后费了很大的力气加进去但是加了一个有十二个输入的模块,这样从布线上讲太繁琐,从利用资源上讲浪费资源,总的来说是没有一个好的的设计思想。

首先在创建工程之前应该至少画出它的原理图,每个模块想要起什么作用在刚开始设计的时候就应该要考虑到,更细致的话画出它的模块内部连线图,各个always块之间的相互作用要理清楚。然后再照图施工,中间的细节再经过后期编译过程中的在调节修改。

2.模块化设计。模块化设计在编译的过程中可以提供很多便利。比如串口通信发送模块和接受模块我前面写过,那我在编译发送接收模块的时候就可以直接把整个.v文件拿来用,还有时钟消抖,led流水灯等。另一个便利就是在做比较的工程中避免一个module太大,修改查看代码不方便等,从原理图(RTL)上看起来也简单明了。

我在学习过程中还发现了身边同学有一点,他们在使用模块化设计分过多模块。串口通信发送工程,将分频波特率分出来,将发送接收计数器也分了出来。我认为没有必要分出来很多模块,波特率分频器可以分出来但发送接收计数器是没必要的。模块太多有时候例化连线时也会造成不便。所以我还戏称说咱这不能叫模块化设计了,应该叫always块化设计。

3.代码书写、命名规范、注释。我觉得这一点也是是十分重要的,比如在使用模块化设计想要将以前的代码拿来复用,但是你的名字起得五花八门,有时候时间长了自己也不知道写的是啥。代码书写也应该要有规范,比如begin end 要成对的打不会丢,多用复制粘贴可以减少书写错误等。对于一些比较难理解的地方应当表明注释,这样自己在阅读和修改的时候很方便,别人看的时候也会比较容易明白。隔一段时间回去看自己的代码也不至于会忘了自己写的意思。总结来说要打得一手漂亮的代码。

4.学会利用软件小技巧,仿真,编写激励技巧以及观察仿真波形图。以前没有仔细看仿真图的习惯,现在工程大了之后发现看仿真图真的可是省去好多时间。看着波形图去推代码满足条件,这样比直接下板子会节省好多时间。我在仿真串口通信接受模块时,将发送模块和接收块例化一起然后仿真,这样就避免了直接仿真接收模块时激励编写的麻烦,很多人这样做的时候会感到麻烦,我可以直接用我以前写的模块.v文件复制过来,很方便,这就体现了代码书写规范和模块化设计复用的优点。光针对串口通信而言,巧妙的利用他里面的一些信号,会十分方便,忙信号、发送结束信号等等,合理分配资源,最后事半功倍。

5.多讨论,请教他人。自己一个人单独编写代码的时候难免会碰到这样那样的bug,也容易会陷入思想的死循坏,所以也要多和别人讨论,请教他人。但不是直接要别人的代码,可以请教一下设计思想,想想自己有什么不足,为什么没有想到,多总结,多思考。

6.要有艰苦奋斗的精神。这学期以来,我为了完成任务,经常是周末一坐就是一整天。一个问题我也会几天连续的调试。最终往往都会找到解决办法。所以我觉得不会就去请教别人是好的,最后最好是自己能将它琢磨出来。