一、初学者常见问题
很多初学者说FPGA入门好麻烦,尤其是原来一些写过C代码的同学,觉得FPGA的代码逻辑性太强,写起来完全不像C那样灵活。
我的观点:
1、FPGA其实入门是非常简单的,你觉得复杂,估计是你被带到粪坑里面去了,自己没跳出来。
2、C语言有编译器,会帮你把代码逻辑给处理好。FPGA写出来的是电路,是很底层的。如果你像写C那样写FPGA,出发点就错了,也不可能会写好FPGA。
3、FPGA常用的语言有VHDL和verilog,目前外边百分之九十的公司都是在用verilog,建议你还是用verilog吧。
4、有同学问,老师,我需要有什么基础才能学FPGA吗?比如模拟电路和数字电路。 我认为:模拟电路讲的东西其实挺复杂的,我们只需要一些电路的基础就可以了,和模拟电路没直接的关系,比如:一个芯片的供电电压,芯片操作的电平。二极管的导通和关断。 数字电路,需要知道与 或 非 是什么意思、D触发器的概念就行了,其他的,我认为没必要去深究,和FPGA学习没直接的关系。
5、FPGA最重要的概念是什么?我认为是时钟,FPGA所有的信号都是跟着时钟走的。
6、有没有推荐的书。目前我没有什么书可以推荐的,很多学生研究verilog的语法,买本FPGA的书在那里看,我认为这种学习方法非常愚蠢。高校的书多半是没有使用过FPGA的叫兽在那里瞎写的, 很多连可综合不可综合都跟你说不清楚,把你带到坑里面,直接淹死你。还有一些为了利益骗人的教授,哎,太复杂了。 其实FPGA的语法非常简单,可综合的非常少,也就是实际你使用的非常少,少的可怜,多半都是不可综合的。有同学会问,不可综合的语法有毛用,好问题,不可综合的语法是仿真用的。modelsim是最常用的一个仿真工具了。还有vcs等。
7、入门需要学哪些软件,其实先学3种吧。1、ALTERA的Quartus II,2、XILINX的ISE,3、modelsim。(xilinx的vivado也很重要,先别接触了,不适合初学者,尤其是ZYNQ系列,是ARM和FPGA的结合,很多实验需要ARM的配合) verilog的代码编辑器常用的是notepad++和UE,也有用vim的。我建议你用Notepad++吧,免费的,百度搜索下,直接就安装好了。和quartus II、ISE、vivado关联起来非常简单。后续会介绍。
再次强调:modelsim是非常重要的,必须熟练应用,熟练写tb文件。
8、FPGA 内最重要的IP有哪些? 这个问题比较朦胧,分应用吧! FPGA用的最多的是PLL、FIFO,基本我写的每个项目都在使用。做算法经常用到加减乘除的IPCORE,当然还有用FFT的,不过FFT比较复杂,做出来的消耗资源都比较多。外部的比较重要的是DDR2,进行大数据存储的时候使用。
9、给初学者30个例子
本博客会连载30个入门的例子。我尽量坚持到最后一刻,希望大家为我加油!
二、聊聊之前的经历吧
FPGA程序写的太久了,08年毕业就开始写,身边的同事换了一波一波又一波,徒弟收了一个一个又一个,软件更新了一代一代又一代。手上经历过的项目也数不清了。什么E1、T1、百兆千兆以太网、USB2.0、USB3.0、DDR2、DDR3、CAN、CCD、CMOS、PCIE、ZYNQ。还有简单的i2c、spi、串口、ADC、DAC音频等等, 之前做图像处理的时候,一般FPGA的容量都比较大,有一些算法会集成在里面,尤其是CCD的图像.采集时序非常复杂(呵呵,CCD的时序可好玩了)。常用的就是缓存行。CMOS的图像采集时序就比较简单了。 后来做其他行业了,控制类的比较多,ADC采集经常用到,一般都是纯代码写出来的。
三、想要提高需要做的
个人认为:
1、知道自己写出来的程序,占用资源的评估,是否能综合出来。
2、如何知道自己的程序能跑多高的频率。
3、DDR2缓存,一定要会额,这个是加分项,很多项目都是需要的。至少是经常碰到的。
4、会对算法进行分解,评估是否能在FPGA里面进行处理,PFGA能否写出来高效的算法。
5、能跳过去一些坑,比如,复杂的SPI,一般是用C写更好一些,FPGA做复杂的图像显示是不擅长的,但是显示个简单的图标还是可以的,呵呵。
6、NIOS II和MICROBLAZE 其实用的不太多,什么情况下必须用呢? 呵呵,肯定是逻辑不好写的时候呀,比如,复杂的软件协议,网络协议,你用verilog写一个试试,累死你。但是用C是分分钟的事情,毕竟C是上层的语言嘛!!