掌桥专利:专业的专利平台
掌桥专利
首页

FPGA平台桥接HLS技术和硬件构造的芯片设计方法

文献发布时间:2024-04-18 19:58:21


FPGA平台桥接HLS技术和硬件构造的芯片设计方法

技术领域

本发明涉及芯片设计自动化技术领域,具体涉及一种面向现场可编程门阵列的桥接高层次综合技术和低层次硬件构造的设计方法。

背景技术

现场可编程门阵列(FPGA)广泛用于原型设计和加速各种应用,包括机器学习、数据分析等。FPGA最吸引人的特点是,它可以通过编程进行定制,以应对不同的应用。对FPGA进行编程有两种主要方法。第一种方法是采用低层次硬件构造方法,手动编写寄存器传输级别(RTL)硬件描述语言,如Verilog和VHDL,它们将硬件结构描述为寄存器和组合逻辑。第二种方法是使用HLS(High Level Synthesis,高层次综合、高级综合工具)技术,如XilinxVitis HLS,这些工具使用C/C++和OpenCL等高级语言描述硬件的行为,并自动合成为RTL设计。

这两种方法在性能和生产率方面表现出不同的权衡。RTL抽象接近硬件的本质,使用户能够完全控制硬件设计,具有良好的性能和资源利用率。由于低级抽象,RTL描述通常很冗长,并且需要很长时间才能开发。相比之下,高层次综合技术通过提高抽象级别来提高生产力。然而,由于语义差异,高层次综合技术和手动RTL设计之间仍然存在明显的性能差距。同时,HLS工具提供的各种优化指令,在硬件设计实践中的复杂使用会带来额外的挑战。

硬件构造语言(HCL),如Chisel(Chisel:Constructing hardware in a Scalaembedded language》,Jonathan Bachrach等,DAC 2012.),逐渐在应用专用芯片(ASIC)的设计中流行。虽然HCL引入高级语言功能以增加硬件设计的生产力,并且其描述硬件的完整性和通用性与RTL相同,有助于避免采用高层次综合工具生成硬件的性能不可预测问题。但用户仍然需要在硬件构造语言中手动设计和实现硬件控制逻辑,冗长的设计任务需要消耗硬件设计人员的大量精力。例如,实现嵌套循环的硬件控制器可能需要数百行代码。虽然采用硬件构造语言进行芯片设计具有诸多好处,但到目前为止还没有专门面向FPGA设备的硬件构造语言。

发明内容

为了克服上述现有技术存在的不足,本发明提出了一种在FPGA上桥接高层次综合技术和低层次硬件构造的芯片设计方法,基于流行的硬件构造语言、融合高层次综合技术,生成FPGA专用的芯片硬件。

本发明将高层次综合技术使用的高级语言功能集成到寄存器传输RTL级别的硬件编程中,提供嵌入在Chisel硬件构造语言中的编程接口库。编程接口库提供高级控制语句来描述硬件的控制行为,并与Chisel支持的硬件数据通路描述紧密结合,支持完整、通用的硬件描述功能;再根据高层次控制描述实现有限状态机(FSM)的自动生成,生成技术保证FSM具有与高层次描述相同的周期精确的控制行为。

本发明方法首先提供基于硬件构造语言Chisel的编程接口库,具体为类C的高层次命令式编程模型,支持控制语句的层次结构,并与Chisel共同实现在高级编程语言Scala中,实现无缝合作以提供通用的硬件描述功能。

本发明将编程接口库中的编程原语实现为Scala语言中的高阶函数,即每个控制原语被允许作为另一个控制原语的函数参数。每个控制原语被表示为抽象语法树(AST)数据格式,并传递给生成器后端以实现有限状态机和硬件电路的构造生成。

然后,以编程接口库输出的抽象语法树作为输入,合成有限状态机生成硬件,并保证生成的FSM及硬件实现的周期级行为与基于编程接口库的高层次描述相同,并优化合成有限状态机的资源消耗。本发明使用状态数作为资源消耗的指标,并尝试尽可能减少状态数。有限状态机的合成过程是利用本发明面向有限状态机定义的一套操作集合和规则,在抽象语法树上完成自下而上的树遍历并递归构造有限状态自动机,保证周期行为准确性和最小的资源开销。本发明为所有前端编程接口库提供的控制原语提供构造有限状态机的合成模板。

具体实施时,本发明提供的一种在FPGA上桥接高层次综合技术HLS和低层次硬件构造的芯片设计方法包括如下步骤:

S1.设计基于硬件构造语言的编程接口库,编程接口库用于描述芯片硬件的控制行为;

编程接口库提供三类控制原语用以描述硬件控制行为:

11)原子性原语:即Step原语,声明在一个周期内完成执行的用Chisel原生语法描述的硬件逻辑,作为分割跨周期硬件时序控制行为和周期内硬件组合逻辑的编程语法;

12)串行原语:包括Block、If、For、While四个具体原语,对应软件编程语言中的常见控制流语法,其层次化的组合使用帮助描述复杂的硬件控制行为,如循环嵌套;

13)并行原语:包括Folk、Pipeline两个具体原语,分别描述Folk-join风格的硬件控制逻辑和流水线电路的硬件控制逻辑,利用并行获得硬件性能的提升;Folk-join风格是一种并行编程模式,指配置并运行独立并发的子任务(Fork),并在适当的时间点等待全部子任务完成并恢复后续的串行执行模式(Join)(Structured Parallel Programming:Patterns for Efficient Computation》,Michael McCool等,Elsevier)。

S2.根据编程接口库设计有限状态机的表示及有限状态机对应的硬件;包括定义用于有限状态机合成的基本操作(合并、分割、连接、循环)和定义有限状态机的合成模板。

将有限状态机表示为入口、内容、出口三部分,设计有限状态机的表示形式,包括状态机的状态和转移,状态机控制的逻辑行为或输出;有限状态机对应的硬件设计相对应地包括状态寄存器、转移逻辑和输出逻辑三部分。

有限状态机合成的基本操作用于修改与创建有限状态机。具体实施时,用户结合Chisel硬件构造语言和本发明提供的编程接口库描述硬件设计,编程接口库描述的控制行为通过有限状态机的操作和有限状态机合成模板合成符合控制行为描述的有限状态机。

通过编程接口库合成有限状态机生成芯片硬件,使得生成的有限状态机FSM及硬件实现的周期级行为与基于编程接口库的高层次描述相同,并优化合成有限状态机的资源消耗。

利用四种有限状态机合成的基本操作以及八种高层次控制原语对应的状态机合成模板实现有限状态机的合成。

S3.通过有限状态机和硬件构造语言统一输出为完整的硬件控制器和数据通路设计。

结合有限状态机合成的基本操作及状态机合成模板实现自动化、高性能、资源高效的状态机合成与硬件生成,包含硬件数据通路以及硬件控制器。其中,本发明面向FPGA平台的硬件架构特点,如查找表与寄存器结合为可重构逻辑块,优化硬件控制器的寄存器传输级别(RTL)硬件描述的生成,保证生成代码的风格发挥FPGA硬件的性能与功耗资源效率,基于FPGA平台和公开数据集充分验证。

与现有技术相比,本发明的有益技术效果:

本发明提出了一种基于硬件构造语言的硬件设计方法及工具,融合面向现场可编程门阵列设备的高层次综合技术的优势功能,有效结合硬件构造语言的低层次通用表示能力和性能优化空间,以及高层次综合技术的生产力优势。本发明方法主要可应用于加速器敏捷设计。在针对新的加速应用设计面向现场可编程门阵列的加速器时,可以使用本发明,获得与高层次综合技术相当的生产力,同时不牺牲低层次硬件设计方法的通用表示能力和性能潜力。本发明可以应用于人工智能、大数据、科学计算等领域应用的硬件设计中,实现快速高效的硬件设计,并部署在现场可编程门阵列上,实现敏捷的硬件加速。

附图说明

图1为本发明对有限状态机和生成硬件的表示形式的示意图;

包括:左图为有限状态机的表示形式,将有限状态机表示为入口、内容、出口三部分,并用节点和边分别对应状态机的状态和转移,用方框表示状态机控制的逻辑行为或输出;右图为有限状态机对应的硬件设计,相对应的分为状态寄存器、转移逻辑和输出逻辑三部分。

图2为本发明中提供的桥接高层次综合技术和低层次硬件构造的芯片设计方法的流程框图;

包括:用户结合Chisel硬件构造语言和本发明提供的编程接口库描述硬件设计,编程接口库描述的控制行为通过状态机操作和状态机合成模板合成符合控制行为描述的有限状态机,并结合Chisel语言统一输出为完整的硬件控制器和数据通路设计。

图3为本发明实施例提供的设计过程示意图;

包括:使用编程接口库结合Chisel硬件构造语言描述硬件设计的代码实例;编程接口库自动提取硬件控制行为描述的抽象语法树;根据控制行为抽象语法树合成有限状态机;最终结合合成的优先状态机与硬件设计中的数据通路描述,输出完整的硬件设计。

图4为本发明实施例中面向有限状态机定义的四种核心操作;

包括:合并运算、分割运算、连接运算和循环运算,每种运算均作用在有限状态机的表示上,在图4中示意为输入和输出两部分。

图5为本发明对编程接口支持的高层次控制原语设计的状态机合成模板示意图;

包括:对总计八个高层次控制原语设计的8个状态机合成模板(a)~(h),每个模板表示为对有限状态机进行操作的组合,由一个或多个小状态机通过状态机操作合成大的状态机。本发明结合图5中的模板合成符合控制行为描述的状态机。

具体实施方式

下面结合附图,通过实施例,进一步阐述本发明。

本发明提供一种面向FPGA硬件平台桥接高层次综合技术和低层次硬件构造的芯片设计方法。面向FPGA平台的芯片设计需要用户提供描述硬件逻辑的寄存器转移级硬件描述代码,并使用FPGA设备支持的商用或开源硬件设计后端软件工具生成配置文件,以实现对FPGA设备的功能重构。本发明处理寄存器转移级硬件描述的生成步骤,允许用户使用敏捷的硬件描述方式自动获取低性能与资源开销的寄存器转移级硬件描述。如图2所示,本发明基于硬件构造语言创新编程接口库,通过提供类C的包含多种控制原语的命令式编程模型,融合面向现场可编程门阵列设备的高层次综合技术的优势功能,并自动提取抽象语法树,结合有限状态机合成的基本操作及状态机合成模板实现自动化、高性能、资源高效的状态机合成与硬件生成,包含硬件数据通路以及硬件控制器。具体包括如下步骤:

1)提供基于硬件构造语言Chisel的编程接口库,具体为类C的高层次命令式编程模型,支持控制语句的层次结构,并与Chisel共同实现在高级编程语言Scala中,实现无缝合作以提供通用的硬件描述功能。本发明提供编程接口库及三类控制原语以描述硬件控制行为,并形成编程接口库与硬件构造语言Chisel搭配使用的工具链。三类描述硬件控制行为的控制原语的细节如下:

11)原子性原语:即Step原语,声明在一个周期内完成执行的用Chisel原生语法描述的硬件逻辑,作为分割跨周期硬件时序控制行为和周期内硬件组合逻辑的编程语法。如图3中左上方代码所示,Step原语内直接包含寄存器转移级的Chisel代码以描述目标周期内执行的信号传递或逻辑运算。本发明通过引入原子性原语将硬件的结构功能语义转换为时序控制语义,进一步支持本发明提供串行原语和并行原语以描述复杂的硬件控制行为。

12)串行原语:包括Block、If、For、While四个具体原语,对应软件编程语言中的常见控制流语法,其层次化的组合使用帮助描述复杂的硬件控制行为,如循环嵌套。具体而言,Block原语对应软件编程中的基本块概念,对应逐周期按次序发生的硬件控制行为;If原语对应软件领域的条件跳转,在硬件控制的范畴内表示状态机上数据依赖的分支;For原语和While原语都是用以描述重复执行控制逻辑的原语,区别在于For原语表示固定的执行次数,而While原语根据条件信号以数据依赖的方式决定是否重复执行。本发明通过引入串行原语支持软件风格的硬件控制行为描述,支持用户使用敏捷代码描述复杂的硬件控制逻辑。

13)并行原语:包括Folk、Pipeline两个具体原语,分别描述Folk-join风格的硬件控制逻辑和流水线电路的硬件控制逻辑,利用并行获得硬件性能的提升。具体而言,Folk原语描述的控制行为是同时多个多个子有限状态机的执行,并等待它们全部完成后执行后续控制;而Pipeline原语描述多个控制行为按顺序发生,且下一次执行不需要等待当前所有控制全部完成即可开始。本发明引入并行原语以描述高性能的硬件设计。

本发明将编程接口库中的编程原语实现为高级编程语言Scala语言中的高阶函数,即每个控制原语被允许作为另一个控制原语的函数参数,如图3左上的硬件描述中,外层的Block原语以两个Step原语和一个If原语作为函数参数。本发明将使用编程接口库以控制原语形式描述的硬件控制表示为抽象语法树(AST)数据格式,如图3右上方的抽象语法树。本发明进一步面向编程接口库输出的抽象语法树实现有限状态机的合成和完整硬件电路的构造生成,如图3右下所示。

2)本发明以编程接口库输出的抽象语法树作为输入,合成有限状态机生成硬件,并保证生成的FSM及硬件实现的周期级行为与基于编程接口库的高层次描述相同,并优化合成有限状态机的资源消耗。本发明提出利用面向有限状态机定义的一套操作集合和规则完成有限状态机的合成,具体而言,本发明在抽象语法树上完成自下而上的树遍历并递归构造有限状态自动机,本发明提出的有限状态机操作集合和规则保证生成硬件的周期行为准确性和最小的资源开销,并为所有前端编程接口库提供的控制原语提供构造有限状态机的合成模板。

具体而言,图1展示了本发明设计的对有限状态机及其生成硬件的表示方式,其中,左图利用节点、边以及节点或边上的行为表示有限状态机与相应的硬件控制行为,节点表示状态机的状态,边对应状态机的转移,节点或边上行为描述状态机配套的输出逻辑。此外,本发明将有限状态机表示为入口、内容、出口三部分组成的有向图,后续在状态机上定义操作以及定义合成模板均基于该表示形式。本发明将图1中的有限状态机形式化表示为G=(V,E,s,t)其中V表示节点(状态)的集合,E={(u,v,c)}表示有向边(转移)的集合,其中有向边(u,v,c)表示如果条件c满足,节点(状态)u将通过该有向边转移到节点(状态)v。我们将节点v上的动作或者输出逻辑表示为act(v)。s和t分别表示状态机的入口节点(状态)和出口节点(状态)。

有限状态机上的操作用于修改与创建有限状态机。状态机操作的难点在于消除冗余的入口和出口,以及保持控制行为的正确性。我们在有限状态机的合成过程中定义了以下规则:(1)入口和出口不映射到任何状态机实现中的状态。入口可能有动作,但出口不能有动作。(2)当一个节点(状态)存在一条出边(转移)指向出口节点,则规则要求该节点只能通过一条出边转移到出口节点,而不能通过其他出边转移到其他任何节点。此类节点(状态)被命名为“退出集合”L。形式化表示为,设

合并操作:如图4a所示,合并操作将一个有限状态机G=(V,E,s,t)和两个其中的节点u,v∈V作为输入,并将两个节点u,v合并为一个节点w,输状态机G

分割操作:如图4b所示,分割操作将一个有限状态机G=(V,E,s,t)和它的一个节点u作为输入,并将u复制为一个新节点v,并令v继承u的状态,即act(v)=act(u),所有指向节点u的边和从u出发的边复制为指向v或从v出发的边,输出更新后的有限状态机G=(V

连接操作:如图4c所示,连接操作以两个状态机G

循环操作:如图4d所示,循环操作以一个有限状态机G=(V,E,s,t)、一个初始化动作Initial、一个更新动作Update以及一个循环条件Cond作为输入,输出一个新的状态机G

基于上述定义的四类面向有限状态机的基本操作,本发明提出面向编程接口库的状态机合成模板,针对8种高层次控制原语设计其各自的状态机合成方案。图5中的(a)显示Step原语对应是内容只包含一个节点的状态机,用于执行节点上的动作。图5中的(b)显示Block原语通过连接操作组合所有子状态机到一个序列中,消除所有中间的入口和出口。图5中的(c)和图5中的(d)显示了If原语的两种不同情况,分别是只有一个分支的If语句,只需要添加状态并将条件添加到内容的入口处,和具有两个分支的If语句,需要合并两个子状态机的入口和出口节点。图5中的(e)显示While原语对应的模板是在子状态机上应用循环操作,没有初始或更新操作。图5中的(f)显示For原语在子状态机上应用循环操作,并为循环变量生成一个附加计数器和对应的初始化及更新操作。Fork和Pipeline原语与其他语句不同。生成状态机以保留子状态机上并行执行的所有可能情况需要太多状态。本发明Fork和Pipeline原语生成多个状态机实现期望功能。如图5中的(g)所示,每个子状态机单独生成,由额外的Fork状态机整体控制,等待启动信号的条件被添加到子FSM中。如果任何子状态机未完成,则Fork状态机将在某个状态等待。如果所有子状态机都已完成,则Fork状态机在到达出口之前需要额外的一个空闲状态来遵循本发明提出的状态机构造规则。如图5中的(h)所示,Pipeline语句遵循与Fork类似的构造模板,只是开始信号是按顺序发送的。

本发明利用有限状态机上的四种操作以及八种高层次控制原语对应的状态机合成模板实现状态机的合成。具体合成过程是在编程接口库提取的抽象语法树上,自底向上地递归地合成状态机。由于每一个抽象语法树上的节点都对应唯一的控制原语,状态机合成过程会遵循该控制原语对应的合成模板,对子状态机进行操作和组合,形成当前实现当前控制原语功能的状态机。通过对整个抽象语法树的遍历,由编程接口库描述的硬件控制行为被转换为严格实现周期级行为的有限状态机设计,并与状态节点上的行为结合,实现完整硬件设计的生成。

需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

相关技术
  • 一种基于DSP和FPGA的计算机硬件平台设计方法
  • 一种基于DSP和FPGA的计算机硬件平台设计方法
技术分类

06120116485349