FPGA的编程语言跟C语言有什么不同?

Python019

FPGA的编程语言跟C语言有什么不同?,第1张

学FPGA给我最大的体会就是它的编程语言是并行执行的,不像C语言那样一行一行的执行。verilog里面有个always语句,所有的always语句块全部并发执行,而always语句块内部是逐行执行的(前提是只是用阻塞赋值)。

verilog中没有中断的概念,而逐行执行指令的C语言却离不开中断。

学习verilog必须要掌握最基本的概念,像上面的阻塞赋值等等,新手都要经历这一关的,呵呵。

还有,verilog是始终离不开硬件,c语言中可以不限制循环次数,而verilog就不行,因为每循环一次就会增加FPGA内部资源的占用。

最后在说一点儿,verilog中有的语句不能被综合(Oh,什么是综合?,百度吧),像定义浮点的float就不可以,在编程时慎用。

好啦就说这些。

微处理器用C,FPGA用HDL,这个不用说了吧。

算法实现速度,FPGA肯定比微处理器快多了,因为FPGA可以算准每一个时钟周期的任务,而微处理器执行C程序可能会浪费很多时钟周期。

论算法实现难度,如果放在几年前,复杂算法肯定不会用FPGA做,太麻烦了,C语言的顺序设计思想则很方便许多,但现在随着各个FPGA厂商推出DSP工具,用FPGA 实现复杂算法倒简单了很多,几乎一行代码不用写,直接用图形界面就设计完了,类似画流程图一样。

说道门槛,用微处理器实现算法,重点在算法,而不是微处理器硬件,因为厂商会把微处理器各个硬件模块做得更简单、更好用,内嵌更多简单的DSP器件,比如乘累加器、FFT模块等,程序优化的自动化程度越来越高。FPGA则不同,你不仅要精通算法,你还要知道怎么样用数字电路去搭建你的算法,也就是说你要知道你写的代码生成的是怎么样的电路(行业里叫“综合”,就是把代码综合成具体的数字电路),不同的数字电路形式,完成算法的效率完全不一样,所以说FPGA是硬件,不是纯软件,如果你是数字系统设计高手,你在设计FPGA的算法前,都会直接画出一个算法的数字电路结构图,然后照图用HDL代码去设计。当然,就像我前面说的,现在做算法很多都用图形界面了,不需要你写代码了,但你还是要懂FPGA内部硬件结构,这样才能更好地实现你的算法。

总的来说,FPGA入门容易,但提升就很难了,需要不断地积累经验,和嵌入式技术不同,FPGA在国内没有多少人给你指点 。