基于硬件描述语言HDL的FPGA开发

fpga是一个很特殊的芯片,可能在2个月前,我还对它一无所知。我们熟知的芯片都是cpu,gpu,或者知道asic的概念。但实际上,fpga已经走过了30个年头,它目前已经成为一个包含各种先进电路,逻辑单元,接口,芯片封装,制造等技术的“集大成者”。在硬件不断发展的同时,fpga的开发软件和设计工具也在不断迭代和更新。基于硬件描述语言hdl,抽象出hls(high-level synthesis)(翻译为高层次综合?怎么听起来都沉得别扭)技术,通过高层设计去隐藏很多底层逻辑和细节,让fpga的开发更加简单。即使这样,fpga开发还是同cpu,gpu不一样,它需要设计者在一定程度上了解fpga的内部架构,这样才能引导高层语言综合工具睡时到优化的系统性能。       
一:开发fpga的痛点
        首先,fpga的体量非常大,大得惊人,英特尔最新的stratix10 gx 10m 有 433亿只晶体管,1020万个可编程逻辑单元,以及2304个可编程的i/o接口。这些数量庞大的晶体管组成了大量的可编程逻辑单元和查找表结构,大量运算单元,各种类型和大小的内存资源,高速串行i/o,多个嵌入式处理器,还有成百上午种不同功能的软核和硬核ip。因为可编程,可以通过定制实现极高吞吐量和极低的功耗。
        当这么多硬件资源都集成到了一个芯片上,用户如何对这些硬件进行编程呢?
通常来说,我们要解决一个复杂问题,常用的办法就是分解任务,我们需要划分清楚哪些是在硬件上完成,哪些通过软件完成。在fpga,这种分解非常困难和复杂。例如:哪部分用编程逻辑(硬件),哪部分使用片上的芯片。如何合理分配片上内存,内不足时,如何优化……
        如何降低fpga的开发难度,eda软件一定要好用,所以,不管英特尔还是赛灵思,包括我了解的一个新创团队,都会在eda软件团队上做大力投入,甚至做eda软件开发的人员要多于fpga本身的工程师数量。另外,业界也出现了大量的第三方公司,负责fpga设计咨询公司,ip提供商,外包公司等……,业务已经发展产生了很多特定的分工。
        当前,fpga还在进入更多的市场,比如:嵌入式应用,5g和汽车市场,这些领域中的大多数开发团队都没有fpga相关的设计专业知识和经验。而且,他们更多是纯软件开发,更多依赖于人工智能技术。这些也使得fpga的开发难度被放大。
二:hls——让软件工程师开发fpga
        hls指的是通过eda工具,将描述的逻辑结构转换成低抽象级语言描述的电路模型的过程。
        这里,我不得不再强调一下hls的概念,因为记不住,搞不太懂。
        high-level synthesis 简称:hls 指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。有点象我们软件领域讲的 java 语法在运行时,根据不同的机器翻译成不同的机器字节码。所谓高层次语言,通常指的是 c,c++,systemc等,通常有点较高的抽象度,并且往往不具有时钟或时序的概念,相比之下,诸如verilog,vhdl,systemverilog等低层次语言,通常用来描述时钟周期精准的寄存器传输级电路模型,这也就是当前asic或者fpga设计最为普遍使用的电路建模和描述方法。 
        为什么要使用hls?
        1: 这是一个趋势。因为集成电路的复杂度太高,已经逐渐超过人类可以手工管理的范畴。使用rtl代码,代码行过多,不现实。而使用c,c++ 等高层语言,可以将代码缩至10%。
   根据nec2004年发布的研究,一个拥有100万逻辑门的芯片设计通常要编写30万行rtl代码。
        2: 高层语言更善于复用,特别是对于ip的重用。
        因为传统的rtl的ip 往往需要定义固定的架构和接口标准,在ip重用时,需要大量的时间运行系统互联和接口验证。高层语言屏蔽了这些要求,转而由hls工具具体来负责完成。现代fpga有大量的ip单元,这些ip有固定功能,一定需要大量复用。
        3: hls能帮到软件和算法工程师参与主导芯片设计,这是因为hls能够屏蔽实现细节。对于硬件工程师,hls也能帮助他们快速设计迭代,专注于性能,面积或功耗模块,不用关注上层的算法实现。
        我们在谈hls前,先看看rtl的发展:
        通过描述寄存器到寄存器之间的逻辑功能描述电路的hdl层次。rtl级是比门级更高的抽象层次,使用rtl级语言描述硬件电路一般比门级描述简单高效得多。这个时期,工程师们都在关注rtl。
        hls经过发展,产生了以c++ 为主的目标语言,从而被很多不少不了解rtl的工程师所接受。而且,hls在性能上也近似rtl的水平。
        到现在,英特尔,赛灵思,包括多伦多大学都推出了各自的hls工具。
        其中比较成功的工具是autopilot,
前端,它使用了llvm的编译器架构,能够使用c,c++,osci systemc等语言,使用llvm-gcc编译器将高层语言模型转换为ir,优化后,再根据具体的硬件平台,生成rtl代码。
        autopilot在某些领域完胜人工优化rtl的结果。说明了hls的潜力。
        hls的主流优化方法有以下几种:
        1: 字长分析和优化。
        fpga的一个最主要特点可以使用任意字长,所以 hls工具也不需要拘泥于某种固定的长度。好处呢,对性能提升和面积缩减有帮助。
        2: 循环优化
可以使用多面体模型来达成循环优化,可以帮助实现性能和面积优化,同时也能帮助提升内存的使用效率。 
        3: 对并行的支持。
        rtl是可以直接实例化成多个运算单元并行执行的,c/c++ 一开始是顺序执行,但后面也引入的并行支持。如:pthreads和openmp等多线程并行编程方法,以及opencl等针对gpu异桅系统进行并行编程的扩展。
        作为hls工具,一定要支持并行。比如:lgeup就整合了对pthead,openmp的支持。英特尔推出了opencl sdk,将其引和hls,并生成fpga硬件电路逻辑和cpu代码两部分,从而实现fpga作为硬件加速模块的快速开发。        
        尽管如此,hls要完全替代人工的rtl建模,还有很长的路要走。对于fpga而言,内存瓶颈是制约性能的关键要素,所以,如何有效利用片上和片外的各类存储单元,是hls的研究热点。
        p4 语言是实现sdn 的重要手段,所以,新型的fpga开发工具,需要对p4进行编译和支持。
三:商业级的开发工具
3.1  赛灵思vitis 开源开发工具
        vitis花费了 1000人.年的开发工作量。
        vitis的核心架构示意图如下:
3.2 英特尔oneapi 
        oneapi 可以针对英特尔的所有芯片进行编程。
        英特尔将旗下的芯片分成了svms四类:
        标量架构(scalar):cpu
        矢量架构(vector):gpu
        短阵架构(matrix):ai芯片
        空间架构(special):  fpga.
四:业界看法
        业界普遍认为,gpu之所以在人工智能获得成功,很大程度上取决于对软件和算法工程师的友好。而fpga虽然在不断扩展应用范围,在性能和功耗上也不比gpu差,但是,它的编程仍然是以rtl开发为主,这对开发者并不算友好。
        所以,fpga在hls上的发展和突破,可能是fpga能否有更广泛应用的最后一块拼图。


带你深入探索okio组件的奥秘 提升IO效率
操作条件对固体氧化物燃料电池阳极反应转变的影响
电气线路起火的原因及预防
幼儿园用光有什么讲究?中国(南昌)教育照明与智慧黑板高峰论坛专家有话说
数字货币下的货币竞争有了什么改变
基于硬件描述语言HDL的FPGA开发
聚四氟乙烯电容器的结构与特点
LVTTL转GTL电平收发器AiPGTL2014简述
最新一代深度神经网络推理装置xDNN的部分规格参数
科创板嘉元科技股东代表监事、监事陈舍予介绍、履历信息
关于智能照明控制系统在学校中的设计与应用
呼吸阀气密性测试仪的适用范围是什么
TWS蓝牙耳机的未来
三大快充技术实测
NE555定时器电路原理分析
PCB层叠设计基本原则
罗杰斯公司推出高频线路板材新产品
关于汽车充电枪的耐用性介绍
消防安全疏散标示牌实测电路
最新系统:Android P发布 vivo X21成首批适配机型