一种芯片寄存器代码结构的生成方法、装置及存储介质与流程

文档序号:18105959发布日期:2019-07-06 11:39阅读:356来源:国知局
一种芯片寄存器代码结构的生成方法、装置及存储介质与流程

本发明涉及数字集成电路的逻辑开发技术领域,具体涉及一种芯片寄存器代码结构的生成方法、装置及存储介质。



背景技术:

随着数字集成电路(integratedcircuit,ic)设计技术和制造工艺的飞速发展,其复杂程度日益增加,相应地,单芯片内所包含的晶体管数量越来越多,例如:ic芯片内部集成的晶体管数量从千万门级到几十亿门级不等。数字集成电路的开发、hdl设计与验证以及软件驱动开发,都属于逻辑设计范畴,寄存器的描述贯穿在整个逻辑设计中。因此,对于每个逻辑开发团队而言,维护和管理这些越来越多且越来越复杂的寄存器,成为集成电路设计过程中的重要环节,这将有利于提高寄存器描述的开发效率。

在目前现有的逻辑开发过程中,对于寄存器的描述,采用的是在不同的设计阶段,通过人工整理或书写文档代码,当芯片内部集成的功能模块较少时,人工书写或管理寄存器代码,对于逻辑开发的工作进程影响不大,但是当集成电路内部功能较为复杂,存在成千上万行的寄存器代码和繁多的关键逻辑功能模块时,利用人工整理寄存器代码,此时,既容易出错,又会耗费人工大量的工作时间,进而导致工作效率较低。



技术实现要素:

有鉴于此,本发明实施例提供了一种芯片寄存器代码结构的生成方法,以解决利用人工整理成千上万行且较为复杂的寄存器代码时,既容易出错,又会耗费人工大量的工作时间,进而导致工作效率较低的问题。

根据第一方面,本发明实施例提供了一种芯片寄存器代码结构的生成方法,包括如下步骤:

获取待生成代码结构的第一寄存器代码文档,并从所述第一寄存器代码文档中提取寄存器代码参数,所述第一寄存器代码文档按照第一预设格式命名;

根据所述寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构;

根据所述顶层模块结构,导出用于呈现所述多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,所述第二寄存器代码文档按照第二预设格式命名;

通过对所述第二寄存器代码文档的内容进行处理,以生成所述待生成代码结构。

结合第一方面,在第一方面第一实施方式中,所述根据所述寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构的步骤还包括:

启动芯片寄存器代码设计软件;

将所述寄存器代码参数加载在所述芯片寄存器代码设计软件中;

在所述芯片寄存器代码设计软件的模块设计区域中确定所述多个逻辑功能子模块;

将所述多个逻辑功能子模块进行例化得到所述顶层模块结构。

结合第一方面第一实施方式,在第一方面第二实施方式中,所述根据所述顶层模块结构,导出用于呈现所述多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,所述第二寄存器代码文档按照第二预设格式命名的步骤还包括:

根据所述顶层模块结构,执行所述顶层模块结构的文档导出操作得到所述第二寄存器代码文档,并将所述第二寄存器代码文档按照第二预设格式命名。

结合第一方面,在第一方面第三实施方式中,通过对所述第二寄存器代码文档的内容进行处理,以生成所述待生成代码结构的步骤还包括:

对从所述第二寄存器代码文档中查找的标记有第一预设标识符所在行区域的代码内容进行统一格式;

将所述统一格式后的所述标记有第一预设标识符所在行区域的代码内容进行简化,并得到简化结果;

根据所述简化结果,生成所述待生成代码结构。

结合第一方面第三实施方式,在第一方面第四实施方式中,,所述对从所述第二寄存器代码文档中查找的标记有第一预设标识符所在行区域的代码内容进行统一格式的步骤还包括:

在所述第二寄存器代码文档中,按照第一方向至第二方向逐行循环搜索出所述标记有第一预设标识符所在行区域的代码内容;

保留所述标记有第一预设标识符所在行区域的代码内容;

导出仅包含所述标记有第一预设标识符所在行区域的代码内容的第三寄存器代码文档,所述第三寄存器代码文档保持所述多个逻辑功能子模块相互之间存在逻辑层次关系不变,所述第三寄存器代码文档按照第三预设格式命名;

统一所述第三寄存器代码文档的代码内容的格式。

结合第一方面第四实施方式,在第一方面第五实施方式中,将所述统一格式后的所述标记有预设标识符所在行区域的代码内容进行简化,并得到简化结果的步骤还包括:

在所述第三寄存器代码文档中,查看与标记有第一预设标识符相邻的各行空白区域;

统计所述各行空白区域的各空格字符总数量值;

计算所述各空格字符总数量值与预设数值的商值得到二者的各余数值,所述预设数值为数字2的倍数;

计算所述各空格字符总数量值与其对应的所述余数值的差值;

按照所述各空格字符总数量值与其对应的所述余数值的差值,从所述各空白区域中删减空格;

导出删减所述空格的第四寄存器代码文档,所述第四寄存器代码文档保持所述多个逻辑功能子模块相互之间存在逻辑层次关系不变,所述第四寄存器文档按照第四预设格式命名;

在所述第四寄存器代码文档中,按照所述第一方向至所述第二方向逐行循环搜索出存在相同代码内容的行区域,所述相同代码内容的行区域是由每个逻辑功能子模块经过多次重复例化形成;

将所述相同代码内容的行区域进行合并,并标注经过所述重复例化的次数;

在所述第四寄存器代码文档中,将所述各行空白区域经过删减所述空格后的剩余部分空格使用第二预设标识符填充;

统一填充后的所述第四寄存器代码文档的内容的格式,并导出第五寄存器代码文档,所述第五寄存器代码文档保持所述多个逻辑功能子模块相互之间存在逻辑层次关系不变,所述第五寄存器代码文档按照第五预设格式命名;

利用脚本指令,将所述第五寄存器代码文档按照所述逻辑层次关系进行文档折叠得到所述简化结果。

结合第一方面或第一方面任一实施方式,在第一方面第六实施方式中,所述寄存器代码为rtl代码,所述待生成代码结构为rtl树状分层结构。

根据第二方面,本发明实施例提供一种芯片寄存器代码结构的生成装置,包括:

第一获取模块,用于获取待生成代码结构的第一寄存器代码文档,并从所述第一寄存器代码文档中提取寄存器代码参数,所述第一寄存器代码文档按照第一预设格式命名;

第一生成模块,用于根据所述寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构;

导出模块,用于根据所述顶层模块结构,导出用于呈现所述多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,所述第二寄存器代码文档按照第二预设格式命名;

第二生成模块,用于通过对所述第二寄存器代码文档的内容进行处理,以生成所述待生成代码结构。

根据第三方面,本发明实施例提供一种存储介质,其上存储有计算机指令,该指令被处理器执行时实现第一方面或者第一方面的任意一种实施方式所述的芯片寄存器代码结构的生成方法的步骤。

根据第四方面,本发明实施例提供一种芯片寄存器设计设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现第一方面或者第一方面的任意一种实施方式所述的芯片寄存器代码结构的生成方法的步骤。

本发明实施例技术方案,具有如下优点:

本发明提供一种芯片寄存器代码结构的生成方法、装置及存储介质,方法包括:获取待生成代码结构的第一寄存器代码文档,并从第一寄存器代码文档中提取寄存器代码参数,第一寄存器代码文档按照第一预设格式命名;根据寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构;根据顶层模块结构,导出用于呈现多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,第二寄存器代码文档按照第二预设格式命名;通过对第二寄存器代码文档的内容进行处理,生成待生成代码结构。本发明有利于芯片前端或后端的代码设计工程师或代码设计团队开发或研究代码的工作效率,且有利于代码设计工程师一目了然地获知各逻辑功能子模块的代码内容信息。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中芯片寄存器代码结构的生成方法的第一流程图;

图2为本发明实施例中第一寄存器代码文档的内容示意图;

图3为本发明实施例中芯片寄存器代码结构的生成方法的第二流程图;

图4为本发明实施例中芯片寄存器代码结构的生成方法的第三流程图;

图5为本发明实施例中芯片寄存器代码结构的生成方法的第四流程图;

图6a为本发明实施例中标记有第一预设标识符的芯片寄存器代码内容的第一示意图;

图6b为本发明实施例中标记有第一预设标识符的芯片寄存器代码内容的第二示意图;

图6c为本发明实施例中标记有第二预设标识符的芯片寄存器代码内容的示意图;

图7为本发明实施例中芯片寄存器代码结构的生成方法的第五流程图;

图8为本发明实施例中芯片寄存器代码结构的生成装置的第一结构框图;

图9为本发明实施例中芯片寄存器代码结构的生成装置的第二结构框图;

图10为本发明实施例中芯片寄存器代码结构的生成装置的第三结构框图;

图11为本发明实施例中芯片寄存器设计设备的硬件示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

本发明实施例提供一种芯片寄存器代码结构的生成方法,此处的芯片寄存器代码结构为寄存器代码形成的结构图,用于芯片的前端或后端的开发设计场景中,如图1所示,该芯片寄存器代码结构的生成方法包括如下步骤:

步骤s1:获取待生成代码结构的第一寄存器代码文档,并从第一寄存器代码文档中提取寄存器代码参数,第一寄存器代码文档按照第一预设格式命名。此处的待生成代码结构为依据第一寄存器代码文档即将生成的代码结构图,而第一寄存器代码文档为代码设计工程师或用户已设计的初始寄存器代码文档,该寄存器代码文档记载了用于描述代码指令的代码参数,第一寄存器代码文档可以为word文档,也可以为excel文档,第一寄存器代码文档可以按照第一预设格式命名,第一预设格式为自定义格式,主要为了与其它文档进行区别,例如:第一预设格式为word-0,或,excel-0,故第一寄存器文档按照word-0或excel-0进行命名。如图2所示,其为第一寄存器代码文档的代码内容,在第一寄存器代码文档中提取寄存器代码参数。本实施例中的寄存器代码为rtl代码,作为其它可替换的实施方式,寄存器代码还可以为验证模型代码或软件驱动模型代码,在此,不以此为限制,在图2中,第一寄存器代码文档中的代码参数为rtl代码。rtl(registertransferlevel)代码为寄存器传输级的代码指令,在集成电路设计中,rtl是用于描述同步数字电路操作的抽象级。

步骤s2:根据寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构。此处的顶层模块结构表示嵌入多个逻辑功能子模块的结构,其是通过模块例化而成。

在一具体实施例中,上述步骤s2在执行的过程中,如图3所示,可具体包括如下步骤:

步骤s21:启动芯片寄存器代码设计软件。此处的芯片寄存器代码设计软件为verdi软件,该verdi软件是调试芯片寄存器代码的通用软件。例如:在linux操作系统中启动verdi软件。

步骤s22:将寄存器代码参数加载在芯片寄存器代码设计软件中。将图2中的第一寄存器代码的寄存器代码参数加载在verdi软件中运行。

步骤s23:在芯片寄存器代码设计软件的模块设计区域中确定多个逻辑功能子模块。在verdi软件的模块化设计区域,即在verdi软件可视化界面的“instance”栏中,确定待生成代码结构的多个逻辑功能子模块,该多个逻辑功能子模块包含诸多关键逻辑功能子模块。

步骤s24:将多个逻辑功能子模块进行例化得到顶层模块结构。此处的例化是将这多个逻辑功能子模块的输入接口和输出接口根据逻辑对应关系连接起来,此处的顶层模块结构为经过例化后所形成包含较多的逻辑功能子模块。例如:存在4个逻辑功能子模块,其分别为a逻辑功能子模块、b逻辑功能子模块、c逻辑功能子模块和d逻辑功能子模块,a嵌入在b中,b嵌入c中,c嵌入在d中,d就是包含a、b、c的顶层模块结构。

步骤s3:根据顶层模块结构,导出用于呈现多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,第二寄存器代码文档按照第二预设格式命名。

在一具体实施例中,上述步骤s3在执行的过程中,可具体包括如下步骤:

根据顶层模块结构,执行顶层模块结构的文档导出操作得到第二寄存器代码文档,并将第二寄存器代码文档按照第二预设格式命名。顶层模块结构可表示与其包含的多个逻辑功能子模块的逻辑层次关系,例如:将三个逻辑功能子模块接成一个顶层模块结构,这三个逻辑功能子模块分别完成了:与,或,加三种运算,通过例化操作将三个逻辑功能子模块综合成一个顶层模块结构,该顶层模块结构可呈现出其包含的三个逻辑功能子模块的逻辑层次关系。在图2中,顶层模块结构的顶层例化名为dut。根据经过例化而成的顶层模块结构,执行文档导出操作得到第二寄存器代码文档,并将第二寄存器代码文档按照第二预设格式命名,第二预设格式也按照自定义格式进行命名,主要为了与其它文档进行区别,例如:第二预设格式为word-1,或,excel-1,故第二寄存器文档按照word-1或excel-1进行命名。具体地,例如:在verdi软件中,在“exporthierarchy”栏中,导出以dut为顶层例化名的寄存器代码的第二寄存器代码文档,该第二寄存器代码文档显示了本实施例中的rtl代码相互调用的逻辑层次关系。

步骤s4:通过对第二寄存器代码文档的内容进行处理,以生成待生成代码结构。

在一具体实施例,上述步骤s4在执行的过程中,如图4所示,可具体包括如下步骤:

步骤s41:对从第二寄存器代码文档中查找的标记有第一预设标识符所在行区域的代码内容进行统一格式。

在一具体实施例中,上述步骤s41在执行的过程中,如图5所示,可具体包括如下步骤:

步骤s411:在第二寄存器代码文档中,按照第一方向至第二方向逐行循环搜索出标记有第一预设标识符所在行区域的代码内容。此处的第一方向为第二寄存器代码文档的上方,第二方向为寄存器代码文档的下方。例如:第二寄存器代码文档为excel文档,按照excle从上至下逐行循环搜索出标记有第一预设标识符所在行区域的代码内容,此处的第一预设标识符为“a”,例如:对于图2中的excel而言,从上至下搜索出标记“a”所在的行区域的代码内容,标记有“a”标识符的行区域是本实施例重点研究的代码参数,通过搜索可以快速将非研究对象的代码参数排除,可以提高代码设计工程师后期对寄存器代码进一步开发设计的工作效率。

步骤s412:保留标记有第一预设标识符所在行区域的代码内容。如图2所示,在第二寄存器代码文档中保留筛选出的标记有“a”标识符的行区域的代码内容。

步骤s413:导出仅包含标记有第一预设标识符所在行区域的代码内容的第三寄存器代码文档,第三寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第三寄存器代码文档按照第三预设格式命名。如图6a所示,为在图2中筛选出仅包含标记有第一预设标识符所在行区域的代码内容,例如:将筛选出的标记有“a”标识符的行区域的代码内容重新进行另存成第三寄存器代码文档,该第三寄存器代码文档是在第二寄存器文档的基础上形成,故第三寄存器代码文档仍旧保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,同理,第三预设格式为自定义格式,主要为了与其它文档进行区别,例如:第三预设格式为word-2,或excel-2,故第三寄存器文档按照word-2或excel-2进行命名。

步骤s414:统一第三寄存器代码文档的代码内容的格式。例如:在图6a中,第一行区域的代码内容为:“a:dut_chip(dut_chip(dut_chip))”,其为所生成的“a:entity名(entity名(architecture名))”格式,第二行区域的代码内容为“a:level0(levelxx(levelxx))”,其为所生成的“a:例化名(entity名(architecture名))”,其余各行区域均生成“a:例化名(entity名(architecture名))”,第一行区域和其余各行区域的代码内容的括号中格式均保持一致,即实现了对第三寄存器代码文档的代码内容的格式的初步统一,格式统一的目的为了便于能够快速查看可相互调用的逻辑功能子模块,也提高了待生成代码结构的整齐性。

步骤s42:将统一格式后的标记有第一预设标识符所在行区域的代码内容进行简化,并得到简化结果。

在一具体实施例中,上述步骤s42在执行的过程中,如图7所示,可具体包括如下步骤:

步骤s421:在第三寄存器代码文档中,查看与标记有第一预设标识符相邻的各行空白区域。例如:在图6a中,还可以按照自上至下的方式逐行循环搜索第三寄存器代码文档的所有行区域,搜索出与标记有第一预设标识符相邻的各行空白区域,即在第三寄存器文档的所有行区域中确定出标记有“a”标识符前的空白区域。

步骤s422:统计各行空白区域的各空格字符总数量值。例如:在图6a中,第一行位于标记有“a”标识符前的行空白区域的空格字总符数量为0,第二行位于标记有“a”标识符前的行空白区域的空格字符总数量为5,第三行位于标记有“a”标识符前的行空白区域的空格数量的空格字符总数量为10,第四行位于标记有“a”标识符的行空白区域的空格数量的空格字符总数量为15,同理,剩余行位于标记有“a”标识符前的行空白区域的空格字总符数量在图6b中,可明显看出。

步骤s423:计算各空格字符总数量值与预设数值的各商值得到二者的各余数值,预设数值为数字2的倍数。例如:将空格字符总数量值用n表示,n为非负整数,第一行的空格字符总数量值用n1表示,第二行的空格字符总数量值用n2表示,第三行的空格字符总数量值用n3表示,第四行的空格字符总数量值用n4表示,例如:在图6a中,n1=0;n2=5;n3=10,n4=15。预设数值用m表示,m为数字2的倍数,为了尽可能缩减图6a中的空格数量,优选m至少为4,nmodm(即计算n与m的商值求余)。

步骤s424:计算各空格字符总数量值与其对应的余数值的差值。例如:n1=0;n2=5;n3=10,n4=15;m=4;则第一行:n1modm=0余0,设差值为r1,r1=0-0=0;第二行:n2modm=1余1,设差值为r2,r2=5-1=4;第三行:n3modm=2余2,设差值为r3,r3=10-2=8;第四行:n4modm=3余3,差值为r4,r4=15-3=12。

步骤s425:按照各空格字符总数量值与其对应的余数值的差值,从各空白区域中删减空格。例如:n1=0;n2=5;n3=10,n4=15;m=4;则第一行:n1modm=0余0,设差值为r1,r1=0-0=0,故在第一行的空白区域中删减0个空格;第二行:n2modm=1余1,设差值为r2,r2=5-1=4,故在第二行的空白区域中删减4个空格;第三行:n3modm=2余2,设差值为r3,r3=10-2=8,故在第三行的空白区域中删减8个空格,;第四行:n4modm=3余3,差值为r4,r4=15-3=12,故在第四行的空白区域中删减12个空格。按照此方式进行删减空格可以尽可能地将各行空白区域前的空格删除。删减后的结果如图6b所示。

步骤s426:导出删减空格的第四寄存器代码文档,第四寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第四寄存器文档按照第四预设格式命名。例如:删减各行左侧空白区域的空格后,将第三寄存器代码文档另存为第四寄存器代码文档,第四预设格式为自定义格式,主要为了与其它文档进行区别,例如:第四预设格式为word-3,或excel-3,故第四寄存器文档按照word-3或excel-3进行命名,第四寄存器代码文档是在第三寄存器代码文档的基础上形成,故第四寄存器代码文档仍保持多个逻辑功能子模块相互之间存在逻辑层次关系不变。

步骤s427:在第四寄存器代码文档中,按照第一方向至第二方向逐行循环搜索出存在相同代码内容的行区域,相同代码内容的行区域是由每个逻辑功能子模块经过多次重复例化形成。例如:在图6b中,第四行-第十行,存在相同代码内容的行区域,即在图6b中,可以看出第四行-第十行的括号中的代码内容相同,其表示经过了相同的例化操作,例如:存在4个逻辑功能子模块,其分别为a逻辑功能子模块、b逻辑功能子模块、c逻辑功能子模块和d逻辑功能子模块,a嵌入在b中,b嵌入c中,c嵌入在d中,d就是包含a、b、c的顶层模块结构,其中a需要被例化3次,故对于a逻辑功能子模块存在3个相同的代码行区域。

步骤s428:将相同代码内容的行区域进行合并,并标注经过重复例化的次数。将图6b中,第四行至第十行的代码内容进行合并成图6c中第四行,其为level2(levelxy)(7)。此处的合并为了缩减待生成寄存器代码的复杂程度,使其结构较为简单,有利于代码设计工程师快速查看内码内容。

步骤s429:在第四寄存器代码文档中,将各行空白区域经过删减空格后的剩余部分空格使用第二预设标识符填充。在图6c中,将经过步骤s425删减各行空白区域的部分空格后剩余的部分空格使用第二预设标识符填充,此处的第二预设标识符为“|-”,当然,第二预设标识符还可以为其它类型的标识符,本实施例优选“|-”,第二预设标识符优选“|-”便于代码设计工程师在第四寄存器代码文档中快速定位出各行区域的代码所处行或列的位置,即有利于代码设计工程师后续查看各行区域的代码内容。

步骤s430:统一填充后的第四寄存器代码文档的内容的格式,并导出第五寄存器代码文档,第五寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第五寄存器代码文档按照第五预设格式命名。例如:在图6b中,第一行区域的代码内容为:dut_chip(dut_chip(dut_chip)),第二行区域的代码内容为“a:level0(levelxx(levelxx)),其余各行区域的代码内容的格式与第二行区域的代码格式相同,但是,为了简化格式,还可以进一步对图6b中的格式统一,在图6c中,第一行区域的代码内容格式为:dut_chip(dut_chip),第二行区域的代码格式为:level0(levelxx),其余的各行区域的码内容格式与第二行区域的代码格式相同,即“a:例化名(entity名(architecture名))”,故将第四寄存器代码文档中的内容格式再次统一为“例化名(entity名)”格式,此处的格式统一也是为了进一步简化待生成代码结构。在图6c中,level0、level4、level5、level6表示同一层的逻辑功能子模块,level、level2表示非同一层的逻辑功能子模块。具体地,将进一步统一格式的第四寄存器代码文档另存为第五寄存器代码文档,第五预设格式为自定义格式,主要为了与其它文档进行区别,例如:第五预设格式为word-4或excel-4,故第五寄存器文档按照word-4或excel-4进行命名,第五寄存器代码文档是在第四寄存器代码文档的基础上形成,故第五寄存器代码文档仍保持多个逻辑功能子模块相互之间存在逻辑层次关系不变。在图6c中,显示经过进一步统一格式的第五寄存器代码的文档非折叠状态,同一层的逻辑功能子模块的代码不可以进行折叠,非同一层的逻辑功能子模块的代码可以进行折叠。

步骤s431:利用脚本指令,将第五寄存器代码文档按照逻辑层次关系进行文档折叠得到简化结果。此处的脚本指令是指vba脚本指令,具体地,在上述第五寄存器代码文档中,在“查看代码栏”中,登录vba(visualbasicforapplications)脚本编辑器,采用visualbasic宏语言vba实现当前寄存器文档下的所有行区域的折叠,例如:对于第五寄存器代码文档为excel文档,具体为:统计当前sheet页面中的rtl代码的最大行数和最大列数;以列为统计单位,从左向右逐列统计各行中的“|-”位置坐标与上一行“例化名(entity名)”位置坐标关系,如果相邻行的“|-”和“例化名(entity名)”对应列坐标相同,则“|-”所在行的rtl实体名称为“例化名(entity名)”所在行的内嵌调用子模块,按此关系依次类推,直至形成最终的可折叠rtl代码的树状分层结构,即得到了最终的经过折叠的简化结果。

步骤s43:根据简化结果,生成待生成代码结构。此处的待生成代码结构为rtl代码的树状分层结构,此时可将在第五寄存器代码文档下生成的待生成代码结构另存为第六寄存器代码文档,该第六寄存器代码文档是在第五寄存器文档的基础上形成,故第六寄存器代码文档仍旧保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第六预设格式为自定义格式,主要为了与其它文档进行区别,例如:第六预设格式为word-5或excel-5,故第六寄存器文档按照word-5或excel-5进行命名。

本发明实施例中的芯片寄存器代码结构的生成方法,通过已生成顶层模块结构的寄存器代码文档进行自动化处理得到最终的待生成代码结构,可以有利于芯片前端或后端的代码设计工程师或代码设计团队进一步开发或研究代码的工作效率,也有利于代码设计工程师在芯片设计报告中对代码逻辑功能子模块展开其功能介绍,并且有利于代码设计工程师对待生成代码结构进行一目了然地查看各逻辑功能子模块的代码内容信息,便于代码设计团队依赖该代码生成结构进行代码沟通的效率。

实施例2

本发明实施例提供一种芯片寄存器代码结构的生成装置,如图8所示,包括:

第一获取模块81,用于获取待生成代码结构的第一寄存器代码文档,并从第一寄存器代码文档中提取寄存器代码参数,第一寄存器代码文档按照第一预设格式命名。

第一生成模块82,用于根据寄存器代码参数,生成包含多个逻辑功能子模块的顶层模块结构。

导出模块83,用于根据顶层模块结构,导出用于呈现多个逻辑功能子模块相互之间存在逻辑层次关系的第二寄存器代码文档,第二寄存器代码文档按照第二预设格式命名。

第二生成模块84,用于通过对第二寄存器代码文档的内容进行处理,以生成待生成代码结构。

本发明实施例提供的芯片寄存器代码结构的生成装置,在图8中,第一生成模块82还包括:

启动子模块821.用于启动芯片寄存器代码设计软件;

加载子模块822,用于将寄存器代码参数加载在芯片寄存器代码设计软件中;

确定子模块823,用于在芯片寄存器代码设计软件的模块设计区域中确定多个逻辑功能子模块;

例化子模块824,用于将多个逻辑功能子模块进行例化得到顶层模块结构。

本发明实施例提供的芯片寄存器代码结构的生成装置,在图8中,导出模块83还包括:

执行子模块831,用于根据顶层模块结构,执行顶层模块结构的文档导出操作得到第二寄存器代码文档,并将第二寄存器代码文档按照第二预设格式命名。

本发明实施例提供的芯片寄存器代码结构的生成装置,在图8中,第二生成模块84还包括:

格式统一子模块841,用于对从第二寄存器代码文档中查找的标记有第一预设标识符所在行区域的代码内容进行统一格式;

简化子模块842,用于将统一格式后的标记有第一预设标识符所在行区域的代码内容进行简化,并得到简化结果;

生成子模块843,用于根据简化结果,生成待生成代码结构。

发明实施例提供的芯片寄存器代码结构的生成装置,如图9所示,格式统一子模块841,还包括:

第一搜索单元8411,用于在第二寄存器代码文档中,按照第一方向至第二方向逐行循环搜索出标记有第一预设标识符所在行区域的代码内容;

保留单元8412,用于保留标记有第一预设标识符所在行区域的代码内容;

第一导出单元8413,用于导出仅包含标记有第一预设标识符所在行区域的代码内容的第三寄存器代码文档,第三寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第三寄存器代码文档按照第三预设格式命名;

第一统一单元8414,用于统一第三寄存器代码文档的代码内容的格式。

本发明实施例中的芯片寄存器代码结构的生成装置,如图10所示,简化子模块842还包括:

查看单元8420,用于查看在第三寄存器代码文档中,查看与标记有第一预设标识符相邻的各行空白区域;

统计单元8421,用于统计各行空白区域的各空格字符总数量值;

第一计算单元8422,用于计算各空格字符总数量值与预设数值的商值得到二者的各余数值,预设数值为数字2的倍数;

第二计算单元8423,用于计算各空格字符总数量值与其对应的余数值的差值;

删减单元8424,用于按照各空格字符总数量值与其对应的余数值的差值,从各空白区域中删减空格;

第二导出单元8425,用于导出删减空格的第四寄存器代码文档,第四寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第四寄存器文档按照第四预设格式命名;

第二搜索单元8426,用于在第四寄存器代码文档中,按照第一方向至第二方向逐行循环搜索出存在相同代码内容的行区域,相同代码内容的行区域是由每个逻辑功能子模块经过多次重复例化形成;

标注单元8427,用于将相同代码内容的行区域进行合并,并标注经过重复例化的次数;

填充单元8428,用于在第四寄存器代码文档中,将各行空白区域经过删减空格后的剩余部分空格使用第二预设标识符填充;

第二统一单元8429,用于统一填充后的第四寄存器代码文档的内容的格式,并导出第五寄存器代码文档,第五寄存器代码文档保持多个逻辑功能子模块相互之间存在逻辑层次关系不变,第五寄存器代码文档按照第五预设格式命名;

折叠单元8430,用于利用脚本指令,将第五寄存器代码文档按照逻辑层次关系进行文档折叠得到简化结果。

本发明实施例中的芯片寄存器代码结构的生成装置,寄存器代码为rtl代码,待生成代码结构为rtl树状分层结构。

本发明实施例中的芯片寄存器代码结构的生成装置,通过已生成顶层模块结构的寄存器代码文档进行自动化处理得到最终的待生成代码结构,可以有利于芯片前端或后端的代码设计工程师或代码设计团队进一步开发或研究代码的工作效率,也有利于代码设计工程师在芯片设计报告中对代码逻辑功能子模块展开其功能介绍,并且有利于代码设计工程师对待生成代码结构进行一目了然地查看各逻辑功能子模块的代码内容信息,便于代码设计团队依赖该代码生成结构进行代码沟通的效率。

实施例3

本发明实施例提供一种存储介质,其上存储有计算机指令,该指令被处理器执行时实现实施例1中芯片寄存器代码结构的生成方法的步骤。该存储介质上还存储有寄存器代码参数、待生成寄存器代码结构等。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd)等,所述存储介质还可以包括上述种类的存储器的组合。

本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。

实施例4

本发明实施例提供一种芯片寄存器设计设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现实施例1中的芯片寄存器代码结构的生成方法的步骤。如图11所示,包括存储器1120、处理器1110及存储在存储器1120上并可在处理器1110上运行的计算机程序,处理器1110执行程序时实现实施例1或实施例2中方法的步骤。

图11是本发明实施例提供的执行列表项操作的处理方法的芯片寄存器设计设备的硬件结构示意图,如图11所示,该芯片寄存器设计设备包括一个或多个处理器1110以及存储器1120,图11中以一个处理器1110为例。

执行列表项操作的处理方法的芯片寄存器设计设备还可以包括:输入装置1130和输出装置1140。

处理器1110、存储器1120、输入装置1130和输出装置1140可以通过总线或者其他方式连接,图11中以通过总线连接为例。

处理器1110可以为中央处理器(centralprocessingunit,cpu)。处理器1110还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。

显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1