背景技术
在芯片设计中,顶层设计人员一般会根据芯片的功能特性以及实现方法将其划分为若干个功能模块,并定义好功能模块之间的接口和流水线,然后将功能模块分给不同的设计人员进行代码的实现。对于较大的功能模块,设计人员会从实现角度将功能模块再划分成较小的子模块,甚至会将子模块逐级的细分成更小的子模块以方便实现。
在实现时,设计人员设计人员一般会首先进行底层子模块的代码设计,然后将底层子模块调用或集成为高一层的模块,最后逐级向上集成为功能模块,然后再将功能模块集成为整个芯片顶层。
在模块的集成过程中,设计人员使用verilog/system verilog来集成底层模块,将底层模块的接口手动连接起来构成子模块,然后按照同样的方法将子模块接口手动连接起来,依次逐级集成为功能模块以及芯片顶层。可见模块划分是一个从上到下的顺序,而模块集成是一个从下到上的顺序,如图1所示。
在实际的开发过程中,设计人员一般通过手动编写代码来进行模块的集成,但如果功能模块和子模块较多,且模块的接口比较多,在模块集成的时候会比较繁琐且比较容易出错,主要体现在:
1、设计过程中经常会增加、删减或修改模块接口,如果模块接口比较多,在代码中手动的去修改接口比较容易出错;
2、模块集成后,遇到接口变动的情况,也需要在代码中手动修改接口连接,在接口比较多的时候,同样容易连接错误;
以上两点可见,设计人员在代码中手动去修改接口,如果遇到接口比较多,容易出现连接出错的问题,影响设计和调试效率,尤其是在大规模芯片设计中,模块划分比较复杂,接口众多,模块也经常会被多次集成例化,如果采用手动写代码的方式,会非常复杂,费时费力而且容易出错。
发明内容
有鉴于此,本发明的目的在于提供一种芯片设计中模块自动生成和集成方法、装置、设备及介质,以改善上述问题。
为了达到上述目的,本发明提供以下技术方案:
一种芯片设计中模块自动生成和集成方法,其包括:
获取接口定义文件;所述接口定义文件包括各个功能模块的接口的定义;
解析所述接口定义文件,以生成各个功能模块的的顶层代码;其中,所述顶层代码中包括模块接口的声明以及例化一个具有相同接口的子顶层;
接收用户代码,并将所述用户代码放到子顶层中,以生成相应的各个功能模块;
执行预先编写的互联接口模板脚本,根据指定的各个功能模块的连接关系,通过调用verilog-mode完成各个功能模块的互联集成。
优选地,所述接口定义文件为excel文件,且在功能模块划分时将各个功能模块的接口定义在excel文件中。
优选地,还包括:
当检测到功能模块的接口发生变化时,更新所述excel文件;
解析所述excel文件以生成新的顶层代码,并将子顶层接口逻辑的替换成新的顶层代码。
优选地,在将所述用户代码放到子顶层中时,同时将顶层代码和用户代码隔离开。
优选地,还包括:
在芯片顶层嵌入perl脚本;其中,所述perl脚本描述了每个功能模块的实例次数以及互联接口模板;
在顶层脚本中运行perl脚本产生所需要的互联接口模板以及实例代码,以实现功能模块的多次例化以及自动连接。
优选地,还包括:
根据待设计芯片被划分的层级,依次向上互联,直至到达芯片顶层,以最终生成待测代码。
优选地,还包括:
调用仿真工具对所述待测代码进行仿真。
本发明实施例还提供了一种芯片设计中模块自动生成和集成装置,其包括:
接口定义文件获取单元,用于获取接口定义文件;所述接口定义文件包括各个功能模块的接口的定义;
解析单元,用于解析所述接口定义文件,以生成各个功能模块的的顶层代码;其中,所述顶层代码中包括模块接口的声明以及例化一个具有相同接口的子顶层;
功能模块生成单元,用于接收用户代码,并将所述用户代码放到子顶层中,以生成相应的各个功能模块;
互联集成单元,用于执行预先编写的互联接口模板脚本,根据指定的各个功能模块的连接关系,通过调用verilog-mode完成各个功能模块的互联集成。
本发明实施例还提供了一种芯片设计中模块自动生成和集成设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的芯片设计中模块自动生成和集成方法。
本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的芯片设计中模块自动生成和集成方法。
综上所述,本发明实施例提供的芯片设计中模块自动生成以及集成的方法具体如下优点:
1、对于用户来说,只需要关注接口定义文件的修改维护,在修改完成后,调用一次脚本即可完成功能模块接口的代码修改以及逐级集成操作,避免了手动修改代码的复杂和容易出错等问题,大大提高了设计效率以及团队协作的效率。
2、将perl脚本集成到逻辑代码中,在复杂的功能模块集成时自动生成所需要的互联接口模板以及实例化RTL代码。同样的,在用户逻辑中,如果有较多重复性的代码,也可嵌入perl脚本进行自动生成。
具体实施方式
下面结合具体实施例和附图对本发明方案作进一步的阐述。
请参阅图2,本发明第一实施例提供了一种芯片设计中模块自动生成和集成方法,其可由芯片设计中模块自动生成和集成设备(以下简称集成设备)来执行,特别的由所述集成设备内的一个或者多个处理器来执行,以实现如下步骤:
S101,获取接口定义文件;所述接口定义文件包括各个功能模块的接口的定义。
具体地,在本实施例中,可以在进行功能模块的划分时,将各个功能模块的接口定义在接口定义文件中。其中,所述接口定义文件可为excle文件,也可以是其他文件,本发明不做具体限定。
可以理解的是,在本实施例中,由于接口是定义的接口定义文件中,因此当接口发生变化,例如增加、删减或者改动时,只需修改接口定义文件即可。
S102,解析所述接口定义文件,以生成各个功能模块的的顶层代码;其中,所述顶层代码中包括模块接口的声明以及例化一个具有相同接口的子顶层。
在本实施例中,可通过调用预先配置的脚本来解析接口定义文件,从而自动生成各个功能模块的顶层代码。其中,接口是在excel中定义的,通过python脚本解析接口定义excel文件,即可自动生成模块的顶层代码,顶层代码中包括功能模块的接口的声明以及例化一个具有相同接口的子顶层。
S103,接收用户代码,并将所述用户代码放到子顶层中,以生成相应的各个功能模块。
其中,为了避免用户修改和脚本自动生成的代码的冲突,可将自动生成的顶层代码和用户代码隔离开来。具体地,代码自动生成时,自动产生模块顶层,并在模块顶层中自动集成子顶层代码。而用户代码则在子顶层代码中开发,这样就隔离了顶层和用户代码。当接口有变动时,执行脚本生成新的顶层代码,并将子顶层接口逻辑替换成新的顶层代码。
S104,执行预先编写的互联接口模板脚本,根据指定的各个功能模块的连接关系,通过调用verilog-mode完成各个功能模块的互联集成。
在本实施例中,在生成各个功能模块后,需要将这些功能模块集成。在功能模块集成时,如果各个功能模块之间的互联接口名称不同,需要编写互联接口模板脚本,指定各个接口之间的连接关系。最后互联接口模板脚本通过调用verilog-mode完成各个功能模块的互联集成。
为便于对本发明的理解,下面将以一实际的例子来说明本发的应用。
请参阅图3,图3中,整个芯片顶层包括3个功能模块1和4个功能模块2,功能模块1又包括3个子模块,功能模块2也包括3个子模块。功能模块的接口的自动修改以及模块集成过程如下:
首先,在功能模块划分时将接口定义在excel文件中,使用脚本解析excel文件,自动生成各个功能模块的顶层代码。顶层代码中包括模块接口的声明以及例化一个具有相同接口的子顶层,用户代码放到子顶层中,将自动生成的代码和用户代码隔离开来,避免用户修改和脚本自动生成的冲突(如图3中功能模块11所示)。当接口有变动时,执行脚本生成新的顶层代码,并将用户子顶层接口逻辑替换成新的顶层代码。
当需要进行功能模块的修改时,在功能模块接口修改完成后,启动高一层次的模块集成操作。在功能模块集成时,如果各个功能模块之间的互联接口名称不同,编写互联接口模板脚本,指定连接关系。最后互联接口模板脚本通过调用verilog-mode完成各个功能模块的互联集成。如图3中功能模块1和功能模块2所示,根据互联接口模板脚本自动完成几个功能子模块的互联。
如果有多个层级,则在互联接口模板脚本中增加代码,按照上述步骤依次向上互联,直至到达芯片顶层。在顶层的功能模块集成时,如图3所示,在芯片顶层包括3个功能模块1和4个功能模块2,如果按照上述步骤进行互联,则仍需要手动在用户顶层对功能模块1和2进行多次例化。如果例化次数更多或者不同实例之间互联接口需要修改,则需要手动修改互联接口模板。所以本实施例在芯片顶层嵌入perl脚本,在脚本中描述多个功能模块的实例次数以及接口模板。当有改动时,只需修改perl脚本,然后在顶层脚本中运行perl脚本即可产生所需要的接口模板以及实例代码。
顶层脚本产生后,通过调用verilog-mode完成顶层代码的生成。需要注意的是,除芯片顶层外,如果在其他功能模块集成时有类似的需求,也可以像上述步骤中一样嵌入perl脚本,完成相关代码的自动生成。
最后,在所有代码自动生成后,脚本调用仿真工具对代码进行仿真。
综上所述,本发明实施例提供的芯片设计中模块自动生成以及集成的方法具体如下优点:
1、对于用户来说,只需要关注接口定义文件的修改维护,在修改完成后,调用一次脚本即可完成功能模块接口的代码修改以及逐级集成操作,避免了手动修改代码的复杂和容易出错等问题,大大提高了设计效率以及团队协作的效率。
2、将perl脚本集成到逻辑代码中,在复杂的功能模块集成时自动生成所需要的互联接口模板以及实例化RTL代码。同样的,在用户逻辑中,如果有较多重复性的代码,也可嵌入perl脚本进行自动生成。
请参阅图4,本发明第二实施例还提供了一种芯片设计中模块自动生成和集成装置,其包括:
接口定义文件获取单元210,用于获取接口定义文件;所述接口定义文件包括各个功能模块的接口的定义;
解析单元220,用于解析所述接口定义文件,以生成各个功能模块的的顶层代码;其中,所述顶层代码中包括模块接口的声明以及例化一个具有相同接口的子顶层;
功能模块生成单元230,用于接收用户代码,并将所述用户代码放到子顶层中,以生成相应的各个功能模块;
互联集成单元240,用于执行预先编写的互联接口模板脚本,根据指定的各个功能模块的连接关系,通过调用verilog-mode完成各个功能模块的互联集成。
本发明第三实施例还提供了一种芯片设计中模块自动生成和集成设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的芯片设计中模块自动生成和集成方法。
本发明第四实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的芯片设计中模块自动生成和集成方法。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。