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

针对硬件描述语言并行编译的前端解决方法及装置

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


针对硬件描述语言并行编译的前端解决方法及装置

技术领域

本申请实施例涉及硬件设计技术领域,并且更具体地,涉及一种针对硬件描述语言并行编译的前端解决方法及装置。

背景技术

硬件描述语言(Hardware Description Language,HDL),例如,Verilog HDL、VHDL等,是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。随着科学技术的发展,硬件设计规模不断增加,导致HDL语言的编译时间也逐渐拉长,并行编译成为解决此类问题的最佳途径。

然而,HDL语言与传统软件语言(例如,C、C++等)有着本质的不同,HDL语言本身语法并不能保证原始输入文件中的单个文件或某几个文件可以单独编译,因此无法像传统软件那样,直接在原始的输入文件上拆分做并行编译。

因此,如何实现HDL语言的并行编译是亟需解决的技术问题。

发明内容

本申请实施例提供一种针对硬件描述语言HDL并行编译的前端解决方法及装置,能够实现HDL语言的并行编译。

第一方面,提供了一种针对硬件描述语言HDL并行编译的前端解决方法,包括:根据原始设计得到与该原始设计等价的第一抽象语法树AST;根据该第一AST得到M个子设计;根据该M个子设计得到与该M个子设计一一对应的M个HDL文件组,该M个HDL文件组之间相互无依赖,该M个HDL文件组中的每个HDL文件组包括一个或多个HDL文件,该M个HDL文件组对应K个编译器,每个编译器用于对所对应的一个或多个HDL文件组进行编译,其中,M为大于或等于2的正整数,K为大于或等于1且小于或等于M的正整数。

可选地,上述方法还可以包括:获取原始设计的HDL文件,该原始设计的HDL文件可以包括一个HDL文件也包括多个HDL文件。

可选地,根据该第一AST得到M个子设计,也可以描述为,将第一AST拆分得到M个子设计。

应理解,上述M个HDL文件组之间相互无依赖是指M个HDL文件组之间相互独立,在编译的过程中不会相互影响,均可单独进行编译。

可选地,根据该M个子设计得到与该M个子设计一一对应的M个HDL文件组,也可以描述为,根据该M个子设计反编译输出与该M个子设计一一对应的M个HDL文件组。

通过本申请实施例所提供的前端解决方法,将原始设计进行拆分得到M个子设计,再根据M个子设计得到M个相互之间无依赖的HDL文件组,使得该M个HDL文件组可以独立的传递给后端编译工具,进而使得后端编译工具可以对这些HDL文件进行并行编译。

可选地,在后端编译过程中,上述M个HDL文件组可以对应K个编译器,以通过K个编译器实现该M个HDL文件组的并行编译。可选地,上述K个编译器中的每个编译器可以对一个或多个HDL文件组进行编译,本申请对后端编译器的分配方式不做限定。可选地,在M=K时,上述M个HDL文件组可以对应M个编译器,以通过M个编译器实现该M个HDL文件组的并行编译。

结合第一方面,在第一方面的某些实现方式中,该第一AST包括多个节点,该多个节点中存在跨模块引用XMR访问的第一节点,该根据所述第一AST得到M个子设计包括:对该第一AST进行改写,得到第二AST,该第二AST不存在XMR访问;根据该第二AST得到该M个子设计。

可选地,实际第一AST的多个节点中可以存在XMR访问的节点,也可以不存在,需要根据原始设计中是否设计了XMR访问确定,本申请对此不做限定。

在本申请实施例中,若第一AST的多个节点中存在XMR访问的第一节点,可以对该第一AST进行改写,得到不存在XMR访问的第二AST,并根据第二AST得到M个子设计,从而消除了子设计之间由于XMR访问所产生的依赖性,为并行编译创造前提条件。

结合第一方面,在第一方面的某些实现方式中,该对该第一AST进行改写包括:获得被该第一节点引用的第二节点;获得从该第一节点到该第二节点路径上所跨过的模块;给该路径上所跨过的模块均添加端口;将该第一节点的XMR访问改写为端口访问;获得该第一节点到该第二节点的最小公共父节点;在该最小公共父节点上添加局部变量,并完成功能端口连接。

结合第一方面,在第一方面的某些实现方式中,该M个子设计中的第一子设计内例化了不属于该第一子设计的模块,该根据该M个子设计得到与该M个子设计一一对应的M个HDL文件组包括:根据该第一子设计中被例化模块的输入和输出创建该被例化模块的前向声明;根据该第一子设计和该第一子设计中被例化模块的前向声明得到该第一子设计对应的HDL文件组。

应理解,前向声明中包括被例化模块的输入和输出,不包括模块具体内容的实现。

在本申请实施例中,若M个子设计中的第一子设计内例化了不属于第一子设计的模块,可以根据该第一子设计和该第一子设计中被例化模块的前向声明得到该第一子设计对应的HDL文件组,使得该第一子设计对应的HDL文件组可以独立在黑盒模式下进行编译。

结合第一方面,在第一方面的某些实现方式中,该第一AST中包括全局元素,该方法还包括:根据该第一AST得到公共的HDL文件,该公共的HDL文件包括全局元素,该M个HDL文件组中的一个或多个引用该公共的HDL文件。

应理解,全局元素是指当前设计中所有模块都可以访问到的元素。

可选地,实际第一AST中可以包括全局元素,也可以不包括,需要根据原始设计中是否设计了全局元素确定,本申请对此不做限定。

在本申请实施例中,若第一AST中包括全局元素,可以根据该第一AST得到一个公共的HDL文件,且M个HDL文件组中的一个或多个可以引用该公共的HDL文件,从而为M个HDL文件组的并行编译创造前提条件。

结合第一方面,在第一方面的某些实现方式中,该全局元素包括全局结构、全局任务、全局接口、全局函数中的一项或多项。

结合第一方面,在第一方面的某些实现方式中,若该原始设计的模块在实例化时指定了例化参数,该M个子设计的模块在实例化时则采用实际数值代替该例化参数。

在本申请实施例中,若原始设计的模块在实例化时指定了例化参数,则M个子设计的模块在实例化时可以采用实际数值代替该例化参数,从而为M个HDL文件组的并行编译创造前提条件。

结合第一方面,在第一方面的某些实现方式中,该M个HDL文件组中每个HDL文件采用目标格式,该目标格式包括目标缩进和换行。

在本申请实施例中,M个HDL文件组中的每个HDL文件还需要满足目标格式,有助于相关人员在使用过程中对其进行调试。

第二方面,提供了一种针对硬件描述语言HDL并行编译的前端解决装置,包括用于执行如第一方面或第一方面中任一可能实现方式中的前端解决方法的模块。

第三方面,提供了一种针对硬件描述语言HDL并行编译的前端解决装置,包括至少一个处理器,所述至少一个处理器用于与存储器耦合,读取并执行所述存储器中的指令,以实现如第一方面或第一方面中任一可能实现方式中的前端解决方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,实现如第一方面或第一方面中任一可能实现方式中的前端解决方法。

附图说明

图1是本申请实施例提供的一种HDL并行编译的系统架构示例图。

图2是本申请实施例提供的一种HDL并行编译的前端解决方法的示例图。

图3是本申请实施例提供的另一种HDL并行编译的前端解决方法的示例图。

图4是本申请实施例提供的一种第一AST改写的流程示例图。

图5是本申请实施例提供的一种将XMR访问改写成端口访问的示例图。

图6是本申请实施例提供的另一种将XMR访问改写成端口访问的示例图。

图7是本申请实施例提供的一种AST反编译模块的工作流程示例图。

图8是本申请实施例提供的一个不存在XMR访问的设计示例图。

图9是基于图8所示设计输出的公共的HDL文件的示例图。

图10是基于图8所示设计输出的子设计1的HDL文件的示例图。

图11是基于图8所示设计输出的子设计2的HDL文件的示例图。

图12是基于图8所示设计输出的子设计3的HDL文件的示例图。

图13是本申请实施例提供的一种针对HDL并行编译的前端解决装置。

图14是本申请实施例提供的一种针对HDL并行编译的前端解决装置的硬件结构示例性框图。

具体实施方式

为便于理解,首先对本申请实施例所涉及的背景技术进行进一步介绍。

目前,一些商业公司已成功实现了HDL语言的并行编译,例如,商业公司提供了一种编译型Verilog仿真器(Verilog Compile Simulator,VCS),该VCS提供了-j编译选项来支持并行编译。然而,这些商业公司所提供的电子设计自动化(Electronic DesignAutomation,EDA)是前后端一体化的封闭环境,并不提供中间结果的获取接口,因此其他EDA工具并不能借助这些商用EDA工具来进行并行编译。

业界普遍使用的HDL前端解析工具Verific虽然提供了前端的访问接口,但是该访问接口输出的HDL文件之间具有依赖性,只能用于EDA工具的调试,并不能用于后端EDA工具链的并行编译。

基于此,本申请实施例提供一种HDL并行编译的前端解决方案,通过在前端对原始设计进行处理,输出多个相互独立的HDL文件组,这些相互独立的HDL文件组可以独立的传递给后端EDA工具,使得后端EDA工具能够对这些文件组进行并行编译。

下面将结合附图,对本申请实施例中的技术方案进行描述。

图1是本申请实施例提供的一种HDL并行编译的系统架构示例图。如图1所示,首先将原始设计(design)所涉及的N个HDL文件(其中,N为大于或等于1的正整数)输入到处理模块;然后处理模块对原始设计进行拆分、反编译等处理,输出M个子设计对应的M个HDL文件组(M为大于或等于2的正整数),且M个HDL文件组相互之间独立且没有任何依赖;再将M个HDL文件组并行输入到后端的EDA编译器,使得后端EDA编译器能够对这些文件组进行并行编译;最后将M个HDL文件组的编译结果进行合并,即可得到原始设计对应的编译结果。应理解,图示后端的EDA编译器数目仅为示例,实际操作中,若资源紧张,也可以采用更少数目的EDA编译器,其中,每个EDA编译器可以对应一个或多个HDL文件组,本申请对此不做限定。

图2是本申请实施例提供的一种HDL并行编译的前端解决方法的示例图。应理解,该方法200可以应用于上述图1中的处理模块。如图2所示,该方法200包括步骤S210至S230,下面对这些步骤进行详细介绍。

S210,根据原始设计得到与原始设计等价的第一抽象语法树(Abstract SyntaxTree,AST)。

应理解,其中,AST就是使用树状结构表示源代码的语法结构,AST可以包括多个节点,AST的每一个节点就代表源代码中的一个结构,该结构可以包括模块、表达式等。

可选地,在执行步骤S210之前,方法200还可以包括:获取原始设计的HDL文件,该原始设计的HDL文件可以包括一个HDL文件也包括多个HDL文件。

可选地,根据原始设计得到与原始设计等价的第一AST,具体可以是对输入的原始设计进行语法分析和阐述(elaboration),得到与该原始设计等价的第一AST。

S220,根据第一AST得到M个子设计。

可选地,根据第一AST得到M个子设计,也可以描述为,将第一AST拆分得到M个子设计。

可选地,实际第一AST中可以存在跨模块引用(Cross Module Reference,XMR)访问的节点,也可以不存在,需要根据原始设计中是否设计了XMR访问确定,本申请对此不做限定。

其中,模块(module)是HDL语言的基本单元,它代表一个基本的单元块,用于描述某个设计的功能或结构,以及与其它模块通信的外部端口。

可选地,若第一AST的多个节点中存在XMR访问的第一节点,根据第一AST得到M个子设计可以包括:对该第一AST进行改写,得到第二AST,该第二AST不存在XMR访问;根据该第二AST得到该M个子设计。

在本申请实施例中,若第一AST的多个节点中存在XMR访问的第一节点,可以对该第一AST进行改写,得到不存在XMR访问的第二AST,并根据第二AST得到M个子设计,从而消除了子设计之间由于XMR访问所产生的依赖性,为并行编译创造前提条件。

可选地,对该第一AST进行改写包括:获得被第一节点引用的第二节点;获得从第一节点到第二节点路径上所跨过的模块;给路径上所跨过的模块均添加端口;获得第一节点到该第二节点的最小公共父节点;将该第一节点的XMR访问改写为端口访问;在最小公共父节点上添加局部变量,并完成功能端口连接。应理解,关于第一AST的改写可参见下文图4至图6部分的相关描述。

应理解,上述对第一AST进行改写的方式仅仅作为示例,实际中也可以有其他方式,本申请对此不做限定。

S230,根据M个子设计得到与M个子设计一一对应的M个HDL文件组,M个HDL文件组之间相互无依赖。

其中,M为大于或等于2的正整数。

应理解,上述M个HDL文件组之间相互无依赖是指M个HDL文件组之间相互独立,在编译的过程中不会相互影响,均可单独进行编译。

可选地,根据该M个子设计得到与该M个子设计一一对应的M个HDL文件组,也可以描述为,根据该M个子设计反编译输出与该M个子设计一一对应的M个HDL文件组。应理解,该M个HDL文件组中的每个HDL文件组包括一个或多个HDL文件,意味着该M个子设计中的每个子设计可以反编译输出一个或多个HDL文件,具体需要结合子设计的内容确定,不做限定。

可选地,若M个子设计中的第一子设计内例化了不属于该第一子设计的模块,根据M个子设计得到与该M个子设计一一对应的M个HDL文件组可以包括:根据第一子设计中被例化模块的输入和输出创建被例化模块的前向声明;根据第一子设计和第一子设计中被例化模块的前向声明得到第一子设计对应的HDL文件组,参见图10。应理解,前向声明中包括被例化模块的输入和输出,不包括模块具体内容的实现。

在本申请实施例中,若M个子设计中的第一子设计内例化了不属于第一子设计的模块,可以根据该第一子设计和该第一子设计中被例化模块的前向声明得到该第一子设计对应的HDL文件组,使得该第一子设计对应的HDL文件组可以独立在黑盒模式下进行编译。

可选地,实际第一AST中可以包括全局元素,也可以不包括,需要根据原始设计中是否设计了全局元素确定,本申请对此不做限定。

可选地,若第一AST中包括全局元素,方法200还可以包括:根据第一AST得到公共的HDL文件,该公共的HDL文件包括全局元素,M个HDL文件组中的一个或多个可以引用该公共的HDL文件。

在本申请实施例中,若第一AST中包括全局元素,可以根据该第一AST得到一个公共的HDL文件,且M个HDL文件组中的一个或多个可以引用该公共的HDL文件,从而为M个HDL文件组的并行编译创造前提条件。

应理解,全局元素是指当前设计中所有模块都可以访问到的元素。可选地,实际操作中,M个HDL文件组可以均引用该公共的HDL文件,也可以仅仅是需要访问该全局元素的HDL文件组引用该公共的HDL文件,本申请对此不做限定。

可选地,该全局元素可以包括全局结构struct、全局任务task、全局接口interface、全局函数function等中的一项或多项。

可选地,若原始设计的模块在实例化时指定了例化参数,M个子设计的模块在实例化时则采用实际数值代替该例化参数,同时,所涉及到的生成块(Generate Block)等生成代码被展开,具体可参见下文图10至图12所示的子设计1至3。

在本申请实施例中,若原始设计的模块在实例化时指定了例化参数,则M个子设计的模块在实例化时可以采用实际数值代替该例化参数,从而为M个HDL文件组的并行编译创造前提条件。

可选地,M个HDL文件组中每个HDL文件可以采用目标格式,该目标格式包括目标缩进和换行,有助于相关人员在使用过程中对其进行调试。

在本申请实施例中,通过上述HDL并行编译的前端解决方法,将原始设计进行拆分得到M个子设计,再根据M个子设计得到M个相互之间无依赖的HDL文件组,使得该M个HDL文件组可以独立的传递给后端编译工具,进而使得后端编译工具可以对这些HDL文件组进行并行编译。

可选地,在后端编译过程中,上述M个HDL文件组可以对应K个编译器,每个编译器用于对所对应的一个或多个HDL文件组进行编译,其中,K为大于或等于1且小于或等于M的正整数,以通过K个编译器实现该M个HDL文件组的并行编译。可选地,在M=K时,上述M个HDL文件组可以对应M个编译器,以通过M个编译器实现该M个HDL文件组的并行编译。

下面结合图3至图12,对本申请方案所涉及到的AST改写、反编译输出公共的HDL和子设计对应的HDL文件组等内容进行详细介绍。

图3是本申请实施例提供的另一种HDL并行编译的前端解决方法的示例图。如图3所示,对于输入的原始设计的HDL文件,处理模块可以执行如下步骤:

1)首先对输入的原始设计的HDL文件进行语法分析和阐述,得到与该原始设计等价的第一AST。

2)接着将第一AST输入到AST改写模块,以将第一AST中的XMR访问改写成端口访问,改写完成后输出新的第二AST至AST反编译模块。应理解,关于XMR访问的改写可参见下文图4至图6部分的相关描述。

3)AST反编译模块将第二AST拆分成若干份子设计,然后将每个子设计反编译输出对应的HDL文件组,这些文件组可独立编译。

应理解,每个子设计反编译输出的HDL文件组中可以包括一个HDL文件,也可以包括多个HDL文件,需要根据实际情况确定,不做限定。

可选地,若第二AST中存在全局元素,那么AST反编译模块还需要输出一个公共的HDL文件,该公共的HDL文本文件包括全局元素,且所有子设计的HDL文件组中的一个或多个可以引用该文件。

应理解,若子设计内例化了不属于本子设计的模块,那么需要同时输出一份这些被例化模块的前向声明,用于黑盒模式编译。

应理解,若所述原始设计的模块在实例化时指定了例化参数,那么在转化为AST后,这些参数均被实际数值所代替,使得在拆分得到的多个子设计中,这些参数也被实际数值所代替,同时,所涉及到的生成块等生成代码被展开。

应理解,反编译输出的HDL文件的内容需要保持一定的缩进和换行,便于调试。

应理解,关于通过反编译得到公共的HDL文件和M个相互之间独立的HDL文件组可参见下文图7至图12部分所涉及到的相关描述。

应理解,第一AST的改写主要是在第一AST上依次访问每一个AST节点,如果存在XMR访问的节点,则将该节点的XMR访问改写成端口访问,所有涉及的模块上均添加对应的端口。下面结合图4对第一AST的改写流程400进行详细介绍。如图4所示,流程400主要包括步骤S410至S490,下面对这些步骤进行介绍。

S410,判断在第一AST上是否可以获得下一节点。

依次访问第一AST上的节点的过程中,在访问完成当前节点,要判断在是否可以获得下一个节点。若可以获得下一节点,则针对下一节点继续执行步骤S420;若不可以获得下一节点,则意味着当前节点已经是第一AST上的最后一个节点,则执行步骤S490,结束访问。

S420,判断该节点是否存在XMR访问。

若该节点不存在XMR访问,则回到步骤S410,继续访问下一节点;若该节点存在XMR访问,则继续执行步骤S430至S480。

S430,获得被该节点(即为上述第一节点)引用的节点(即为上述第二节点)。

S440,获得从该节点到被引用节点路径上所跨过的模块。

S450,给路径上所跨过的模块均添加端口。

S460,修改XMR访问为端口访问。

S470,获得该节点到被引用节点之间的最小公共父节点。

S480,在最小公共父节点上添加局部变量,并完成功能端口连接。

S490,结束访问。

为便于理解,下面结合图5和图6,对将XMR访问改写成端口访问进行示例性介绍。应理解,图5和图6中的第一AST和第二AST的呈现形式和内容仅作为示例,不构成对本申请方案的限定。

图5是本申请实施例提供的一种将XMR访问改写成端口访问的示例图。其中,图5中的(a)为第一AST的示例图,图5中的(b)为第一AST中XMR访问的等效飞线示例图,图5中的(c)为改写后的第二AST的示例图。图6是本申请实施例提供的另一种将XMR访问改写成端口访问的示例图。图6中的第一AST为图5中的(a)的另一种呈现方式,图6中的第二AST为图5中的(c)的另一种呈现方式。

如图5中的(a)和图6中的第一AST所示,在该示例中,第一AST共包括4个模块:Top模块、A模块、B模块和C模块。其中,Top模块内实例化了一个A模块和一个C模块,A模块内实例化了一个B模块。在B模块内,语句y=top.c.x即为XMR访问节点。而且,很显然,被该XMR访问节点引用的节点为C模块内的x。

应理解,XMR访问可以等效于实际电路中的飞线,如图5中的(b)所示。其中,飞线也称跳线,是指印刷电路板上因设计缺陷、测试目的、或是有其他设计考量,将电路板上的两个节点直接用电线连通的一种方法。可以看出,图5中的(b)所示飞线一共穿越了三个模块:模块B、模块A和模块C,即就是说XMR访问节点到被引用节点一共穿越了三个模块:模块B、模块A和模块C。

在该实施例中,可以在所有被飞线穿越的模块均添加一个端口,将B模块内语句y=top.c.x的XMR访问改写为对B模块端口的访问(如将图6中第一AST中的y=top.c.x改写为图6中第二AST中的y=z;将图6中第一AST中的int x改写为图6中第二AST中的int x;assign z=x;),并获得XMR访问节点到被引用节点的最小公共父节点(即Top节点),在Top节点上添加局部变量(即参见图6中integer z),并完成功能端口连接,如图5中的(c)和如图6中的第二AST所示。从而使得第一AST中的XMR访问被消除,为并行编译创造了前提条件。

下面结合图7,对AST反编译模块的工作流程进行示例性介绍。如图7所示,完成XMR改写的第二AST会被拆分成若干份子设计,且所有子设计都可以访问到的元素,如全局的函数、任务、结构、接口等信息被反编译输出到一个公共的HDL文件中,这个公共的HDL文件可以被若干份子设计中的一个或多个所引用。然后依次将每一个子设计进行反编译,输出到各自独立的HDL文件组中。应理解,若子设计内例化了不属于本子设计的模块,那么在反编译得到的HDL文件组中,还需要包括这些被例化模块的前向声明,以便用于黑盒模式编译。

为便于理解,下面结合附图8至12,介绍图8所示的设计在经过拆分和反编译后输出的公共元素的HDL文件和多个子设计对应的HDL文件(应理解,该示例中,以一个子设计反编译生成一个HDL文件为例进行介绍)的具体形式。应理解,该多个子设计对应的HDL文件相互之间无依赖,可以独立编译。应理解,图8所示设计仅为示例,不构成对本申请实施例的限定。

图8是本申请实施例提供的一个不存在XMR访问的设计示例图。应理解,该不存在XMR访问的设计可以是指不存在XMR访问的原始设计,也可以是指消除了原始设计中XMR访问的设计(即经过改写的设计)。如图8所示,该设计共包括2个模块:top模块和add模块,其中,top模块为顶层模块,在其内部指定不同的参数(8和16)例化了2个add模块。应理解,add模块为简单的加法模块,通过调用全局函数add_f可以实现加法运算。

图9是基于图8所示设计输出的公共的HDL文件的示例图。如图9所示,在该实施例中,公共的HDL文件中包括全局函数add_f。

图10是基于图8所示设计输出的子设计1的HDL文件的示例图。如图10所示,该子设计只包含top模块,另外由于在该top模块内例化了两个不属于本子设计的模块add和模块__preifx_add,所以子设计1的HDL文件还包含一个关于这2个模块的前向声明文件(即图10中的//top_bb.v部分),该前向声明包括了模块add和模块__preifx_add的输入和输出,以便用于EDA后端黑盒模式编译。

另外,在图8所示设计中,top模块内的add0和add1在例化时均指定了例化参数,但是在图10所示的子设计1中的top模块,add0和add1在例化时均直接采用实际数值进行例化。

图11是基于图8所示设计输出的子设计2的HDL文件的示例图。如图11所示,该子设计包含图8所示设计中的add模块的内容,并且指定了模块参数LENGTH的值为8,用于例化子设计1中的add0实例。

图12是基于图8所示设计输出的子设计3的HDL文件的示例图。如图12所示,与子设计2类似,该子设计也包含图8所示设计中的add模块的内容,但是与子设计2不同的是指定了模块参数LENGTH的值为16,用于例化子设计1中的add1实例。

应理解,该示例中的子设计1至3中均引用了全局函数add_f,但应理解,实际中子设计1中也可以不引用该全局函数add_f,不做限定。

根据图9至12可以看出图8所示设计被拆分并输出了3个子设计对应的3个HDL文件和一个公共元素的HDL文件,其中,这些子设计的HDL文件之间相互独立,可以并行编译,从而能够提高编译效率。而且,将这3个子设计的编译结果合并,即可得到图8所示设计的编译结果。

图13是本申请实施例提供的一种针对HDL并行编译的前端解决装置。如图13所示,该装置1300包括处理模块1310,该处理模块1310用于,根据原始设计得到与原始设计等价的第一AST;根据第一AST得到M个子设计;根据M个子设计得到与M个子设计一一对应的M个HDL文件组,该M个HDL文件组之间相互无依赖,该M个HDL文件组中的每个HDL文件组包括一个或多个HDL文件,该M个HDL文件组对应K个编译器,每个编译器用于对所对应的一个或多个HDL文件组进行编译,其中,M为大于或等于2的正整数,K为大于或等于1且小于或等于M的正整数

可选地,若第一AST的多个节点中存在XMR访问的第一节点,处理模块1310还可以用于,对第一AST进行改写,得到第二AST,该第二AST不存在XMR访问;根据第二AST得到M个子设计。

可选地,处理模块1310还可以用于,获得被第一节点引用的第二节点;获得从第一节点到第二节点路径上所跨过的模块;给路径上所跨过的模块均添加端口;将第一节点的XMR访问改写为端口访问;获得第一节点到第二节点的最小公共父节点;在最小公共父节点上添加局部变量,并完成功能端口连接。

可选地,若M个子设计中的第一子设计内例化了不属于第一子设计的模块,处理模块1310还可以用于,根据第一子设计中被例化模块的输入和输出创建被例化模块的前向声明;根据第一子设计和第一子设计中被例化模块的前向声明得到第一子设计对应的HDL文件组。

可选地,若第一AST中包括全局元素,处理模块1310还可以用于,根据第一AST得到公共的HDL文件,该公共的HDL文件包括全局元素,该M个HDL文件组中的一个或多个分别引用公共的HDL文件。

可选地,全局元素可以包括全局结构、全局任务、全局接口、全局函数等中的一项或多项。

可选地,若原始设计的模块在实例化时指定了例化参数,M个子设计的模块在实例化时可以采用实际数值代替例化参数。

可选地,M个HDL文件组中每个HDL文件可以采用目标格式,目标格式包括目标缩进和换行。

图14是本申请实施例提供的一种针对HDL并行编译的前端解决装置的硬件结构示例性框图。可选地,该装置1400具体可以是一种计算机设备。该装置1400包括存储器1410、处理器1420、通信接口1430以及总线1440。其中,存储器1410、处理器1420、通信接口1430通过总线1440实现彼此之间的通信连接。

存储器1410可以是只读存储器(Read-Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器1410可以存储程序,当存储器1410中存储的程序被处理器1420执行时,处理器1420用于执行本申请实施例的前端解决方法的各个步骤。

处理器1420可以采用通用中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(Ggraphics Processing Unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请方法实施例的前端解决方法。

处理器1420还可以是一种集成电路芯片,具有信号处理能力。在实现过程中,本申请的前端解决方法可以通过处理器1420中的硬件的集成逻辑电路或者软件形式的指令完成。

上述处理器1420还可以是通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、ASIC、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1410,处理器1420读取存储器1410中的信息,结合其硬件完成本申请实施例的装置中包括的模块所需执行的功能,或者执行本申请方法实施例的前端解决方法。

通信接口1430使用例如但不限于收发器一类的收发装置,来实现装置1400与其他设备或通信网络之间的通信。

总线1440可包括在装置1400各个部件(例如,存储器1410、处理器1420、通信接口1430)之间传送信息的通路。

本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,实现上述前端解决方法。

本申请实施例还提供了一种算机程序产品,其特征在于,包括:计算机程序,当计算机程序被运行时,使得计算机执行上述前端解决方法。

本申请实施例还提供了一种计算设备,包括:至少一个处理器和存储器,所述至少一个处理器与所述存储器耦合,用于读取并执行所述存储器中的指令,以执行上述前端解决方法。

本申请实施例还提供了一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行上述前端解决方法。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 一种硬件描述语言增量编译方法及装置
  • 多线程并行执行装置、广播流再现装置、广播流储存装置、储存流再现装置、储存流再编码装置、集成电路、多线程并行执行方法、多线程编译器
技术分类

06120116514336