FPGA开发使用的语言 来源 : 宸极教育     2026-09-21

FPGA开发使用的语言五花八门,很难统计出到底有多少种语言曾经被用于FPGA开发,从早期的原理图输入,到PALASM、ABEL这类面向可编程逻辑器件的语言,再到今天的各种高层次描述方式,几乎每个阶段都有自己的主角。


image


FPGA的开发是围绕硬件描述来展开的,目前来说,有两种通用的硬件描述语言:Verilog和VHDL。近年来,随着FPGA规模的扩大和算法类应用的增多,基于C/C++的高层次综合(HLS)也逐渐进入了工程师的视野。伴随着FPGA的发展,Verilog由于其简洁易用,在国内占据了主流地位,使用VHDL的人相对较少。FPGA开发的语言主要有如下三种。

第一Verilog:

Verilog起源于20世纪80年代中期,最初是由Gateway Design Automation公司的Phil Moorby等人开发的,并在1995年正式成为IEEE标准,即IEEE Standard 1364TM—1995。其后续版本是2001年推出的,与1995版差异比较大,例如增加了generate语句、带符号数的支持以及ANSI风格的端口声明。很多综合和仿真工具中都会提供一个选项来决定使用1995版还是2001版。目前最新的标准是2005年推出的,即IEEE Standard 1364TM—2005,它与2001版的差距不大。之后Verilog的标准被合并到了SystemVerilog中,不再单独更新。Verilog的语法与C语言非常相似,有C基础的人可以很快上手,写一个计数器、一个状态机,几十行代码就可以完成。Verilog在FPGA设计中最大的问题是它的类型检查非常宽松,位宽不匹配时,编译器往往只给出一个警告,甚至不给任何提示,位宽截断、隐式声明的wire、阻塞赋值与非阻塞赋值混用等错误,都可能悄悄地潜入设计中,直到上板调试时才暴露出来。这就要求工程师必须有良好的编码规范,并熟悉“可综合子集”的概念,因为Verilog中的很多语句(如initial延时、force等)只能用于仿真,综合工具并不会把它们变成FPGA中的逻辑。

第二VHDL:

VHDL的全称是VHSIC Hardware Description Language,其中VHSIC是Very High Speed Integrated Circuit的缩写。它起源于20世纪80年代美国国防部的超高速集成电路计划,并在1987年成为IEEE标准,即IEEE Std 1076—1987,此后又陆续发布了1993、2002、2008等版本,其中2008版增加了很多方便设计的特性,如更灵活的敏感列表、条件赋值的增强等。VHDL的语法源自Ada语言,与Verilog相比要冗长得多,同一个功能,VHDL的代码量往往是Verilog的一倍左右。但VHDL也有自己的优势,它是强类型语言,signal的类型和位宽不匹配时,编译阶段就会报错,不会像Verilog那样悄悄放过,这对于航空航天、军工、轨道交通这类对可靠性要求极高的领域来说是非常有价值的。因此在欧洲以及上述传统行业中,VHDL仍然有相当大的使用量。对国内的FPGA工程师来说,即使平时以Verilog为主,也难免会遇到需要阅读VHDL的场景,如一些厂商提供的IP核的源代码、前辈留下的老工程等。VHDL最大的优势在于严谨,但这也是它最大的劣势,繁琐的类型转换(如std_logic_vector与unsigned、integer之间的转换)会让初学者感到非常头疼。

第三HLS:

FPGA的容量按照摩尔定律快速增长,单片器件内集成的逻辑资源、DSP和存储资源越来越多,承载的功能也越来越复杂。此时,单纯使用Verilog或者VHDL在寄存器传输级(RTL)描述设计,开发效率就显得捉襟见肘了。通常来说,可以笼统地把FPGA的应用分为两类,一类是控制类的,如接口时序转换、通信协议处理;另一类是算法类的,如图像处理、深度学习推理、雷达信号处理等。那些对算法要求非常高的设计,在使用Verilog编写代码之前,往往会先使用C、C++或者MATLAB建立一个算法模型。HLS(High-Level Synthesis,高层次综合)的思路就是让工具直接把C/C++的算法描述转换成RTL代码。Xilinx在2011年收购了AutoESL,其产品后来发展为Vivado HLS,现在已经并入Vitis HLS;Intel也提供了自己的HLS编译器,并且在oneAPI中支持基于SYCL的FPGA开发。使用HLS时,工程师通过PIPELINE、UNROLL、ARRAY_PARTITION之类的编译指示(pragma)来控制并行度和存储结构,算法验证可以直接在C环境中完成,速度比RTL仿真快很多。HLS最大的优势在于它是基于C/C++的,但这也是它最大的劣势。C/C++本身是顺序执行的软件语言,如果写代码时没有硬件思维,写出来的代码综合之后的效率可能很差,甚至根本无法综合,如动态内存分配、递归等语句都不被支持。同时,HLS生成的RTL在时序、资源上的可控性不如手写RTL,遇到接口时序严格、对延迟极其敏感的设计,往往仍然需要回到Verilog或VHDL。因此,目前HLS更多的是作为RTL的补充,而不是替代,在算法类的设计中使用较多,而在控制类的设计中,Verilog依然是绝对的主角。


未经许可,禁止转载!

上一篇:FPGA入门实验教程:从LED到UART,10个实验吃透硬件思维

下一篇:Xilinx FPGA开发实用教程PDF:别再瞎找了

17788028798

西安宸极教育咨询有限公司版权所有
陕ICP备2023006728号-4

用户登陆

还没账号? 立即注册