Page 113 - 《软件学报》2020年第10期
P. 113
刘焰强 等:FPGA 加速系统开发工具设计:综述与实践 3089
(register-tansfer module)的硬件行为 [11] .1979 年左右,Kaiserslautern 大学的团队开发出 KARL,以支持结构化硬
件设计和日益兴起的超大规模集成电路(VLSI)设计 [12] .同一时间,为了满足同样兴起的可编程逻辑设备
(PLD)的商业化需求,DATA I/O 公司也开始设计面向可编程设备的 ABEL [13] .
随着超大规模集成设计的逐渐流行和现场可编程设备的发明,传统的基于电路图绘制(schematic capture)
的硬件设计方法受限于适合处理的晶体管数量(通常是数百个)已经越来越难以满足设计效率的需求,在 20 世
纪 80 年代,Verilog [14] 和 VHDL [15] 相继出现并逐步发展成熟.VHDL 和 Verilog 的设计初衷都是希望用开发者熟
悉的编程语言来描述设计好的电路图以便于工程管理,其中,VHDL 借鉴了大量 Ada 语言的理念和语法而
Verilog 借鉴了 C 语言的编程风格.相比于其他硬件描述语言,类 Ada 和类 C 的语言风格更受开发者青睐,随着
VHDL 和 Verilog 的标准化,两者逐渐取代了其他硬件描述语言,并统治硬件设计领域直到今日.初期版本的
VHDL 与 Verilog 的功能十分类似,相比于 Verilog,VHDL 有更高的抽象级别和语言复杂度.但是进入 21 世纪以
后,经过 Verilog 到 System Verilog 的演变,以及多次迭代(最新标准是 IEEE Standard 2017 [16] ),Verilog 引入了许多
提高生产效率的语言特性,并提高了对大规模系统的描述能力.在此基础上,又由于 C 语言使用的广泛性,Verilog
相比于 VHDL 得到了更大规模的应用.
基于寄存器传输级抽象的硬件描述语言在逻辑综合技术引入之前并不足以完成完整的硬件设计,
VHDL 和 Verilog 初期都只是用于描述和归档门电路级的电路图设计.类比高级软件编程语言,逻辑综合器
可以被理解为编译器,即将寄存器传输级的设计翻译成门电路级的网表设计.但是,与高级语言的编译器不
同,由于没有统一的指令集抽象和确定的硬件布局,描述门电路连接方式的网表还不足以在硬件上“运行”.
以一般 FPGA 开发为例,我们还需要经过“布局布线(place and route)”步骤,将网表与特定硬件平台上的物理
资源对应起来,并通过下载配置才能让 FPGA 实现我们想要的功能(放置与路由由于涉及到 FPGA 硬件的技
术细节,目前这一步一般都是由 FPGA 生产商提供的闭源软件来实现,因此本文讨论的开发框架将不包括这
部分内容).系统设计的经验告诉我们,提高抽象层次的代价往往是性能的损失,而这一点在硬件设计上也没
有例外.基于硬件描述语言和逻辑综合器生成的设计相比于有经验的工程师使用传统方法完成设计,几乎总
是需要更大的硬件面积和提供更低的性能.然而,随着硬件集成度的提高,硬件本身性能的发展和综合算法
的改进,人们在设计质量和开发效率的权衡中,最终接受了高开发效率的工具,这一点与软件编程语言的发
展是类似的.
硬件描述语言经过 30 多年的使用,尽管自身依然在迭代和发展,但面对新的需求和挑战,它们遇到了与自
己前身类似的问题:语言本身的局限性限制了开发效率的进步.近年来,FPGA 应用研究的兴起吸引了大量非
专业硬件背景的工程师投入到 FPGA 的开发中,不同于 C、Ada 等底层语言,他们熟悉的工作语言经常是 C++、
Java、Scala 等面向对象语言或者是 Python、JavaScript 等脚本语言.对于新的使用群体来说,硬件描述语言曾
经语言友好的优势不复存在,而另一方面,区别于硬件工程师是从门电路级抽象提升到寄存器传输级抽象,软
件工程师却是从算法级抽象降低到有明显语义鸿
沟的寄存器器传输级抽象,抽象级别的优势也不复
存在.而对于传统的硬件工程师来说,现代软件编程
框架中体现的软件工程理念同样吸引着他们,经典
硬件描述语言中缺乏面向对象编程、参数化类型、
类型安全等特性,这在项目规模不断扩大的今天,已
经开始给项目管理、维护带来巨大的困扰.为了适
应新的需求,在经典硬件描述语言的基础上,新的硬
件开发工具或框架基本走上了两条道路:高层次综
合 [17−19] 和高级硬件描述语言 [20] .并形成了如图 1 所 Fig.1 The hierarchy of development tools
示的层次,接下来,我们将依次介绍高层次综合和高 图 1 开发工具层次
级硬件描述语言.