一种芯片集成设计方法与流程

文档序号:30934163发布日期:2022-07-30 00:54阅读:276来源:国知局
一种芯片集成设计方法与流程

1.本发明属于芯片设计领域,特别涉及一种芯片集成设计方法。


背景技术:

2.芯片集成设计是在芯片中将多个模块组合连接并生成期望功能的过程。每个模块(module)是芯片内部的具有某些功能或者功能聚合的设计结构。在集成设计的过程中,繁杂而琐碎的设计工作往往成为芯片开发的瓶颈。由于芯片系统越来越复杂,任何一个模块的微小改动都会导致与之关联的所有集成设计的修改。对于复杂的芯片系统集成设计,传统的设计方法都是在基于芯片的架构定义来实现功能模块的分割之后,自顶向下组织芯片的层次结构,然后自底向上层层集成,直到所有功能模块被集成到芯片中,而且大部分工作几乎靠手动完成,费时耗力。由于各个模块间彼此交互的层次关系越来越复杂,即使是经验丰富的工程师也容易引入错误,从而影响芯片质量。另外,人为的集成工作和设计过程中的结果缺少有效的信息交换,而且过于依赖设计工程师的经验,设计质量和效率都很难保证,即使存在脚本方法,如果割裂生成集成设计的rtl(register transfer level)代码,那么本质上仍然属于自底向上的集成设计方法,缺乏宏观上的集成设计指导,收敛慢,效率低下,而且可能在生成集成设计的rtl代码的过程中存在重复返工的情况。


技术实现要素:

3.本发明的目的在于提供一种芯片集成设计方法,以解决芯片集成的设计效率低的问题。所述芯片集成设计方法包括:
4.在预设模板中定义芯片各个模块的层次结构;
5.接收用户输入,在所述模板中设置所有模块的rtl文件路径,并设置每个模块的module名,以及该模块是否属于待生成rtl代码的模块;
6.对已生成rtl代码的模块的rtl文件进行分析,提取相应模块的端口连接信息和参数信息;
7.接收用户在所述模板中添加的模块之间未连接端口的连接信息以及模块的实例化参数值;
8.利用脚本工具分析添加后的模板,对于待生成rtl代码的模块,生成该模块的rtl代码;对于已定义端口连接信息的模块,在rtl代码中生成对应的端口连接,对于已定义参数值的模块,利用已定义的参数值对该模块进行实例化。
9.优选地,在对模块进行实例化之后,利用所述脚本工具更新模块之间的已连接端口的连接信息和参数信息。
10.优选地,在更新模块之间的已连接端口的连接信息和参数信息之后,进一步包括:
11.重新接收用户添加的其他信息,并利用所述脚本工具重新分析添加后的模板;迭代地执行该步骤,直到生成芯片集成设计的所有rtl代码,并且各个模块之间不存在未连接端口。
12.优选地,所述对已生成rtl代码的模块的rtl文件进行分析,提取模块的端口连接信息和参数信息,进一步包括:
13.以对应的module名在所述模板中建立新的模块页,并将模块的端口连接信息和参数信息加入到对应模块页中,同时在模板中为每个所述待生成rtl代码的模块建立新的模块页,将空白信息添加到对应模块页中。
14.优选地,所述利用所述脚本工具更新模块之间的已连接端口的连接信息和参数信息,进一步包括:
15.将已连接端口的连接信息和参数信息保存到所述模板中的对应模块页,同时将未连接端口的信息保存到所述模板中的对应模块页。
16.优选地,该方法进一步包括:
17.接收用户在所述模板中添加的通用总线信息,以及总线下的每个信号的通配识别名。
18.优选地,所述通配识别名是实际的通用总线下的通配识别名,或者虚拟的总线下的通配识别名。
19.优选地,该方法还包括:
20.在生成rtl代码之后,检查生成的rtl代码是否已经满足预设规范,若不满足,则继续接收用户添加的其他信息,并利用所述脚本工具重新分析添加后的模板。
21.优选地,所述脚本工具进一步配置用于对所述层次结构中的已连接端口和未连接端口进行分组,并将端口信息按照分组结果记录在所述模板中。
22.优选地,所述预设模板为excel表格模板。
23.相比于现有技术,本发明具有以下优点:
24.借助预先定义的层次结构,利用脚本快速提供宏观上的全局集成设计信息,再逐步迭代补充完善全局集成设计信息,达到快速收敛并生成集成设计rtl的目的。本发明提出的芯片集成的设计方法可以快速实现芯片不同层次结构下的多个模块、子系统和顶层模块的rtl代码同时生成,显著提高芯片集成的设计效率,而且整个过程快速迭代、高效收敛,生成的rtl设计代码能够最大限度地避免人为错误,所定义的芯片层次结构具备较强的灵活性和适配性、可配置性和可移植性,能够显著加快芯片开发进度。
25.本发明的其它特征和优点将在随后的说明书中阐述,并且部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获取。
附图说明
26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,下面描述中的附图是本发明的某些实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附图。
27.图1示出了根据本发明的芯片集成设计方法的实现流程示意图。
28.图2示出了根据本发明的芯片集成设计方法中预先定义的层次结构示意图。
29.图3示出了根据本发明的芯片集成设计方法中包含端口和参数的层次结构示意
图。
30.图4示出了根据本发明的芯片集成设计方法中添加端口连接和参数实例化值的层次结构示意图。
31.图5和图6分别为在根据本发明的方法集成迭代前后的层次结构示意图。
具体实施方式
32.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保护的范围。
33.本发明提出一种芯片集成设计方法,在获得芯片的层次结构定义模板之后,利用脚本工具提取每个层次下的每个模块的端口集成信息,并对已连接的端口和未连接的端口进行分组,将端口集成信息按照分组结果记录在模板中。上述端口集成信息主要包括端口连接信息。当端口带有参数时,端口集成信息还包括参数化定义信息。当端口由宏定义声明时,端口集成信息还包括宏定义的信息。开发者可以对包含上述端口集成信息的模板进行维护,补充新的端口集成信息,脚本工具根据新添加的端口集成信息生成并更新rtl代码,同时,再次提取端口集成信息并分组记录在模板中,开发者可以再次进行信息维护和补充,依次类推。在多次迭代之后,在较短的时间内即可生成芯片集成设计的所有rtl代码。该方法利用脚本工具和开发者之间提供的信息相互迭代并达到收敛,以快速高效地克服集成设计中无连接端口的集成问题。
34.参见图1所示的具体的实现流程,本发明的方法在预设模板中定义层次结构,然后设置每个层次结构中每个模块的rtl代码路径,并说明该模块的rtl代码是否需要由脚本工具生成。以verilog hdl语言为例,对于待生成rtl代码的模块,还需要给出生成的模块名即module名,这是因为层次结构中定义的模块只是实例化名称,而实例化名称与module名可以是不同的。对于已经存在rtl代码的模块,如果rtl代码中有多个module,也需要设置对应的module名,或者为保证模板信息的清晰性,对于已经存在rtl代码的模块,也可以指定其对应的module名。由于只需要指定生成每个层次结构下的每个模块的rtl代码路径,以及是否需要生成该模块的rtl代码及该模块的对应module名,所以上述层次结构的定义非常简单明晰,易于人工维护,显著减少维护成本。
35.下文中的表1是一个模板的层次结构示意图,该表格仅为示意,事实上任何具有类似信息的模板都适用于本发明的方法,只需要提供配合脚本工作的一些必要信息。从表1中提取出的基本信息表示,表1第1行的芯片顶层为top,脚本工具最终生成的顶层top对应的rtl代码文件为top.v,对应的module名为top,同时top层下有n个实例化模块,实例化名称分别为m_subsys0,m_subsys1,
……
,m_subsysn,如“子层次”字段所示,对应的rtl代码文件分别如“rtl路径”字段所示。“rtl生成”字段表示是否需要由脚本工具生成rtl代码。即除了m_subsysn已经存在现成的rtl代码外,其它的top层下的实例化模块都需要由脚本工具来生成。类似地,表1还依次定义了实例化模块m_subsys0,m_subsys1下的实例化模块相对应的信息,以及m_subsys0下的两个子模块m_subsys0sys0,m_subsys0sys1的实例化模块信息,和m_subsys1下的两个实例化模块m_subsys1sys0,m_subsys1sys1的实例化模块信息。
简而言之,模板内初始阶段只需要提供芯片内部层次结构,如图2所示,并设置该结构下每个模块对应的rtl文件路径、是否已经存在rtl代码以及是否需要由脚本工具生成对应的rtl代码,并设置对应的module名。
36.表1
37.[0038][0039]
如图1所示,步骤s0-s10描述了本发明的集成设计流程的完整过程。具体的芯片集成设计方法流程包括:
[0040]
步骤s1:开始。
[0041]
步骤s2:在预设模板中定义层次结构。
[0042]
所述预设模板可以是excel表格模板,也可以是其他模板格式。所述层次结构可以以复杂方式定义,也可以简单方式定义。所述复杂方式可以如表1所示,即将所有需要生成的层次结构及它们之下的模块依次进行定义,脚本工具利用它们之间的关系,按照层次结构依次找到端口相互连接的模块以及这些模块在层次结构中的位置,在这些模块的端口连接需要穿过的不同层次之间依次创建端口连接,直到将它们从一个模块的端口逐层连接到另一个模块的对应端口。所述简单方式可以遵循自底向上的原则,即每次只定义一个需要生成rtl代码的层次结构并生成对应的模块,将这个模块之下的所有模块包括于这个模块之下,然后生成该模块,再以类似方法生成其他需要生成rtl代码的层次结构和对应的所有模块,依次迭代到芯片顶层直到生成所有层次结构下的模块。
[0043]
步骤s3:接收用户输入,在模板中设置模块的rtl文件输出路径,并设置对应的每
个模块的module名以及该模块是否需要生成rtl代码。
[0044]
对于不需要生成rtl代码的模块,可以认为该模块是已经开发完成的,具有特定功能的而且需要集成到芯片内部的模块;对于待生成rtl代码的模块,可以认为该模块是为了保留芯片内部的层次结构和关系而生成的模块,其作用是为了在对应的生成模块上产生一个期望的层次结构对其他模块进行集成,所以这些待生成rtl代码的模块只是提供某个层次结构上的rtl设计和集成封装,提供各个封装之下集成的各个模块之间的连接、各个封装之下集成的这些模块到该封装之间的连接,以及各个封装之下集成的模块到该封装之外的其他模块之间的连接,便于利用脚本工具生成rtl代码。在可选的实施例中,步骤s2和步骤s3的顺序可以互换。
[0045]
步骤s4:利用脚本工具对于初始模板中已生成rtl代码的模块的rtl文件进行分析,提取对应的模块端口信息、参数信息。
[0046]
对于已生成rtl代码的每个模块,以模块名在模板中建立新的模块页,并将上述信息加入到对应模块页中,同时在模板中为每个待生成rtl代码的模块建立新的模块页,并将空白信息添加到对应模块页中。
[0047]
所述步骤s4完成后,可以利用脚本工具获得每个模块的初始信息,尤其是已有rtl代码需要集成的模块的端口信息、参数信息等。进一步地,该步骤s4是可选步骤,即可以由开发者直接手动添加端口连接信息,而不需要脚本工具的进行分析。
[0048]
步骤s5:接收用户输入,以在模板中添加通用总线信息以及这些总线下的每个信号的通配识别名。
[0049]
步骤s5的目的是在定义模块之间的端口信号连接上,以总线形式来定义,而不需要将该总线下的每个端口信号之间的连接一一定义出来,脚本工具按通配识别名找到的每个端口信号名都可以认为是对应总线下的一个信号,符合以总线定义下的连接。例如,当ahb总线下的写数据通配识别名为wdata时,如果定义了模块a到模块b的ahb总线连接,则模块a下形如*wdata*的信号就会连接到模块b的形如*wdata*的信号上。如果模块a有一个wdata_o的输出信号,模块b有一个wdata_i的输入信号,则在生成的rtl代码中,模块a的端口wdata_o就会连接到模块b的端口wdata_i上,根据实际情况可能需要穿过多个层次模块。总线的通配识别名的定义既可以是实际的通用总线的通配识别名,也可以是虚拟的总线通配识别名,即为了简便将某些信号以通配识别名的形式归入一组虚拟的总线上方便定义连接。在可选的实施例中,也可以省略步骤s5。
[0050]
步骤s6:接收用户输入,以在模板中添加模块之间未连接端口的连接信息,并在需要实例化某些具有参数声明的模块的层次模块中设置模块的实例化参数值。
[0051]
由于模块之间的端口连接是相互的,所以对于需要生成rtl代码的集成模块之间的端口互连,只需要定义一个方向上的互连,例如输出方向,脚本工具在生成rtl代码之后可以将另一个模块上的输入端的连接信息在模板中补充,由此可以节省维护和修改模板的时间。
[0052]
步骤s7:利用脚本工具分析添加后的模板,生成所有待生成rtl代码的模块的rtl代码,对于已定义端口连接信息的模块,在rtl代码中生成对应的端口连接,对于已定义实例化参数值的模块,利用已定义的参数值实例化该模块。
[0053]
该步骤利用脚本工具对模板中定义的连接关系进行分析,生成对应的集成设计的
rtl代码。所以,rtl代码的成熟度和模板中定义的连接关系相关。在项目初期,芯片内集成的模块间端口连接已经完成了多次交互和逐步确定,所以即使在项目初期,本发明提供的方法也易于快速高效地生成rtl代码,在项目开发过程中也便于维护和改动并重新生成rtl代码,确保项目顺利进行。
[0054]
步骤s8:利用脚本工具更新模块间的已连接端口的信息,并保存到模板中对应模块页,同时整理并保存未连接端口的信息到模板中对应模块页。
[0055]
在该步骤中,将所生成的rtl对应的集成信息进一步整理记录之后,方便人工干预和进一步迭代,直到生成所有满足预设规范的rtl代码。进一步地,该步骤s8是可选步骤,即在脚本工具可以不更新生成rtl代码的连接信息,而不影响该方法的适用性。
[0056]
步骤s9:检查生成的rtl代码是否已经满足预设规范,如果不满足,则执行步骤s6进行下一轮迭代,如果已经满足,则执行步骤s10。
[0057]
步骤s10:结束。
[0058]
本发明的上述过程利用简单的层次结构定义和脚本工具,借助于脚本工具帮助分析该层次结构、集成连接及对应的已有rtl代码,并协助进一步生成rtl代码,利用脚本工具和人工干预之间的迭代过程,快速高效地生成集成设计的rtl代码。上述过程也可以视为由最初仅包含集成层次定义到最终完成所有集成设计rtl代码的迭代收敛的过程。以图2-图4的示例说明,在执行本方法之前,最初的模板中仅提供图2所示的层次结构。通过执行本发明的过程,在利用脚本工具对对应的模块进行分析之后,得到图3所示的包含端口和参数的层级结构,这个过程中由于只是生成空的层级结构以及对应的模块,同时提取已有模块的集成相关信息,所以已有模块的端口都没有连接(unconnected ports为100%)而且参数都是以默认值(表示为default parameters)呈现。然后,在加入端口连接信息和参数实例化值之后,得到如图4所示的包含端口和参数的层级结构,并生成对应的rtl代码,此时更新了相应的层级结构以及对应的模块,并且将已有端口连接和参数更新后产生到生成的rtl代码中,并提供新的更新之后的集成信息,包括生成新的rtl代码之后的已连接和未连接端口信息(分别表示为connected ports 30%和unconnected ports 70%),已更新和未更新的参数信息,则可以保证通过更新迭代生成对应的模板,此时继续检查和更新集成信息,则继续反复迭代之后即可保证生成最终的rtl代码以及最终的集成信息。图4中的百分比是添加集成信息后工具生成rtl代码过程的一次迭代中集成信息补充过程的示意。
[0059]
以下结合图5和图6来说明一个具体的实现和迭代过程实施例。假设层次定义中,父层次top包含三个需要生成的子层次sub0,sub1和sub2,而每个需要生成的子层次sub0,sub1和sub2各自包含一个子模块,分别为submodule0,submodule1和submodule2。
[0060]
参见图5,在定义了图5所示的层次结构后,脚本可以分析出每个子模块之下的所有未连接端口,包括输入和输出端口,以及模块的参数,并将这些信息输出到指定模块的参数和连接关系模板中,此时,在指定模块的模板中进一步添加参数的实例化值和对模块中的输出端口添加连接信息,该连接信息必然至少连接到一个或者多个模块的输入端口,所以对应的被连接模块的输入端口不需要添加连接说明。在生成rtl代码的过程中,这些连接信息同时会自动更新到每个模块的连接模板中。以此方式迭代添加多个连接信息后,再次进行rtl代码生成迭代。经过迭代后,相关模块的参数实例化值和连接关系会进一步更新,同时生成的rtl代码中包含了新添加的指定的参数实例化值和连接信息。重复以上过程,直
到生成满足预设规范的所有rtl代码,即完成了多个层次不同结构的集成设计工作。
[0061]
在图6示出的集成迭代过程中,一旦添加了每个模块的实例化参数值,则在其父层次中生成的rtl代码中必然会将对应的参数值给定。如果添加了连接关系,同样,连接关系最后会通过rtl代码中生成的端口通过不同层次连接到对应的模块中。图6所示的c0为模块submodule0到模块submodule1的所有连接,则生成rtl集成代码的过程中会在父层次sub0中定义为每个这种端口定义并生成相应的输出端口,并将submodule0中的这种端口连接到sub0的输出端口上。当脚本工具检查到与c0相连接的模块submodule1的父层次sub1和sub0在同一层次内时,在sub1上为c0相连接的每个端口定义输入端口,并将sub0中对应的输出端口连接到sub1上,最后将这些端口连接到submodule1的输入端口上,同时更新每个模块的连接信息。按照相同的迭代过程,最后的rtl实现中包括图6中所示的多种连接关系。其中,c0为submodule0的输出到submodule1的输入连接;c1为submodule0的输出到submodule2的输入连接;c2为submodule1的输出到submodule0的输入连接;c3为submodule1的输出到submodule2的输入连接;c4为submodule2的输出到submodule1的输入连接;c5为submodule2的输出到submodule0的输入连接;c6为顶层top的输入到submodule0的输入连接;c7为submodule1的输出到top的输出连接;c8为top的输入到submodule2的输入连接;c9为submodule2的输出到top的输出连接。
[0062]
本发明旨在借助预先定义的层次结构,利用脚本快速提供宏观上的全局集成设计信息,再逐步迭代补充完善全局集成设计信息,达到快速收敛并生成集成设计rtl的目的。本发明提出的芯片集成的设计方法,可以快速实现芯片不同层次结构下的多个模块、子系统和顶层模块的rtl代码同时生成。举例而言,在采用excel表格模板的情况下,首先可以利用excel表格模板定义芯片层次结构,设置芯片每个层次结构下已有的实例化模块的rtl路径及需要生成的实例化模块的生成rtl路径,定义集成中用到的通用总线接口及对应总线下的各个信号通配识别名;定义每个层次结构下实例化模块的参数实例化值。采用脚本语言编写一个集excel文件模板分析、rtl文件分析和rtl代码生成于一体的工具,分析已有rtl代码的每个实例化模块的端口,提取对应实例化模块的参数及对应端口,同时产生需要生成rtl代码的每个实例化模块的rtl代码,将以上信息补充到excel表格模板中。对于已更新的excel表格模板进一步添加已有端口信息的实例化模块间的端口连接信息、参数实例化值等,同时如果这些模块中有需要从其他层次结构中引入/引出而不与其他实例化模块相连接的端口,则定义到对应层次模块的连接。生成所有需要的集成的rtl设计代码的同时更新excel表格模板信息,反复迭代,直到excel表格模板中没有未连接端口,或者excel表格模板中虽然有未连端口但属于设计需要的情况。该方法的输入模板信息除可以以excel表格模板的形式维护,还可以以其他模板维护,维护简单便捷,符合期望的任何模板的信息输入都可以快速收敛并生成最终的rtl代码。利用模板输入信息和脚本之间的快速迭代,以及迭代过程中结合不断添加的连接信息,即可方便快捷地生成期望的rtl代码。
[0063]
本发明能够显著提高芯片集成的设计效率,而且整个过程快速迭代、高效收敛,生成的rtl设计代码能够最大限度地避免人为错误,所定义的芯片层次结构具备灵活性和适配性、可配置性和可移植性较强,能够显著加快芯片开发进度。
[0064]
本领域技术人员可以理解,上述实施例中描述的方法步骤和层次架构仅为举例。本领域技术人员可以根据需要,对上述芯片集成设计方法流程的多个步骤进行合并、增删
或顺序调整,或对集成设计体系结构进行容易想到的调整,而不应将本发明的构思限制于上述示例的具体结构和流程。例如模板格式和载体可以不限定为上述实施例中描述的模板格式和载体。本领域技术人员可以理解,本发明所述的芯片集成设计方法也不限于verilog hdl设计语言,而是广泛适用于其它类型的设计语言例如vhdl设计语言等。
[0065]
尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1