FPGA开发使用的语言

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

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依然是绝对的主角。

相关推荐
Hello-FPGA2 小时前
基于RFSOC FPGA ZCU216 的CoaXPress 采集demo
fpga开发
9527华安3 小时前
FPGA基于ADV7182解码PAL视频,Video Processing Subsystem去隔行,提供6套工程源码和技术支持
fpga开发·音视频·pal·adv7182
hahaha60163 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
GateWorld4 小时前
Xilinx 7系列FPGA时钟网络详解
fpga开发·时钟网络·xilinx 7系列
szxinmai主板定制专家16 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
szxinmai主板定制专家1 天前
AMR 项目落地:机器人控制器硬件定制化需求复盘
arm开发·单片机·fpga开发·系统架构·机器人·am62x
FPGA小迷弟2 天前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1282 天前
CPU 内部结构是什么?---deepseek
fpga开发
abc light2 天前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072193 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理