科技 kj

您现在的位置:首页 > 科技 > 何绪金:应用HLS技术加速FPGA逻辑开发

何绪金:应用HLS技术加速FPGA逻辑开发

摘要:随着FPGA器件资源容量的不断提高,逻辑设计规模越来越大,传统的基于RTL级的逻辑代码设计变得愈发复杂,开发周期也愈发漫长。虽然从1950年开始,高级语言逻辑综合技术就一直在被研究和尝试,但前几代的技术都因各种原因没有推广。Xilinx公司的High-Level Synthesis(HLS)工具代表着最新一代的高级语言逻辑综合技术,支持C/C++进行设计,为极大地提高设计效率和减少设计-验证-生产周期提供了可能。本文介绍了HLS在超声血流成像SVD降噪算法设计中的应用。结果表明,相比传统的基于RTL的人工编码,HLS设计能够将原来需要几周完成的工作缩短到几天,并且逻辑资源消耗比人工编码节省10%以上。

关键字: HLS  FPGA 高级语言综合 超声成像

1.引言

FPGA由于其并行执行、运算性能高、功耗低、可重配置以及相比ASIC开发周期短等特点,目前在各个领域中都有广泛应用和快速发展。但是,随着片上系统(SOC)规模的越来越大,用户设计也相应的变得越来越复杂,传统的RTL开发方式面对超大规模设计的弊端越发凸显。    另一方面,FPGA主要使用硬件描述语言HDL开发,难度较大,从业者较少,开发周期比较长,不利于产品快速投放市场。

虽然从1950年开始,面向ASIC芯片的高级语言HLS逻辑综合技术就一直被研究,但前三代都以失败告终。第一代HLS技术从1950年开始发明,因芯片规模较小,并未有明显优势。1980年代到1990年代,第二代HLS的发展主要在学术研究方面,但由于编译工具对平台的假设过于简单,并未被大规模使用。1990年代到2000年代,第三代的HLS工具开始做商业尝试,但是由于其可用性和性能都较差,导致失败[1]。最新一代的HLS技术,聚焦于C/C++语言,获取设计意图,实现了硬件-软件的通用模型,做到联合设计与联合验证,取得成功[2]。由于FPGA的可重配置特性,使用HLS进行开发,不像ASIC那样需要漫长且全面的设计验证,能够提升设计效率,缩短产品投向市场的时间,因此受到越来越多FPGA开发工程师甚至是软件开发工程师的欢迎[3][4]

此外,FPGA在各种算法的实现及加速上,也有非常广泛的应用。算法的易变性,易迭代性,易调试性和易维护性,使用RTL开发都很难做到,时间上对项目的进度也造成了影响。如何能够使用高级语言,如C,C++等,进行FPGA开发,也成了EDA软件的热门方向。对此,FPGA最主要的两家供应商Xilinx和Altera都对高级语言的FPGA实现进行了较大投入。Xilinx公司推出了高层次综合HLS,而Altera公司则主推OpenCL。本文主要讨论Xilinx HLS技术。

2.Xilinx HLS介绍

Xilinx公司推出的HLS,是基于C,C++,SystemC进行开发,并且使用Vivado HLS进行编译,产生VHDL或者Verilog代码[5]。然后将软件自动产生的代码,以IP的形式,重新放到原有的工程中编译为FPGA编程文件使用。

开发过程如图2.1所示:

 

仿真验证过程,如图2.2可以使用C语言从算法层面进行迭代,最后再进行简单的RTL回归验证,相比传统的RTL开发方式,整体的开发时间,会大大缩短。

 

在超声成像系统的研发过程中,有大量的图像处理算法需要用FPGA来实现,如何对算法进行快速的效果评估验证是个重要问题。一方面可以在Matlab中进行算法的搭建和仿真验证,另一方面,可以使用HLS在FPGA芯片上进行系统的快速开发和迭代,对算法进行快速的真实验证。

3.超声血流图像SVD降噪算法研究

多普勒血流图像是超声设备中的一种重要的成像模式,传统血流图像后处理流程中,为了消除组织运动带来低速伪像,一般采用壁滤波的方法进行滤波。但这种方法在滤除噪声干扰的同时,也将许多低速血流信号消除掉了,使得系统灵敏度变差。而为了提升系统对低速血流信号的检测能力,需要研究新的血流图像降噪算法,基于奇异值分解(SVD)分解的降噪方法正是其中一种。

3.1   SVD降噪算法原理

奇异值分解(SVD)是一种用于实数矩阵或复数矩阵因式分解的重要方法,SVD广泛应用于计算矩阵的伪逆矩阵、解决线性齐次方程、计算最小平方差和寻找近似矩阵、模式识别和图像处理当中。

对于一个MxN的矩阵A,其SVD的表示形式为:

A = UVT                                       (1)

其中U是一个M×M的正交矩阵,V是一个N×N的正交矩阵,是一个M×N的对角阵,对角线上的元素是矩阵的奇异值。

在图像处理领域,如果一幅图像包含噪声,我们通常假设那些较小的奇异值就是由于噪声引起的。当我们先对SVD分解之后的结果按照中的奇异值从大到小进行排序,然后强行令那些较小的奇异值为0时,就可以去除图像中的噪声。

在该降噪算法中,对矩阵A的SVD分解包含了大量的数据运算,并且随着矩阵维度的增加而显著增加,而分解之后的奇异值排序及图像去噪功能,可以很容易的用软件实现。因此,如何利用FPGA快速实现SVD分解运算加速,做到对血流图像的实时处理,是实现该算法的关键。

3.2   双边雅各比旋转SVD算法

双边雅各比旋转算法(Two-sided Jacobi Rotations)是对矩阵进行SVD分解常用的硬件实现方法[6][7]。一个Jacobi旋转矩阵如图3.1

其中,.它是一个单位矩阵基础上改变p行q行p列q列构成的2×2维矩阵的值,Jacobi矩阵是一个标准正交矩阵。

3.3  SVD算法的HLS实现

我们基于Xilinx的Kintex7系列FPGA和Vivado2016.1 HLS开发套件,结合迈瑞公司的高端彩超平台,实现超声血流图像的SVD降噪算法。

 

在Vivado HLS开发套件中的工程结构如图3.3所示。

 

 

工程实现了双边雅各比旋转SVD算法的C文件,并搭建基于C语言的仿真平台进行验证,由于该过程使用C语言进行调试和迭代,效率比RTL要高很多。当基于C语言的算法实现仿真通过后,可以通过设置目标FPGA平台的约束和指令文件,使其转化为能够在该FPGA上综合及布局布线的RTL代码IP。我们可以使用Modelsim仿真工具对RTL层的代码进行最终的仿真验证,确认其硬件行为正确。最后,将该IP代码放入整体工程,在Vivado Design Suite2016.1中编译生成bitstream文件,即可进行上板调试。

4.实验结果

4.1  性能

基于Xilinx公司的Kintex7 7K410TFFG900-2 FPGA芯片,我们实现并测试了不同矩阵维度的计算性能,实验中,FPGA工作主频运行在250MHz。和已公开发表的研究成果[8][9]进行了性能对比,实验结果对比如图4.1所示。

在图4.1的数据结果中,Matlab R2009a SVD算法运行在PC端的Intel i7-3770 @ 3.40GHz处理器上,GPU平台求解SVD使用的是NVIDIA GTX8800 包含128个运算单元。分析实验结果,可以看出随着矩阵维度的增加,执行时间会随之增加,但可以看到,使用基于FPGA的双边雅各比SVD分解计算性能要优于其它计算平台。

图4.2给出了基于FPGA的双边雅各比SVD算法与Matlab SVD计算的加速结果,可以看出,矩阵维度不同,使用FPGA平台可以实现8倍到19倍的加速。

4.2资源消耗

在性能基本一致的情况下,以64×64维矩阵计算为例。逻辑资源使用情况如图4.3。HLS在基础版本中,未经过非常详尽的优化,消耗的资源是RTL开发模块的124%,略多于硬件语言的资源,经过HLS软件进一步优化后,相比传统RTL开发,资源使用量约为85%。进一步的,有研究表明,HLS解决方案比手写代码能够节约11-31%的FPGA资源[10]

 

4.3  开发周期

开发周期上,我们使用HLS实现超声血流的降噪算法,设计实现到仿真验证,以及最终上板调试,累积花费为1人力1.5周时间。与之相对的,有FPGA 5年开发经验的资深工程师,使用Verilog HDL语言在设计实现同样的超声血流降噪算法并做验证调试,累积花费4.5周时间。因此,从开发时间上看,HLS的优势是非常明显的。对于复杂的算法处理,RTL的开发效率,与HLS的C相比,要低很多,整体开发时间也要更加长。

可以预期,随着后续HLS开发流程的优化、仿真调试手段成熟之后,开发效率还会进一步提高。

4.4超声血流图像对比

我们在迈瑞公司的高端彩超平台上设计并实现了超声血流降噪算法,图4.4为传统超声血流检测算法获得的图像,图4.5为使用了新超声血流降噪算法后获得的图像。可以看出,在保证血流图像能够实时处理的前提下,使用新算法后,图像噪声水平更低,滤波器截止频率允许向下调整,进而可以有效的检测出人体内低速血流的真实情况。

 

5.结论

综上所述,HLS的引入,对于提高FPGA开发效率,提高算法的收敛、迭代速度,有非常明显的效果,同时,C的引入,也大大扩大的FPGA的使用范围,让更多的研发人员,甚至算法设计人员,可以更加容易的使用FPGA完成设计。

本文基于FPGA高级语言HLS逻辑综合技术,设计并实现了新的超声血流降噪算法,使得系统灵敏度得到显著提升,取得了较好的血流图像效果。

 

参考文献

  • Martin, Grant, and Gary Smith. “High-level synthesis: Past, present, and future.” IEEE Design & Test of Computers4 (2009): 18-25.
  • Coussy, Philippe, et al. “An introduction to high-level synthesis.” IEEE Design & Test of Computers4 (2009): 8-17.
  • Schmid, O. Reiche, C. Schmitt, F. Hannig, and J. Teich. “Code generation for high-level synthesis of multiresolution applications on fpgas.” Proceedings of the First International Workshop on FPGAs for Software Programmers (2014)
  • Andrade, Joao, et al. “Fast design space exploration using vivado HLS: Non-binary LDPC decoders.” Field-Programmable Custom Computing Machines (FCCM), 2015 IEEE 23rd Annual International Symposium on. IEEE, 2015.
  • Xilinx Inc., Vivado Design Suite User Guide High-Level Synthesis, Nov.2015, UG902 (v2015.4).
  • http://web.stanford.edu/class/cme335/lecture7.pdf
  • Brent, Richard P., Franklin T. Luk, and Charles Van Loan. Computation of the singular value decomposition using mesh-connected processors. Cornell University, 1982.
  • Mohanty, Ramanarayan, et al. “Design and performance analysis of fixed-point Jacobi SVD algorithm on reconfigurable system.” IERI Procedia 7 (2014): 21-27.
  • Lahabar and P. Narayanan, “Singular Value Decomposition on GPU using CUDA” in Proceedings of IEEE International Symposium on Parallel Distributed Processing, May 2009, pp. 1–10.
  • Cong, Jason, et al. “High-level synthesis for FPGAs: From prototyping to deployment.” IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 4 (2011): 473-491.

(何绪金 党潇 王建永)

 

姓 名:
邮箱
留 言: