一种集成电路展平式设计的字符串存储与查询系统及方法转让专利

申请号 : CN202111479489.1

文献号 : CN113901280B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王翔陈刚

申请人 : 南京集成电路设计服务产业创新中心有限公司

摘要 :

一种集成电路展平式设计的字符串存储与查询系统,包括,应用端、字符串存储查询单元,以及数据处理单元,其中,所述应用端,其加载并创建元素实体,通过API启动所述字符串存储查询单元的功能操作;所述字符串存储查询单元,其通过API执行插入电路元素及其字符串全名、指定字符串名称查询对应的电路元素、获取电路元素的字符串全名的操作;所述数据处理单元,构建字符串数据的数据结构,对存储器进行数据读写。本发明还提供一种集成电路展平式设计的字符串存储与查询方法,针对大规模集成电路展平式设计,充分利用了电路元素名称具有层次化和结构化的特点,将字符串存储的内存消耗大幅降低,同时加快了字符串的加载查询。

权利要求 :

1.一种集成电路展平式设计的字符串存储与查询系统,包括,应用端、字符串存储查询单元,以及数据处理单元,其中,所述应用端,其加载并创建元素实体,通过API启动所述字符串存储查询单元的功能操作;

所述字符串存储查询单元,其通过API执行插入电路元素及其字符串全名、指定字符串名称查询对应的电路元素、获取电路元素的字符串全名的操作;

所述数据处理单元,构建字符串数据的数据结构,对存储器进行数据读写,其对电路元素全名按照层级分隔符划分成子字符串;将不重复的子字符串进行枚举编码,然后根据层级结构将各个子字符串的枚举编码值存储于树状的数据结构中;将电路元素的编号存储于树的叶子节点;

所述字符串存储查询单元,采用联合体的方式将叶子节点和非叶子节点共享同一内存空间,存储对应的元素编号或者分支信息;利用整型变量parent_edge_sub_str_id的最高位存储和记录当前节点是否为叶子节点;判断当前节点是否为叶子节点。

2.根据权利要求1所述的集成电路展平式设计的字符串存储与查询系统,其特征在于,所述应用端,还包括,对电路设计文件的读入解析和建模操作、加载并创建设计电路的元素实体;通过API启动所述字符串存储查询单元创建字符串名字、执行电路元素与字符串全名对应关系的加载、通过电路元素查询其对应的全名、通过字符串全名查询对应的电路元素。

3.根据权利要求1所述的集成电路展平式设计的字符串存储与查询系统,其特征在于,所述字符串数据结构,为树状数据结构,其节点定义如下:整型变量parent_edge_sub_str_id,为当前节点指向其父节点的边的编号;

整型变量parent_node_id,为当前节点的父节点;

联合体 uni,对叶子节点和非叶子节点分别存储不同的信息;

对非叶子节点而言,指针地址*nids,其指向的内存存储了当前节点的分支节点的编号;

对叶子节点而言,整型变量obj_id,叶子节点存储其所代表的元素的ID。

4.一种集成电路展平式设计的字符串存储与查询方法,包括以下步骤:构建字符串数据结构;

字符串切词与编码;

判断当前节点是否为叶子节点;

非叶子节点的分支信息存储与高效查询;

所述构建字符串数据结构的步骤,还包括,对电路元素全名按照层级分隔符划分成子字符串;

将无重复的子字符串进行枚举编码,然后根据层级结构将各个子字符串的枚举编码值存储于树状的数据结构中;

将电路元素的编号则存储于树的叶子节点;

所述判断当前节点是否为叶子节点的步骤,还包括,采用联合体的方式将叶子节点和非叶子节点共享同一内存空间,存储对应的元素编号或者分支信息;利用整型变量parent_edge_sub_str_id的最高位存储和记录当前节点是否为叶子节点;

所述非叶子节点的分支信息存储与高效查询的步骤,还包括,以数组的下标作为哈希表的key,数组的下标等于子字符串的枚举编号,数组对应位置存储分支子节点的节点编号;如果一个子字符串编枚举号所对应的分支不存在,则数组对应的位置存储UINT32_MAX作为标记;

当sub_str的数量增长到nids数组的长度时,对树的所有非叶子节点的nids数组进行动态扩展;

其中,所述sub_str为按照层级分隔符切词后的无重复的子字符串;所述nids数组,其存储了当前节点的分支节点的编号。

5.根据权利要求4所述的集成电路展平式设计的字符串存储与查询方法,其特征在于,所述字符串数据结构,其节点定义如下:整型变量parent_edge_sub_str_id,为当前节点指向其父节点的边的编号;

整型变量parent_node_id,为当前节点的父节点;

联合体 uni,对叶子节点和非叶子节点分别存储不同的信息;

指针地址*nids,其指向的内存存储了当前节点的分支节点的编号;

整型变量obj_id,叶子节点存储其所代表的元素的ID。

6.根据权利要求4所述的集成电路展平式设计的字符串存储与查询方法,其特征在于,所述字符串切词与编码的步骤,还包括,将电路元素的全名按照层次分隔符进行切词;

将无重复的切词子字符串进行枚举编码;

构建两个子字符串与编码相互映射查询的哈希表,记录子字符串及其唯一编码的映射关系。

7.一种电子设备,其特征在于,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行权利要求4至6任一项所述的集成电路展平式设计的字符串存储与查询方法的步骤。

8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序运行时执行权利要求4至6任一项所述的集成电路展平式设计的字符串存储与查询方法的步骤。

说明书 :

一种集成电路展平式设计的字符串存储与查询系统及方法

技术领域

[0001] 本发明涉及大规模集成电路后端展平式设计技术领域,尤其涉及一种集成电路展平式设计的字符串存储与查询系统及方法。

背景技术

[0002] 随着大规模集成电路进入深纳米量产时代,芯片的规模越来越大,表现为单位面积所承载的电路元器件的数目越来越多,因此物理后端电路设计需要模块化层次化设计,
并且需要支持对海量的电路元素的名称进行加载、存储、计算等操作。在此背景下,针对展
平式集成电路设计领域去开发出一套支持对海量的电路元素名称进行高效存储与查询的
数据结构和算法,具有重要的理论和现实意义,从而可以使得EDA工具支持大规模集成电路
设计制造的技术演进。
[0003] 在集成电路后端展平式设计情形下,电路元素实例的字符串名称会展平显示其所有的层级结构(类似形如hierarchy1/hierarchy2/net[1]),由于高抽象层级的字符串会大
量重复出现于展平后的低层级的电路元素字符串全名,导致传统的展平式设计会消耗大量
的计算机内存空间资源,从而制约了EDA软件支持集成电路规模的持续演进。
[0004] 传统的EDA工具针对大规模集成电路的展平式设计通常是采用哈希表的方案对电路元素字符串名称直接进行存储与查询,虽然这个方案可以做到查询速度的极致,但是却
存在着大量消耗内存的缺点,目前业界并没有完善的解决方案在内存消耗与查询效率二者
之间找到最佳的优化平衡点,因此设计一套高效的数据结构和算法具有重要的意义。
[0005] 目前大规模集成电路后端展平式设计主要采用哈希表的方式存储电路元素字符串名称,此方式无法利用电路元素层次化的结构信息,因此在内存存储效率上存在严重浪
费,尤其是在当电路规模快速增长的时候这个瓶颈将严重制约EDA工具的内存应用性能。

发明内容

[0006] 为了解决现有技术存在的不足,本发明的目的在于提供一种集成电路展平式设计的字符串存储与查询系统及方法,利用电路元素字符串名称具有层次化结构化特点,设计
的高效存储和查询的数据结构与算法,达到节约内存消耗而不严重牺牲查询速度的效果,
从而使得大规模集成电路后端展平式设计可以支持电路规模不断大幅增长的技术演进需
求。
[0007] 为实现上述目的,本发明提供的集成电路展平式设计的字符串存储与查询系统,包括,应用端、字符串存储查询单元,以及数据处理单元,其中,
[0008] 所述应用端,其加载并创建元素实体,通过API启动所述字符串存储查询单元的功能操作;
[0009] 所述字符串存储查询单元,其通过API执行插入电路元素及其字符串全名、指定字符串名称查询对应的电路元素、获取电路元素的字符串全名的操作;
[0010] 所述数据处理单元,用于字符串数据结构,对存储器进行数据读写。
[0011] 进一步地,所述应用端,还包括,对电路设计文件的读入解析和建模操作、加载并创建设计电路的元素实体;通过API启动所述字符串存储查询单元创建字符串名字、执行电
路元素与字符串全名对应关系的加载、通过电路元素查询其对应的全名、通过字符串全名
查询对应的电路元素。
[0012] 进一步地,所述数据处理单元,其对电路元素全名按照层级分隔符划分成子字符串;将无重复的子字符串进行枚举编码,然后根据层级结构将各个子字符串的枚举编码值
存储于树状的数据结构中;将电路元素的编号存储于树的叶子节点。
[0013] 更进一步地,所述字符串数据结构,为树状数据结构,其节点定义如下:
[0014] 整型变量parent_edge_sub_str_id,为当前节点指向其父节点的边的编号;
[0015] 整型变量parent_node_id,为当前节点的父节点;
[0016] 联合体 uni,对叶子节点和非叶子节点分别存储不同的信息;
[0017] 对于非叶子节点,指针地址*nids,其指向的内存存储了当前节点的分支节点的编号;
[0018] 对于叶子节点,整型变量obj_id,叶子节点存储其所代表的元素的ID。
[0019] 为实现上述目的,本发明还提供一种集成电路展平式设计的字符串存储与查询系统方法,包括以下步骤:
[0020] 构建字符串数据结构;
[0021] 字符串切词与编码;
[0022] 判断当前节点是否为叶子节点;
[0023] 非叶子节点的分支信息存储与高效查询。
[0024] 进一步地,所述构建字符串数据结构的步骤,还包括,
[0025] 对电路元素全名按照层级分隔符划分成子字符串;
[0026] 将子字符串进行枚举编码,然后根据层级结构将各个子字符串的枚举编码值存储于树状的数据结构中;
[0027] 将电路元素的编号则存储于树的叶子节点。
[0028] 进一步地,所述字符串数据结构,其节点定义如下:
[0029] 整型变量parent_edge_sub_str_id,为当前节点指向其父节点的边的编号;
[0030] 整型变量parent_node_id,为当前节点的父节点;
[0031] 联合体 uni,对叶子节点和非叶子节点分别存储不同的信息;
[0032] 指针地址*nids,其指向的内存存储了当前节点的分支节点的编号;
[0033] 整型变量obj_id,叶子节点存储其所代表的元素的ID。
[0034] 进一步地,所述字符串切词与编码的步骤,还包括,
[0035] 将电路元素的全名按照层次分隔符进行切词;
[0036] 将切词子字符串进行枚举编码;
[0037] 构建两个子字符串与编码相互映射查询的哈希表,记录子字符串及其唯一编码的映射关系。
[0038] 进一步地,所述判断当前节点是否为叶子节点的步骤,还包括,
[0039] 采用联合体的方式将叶子节点和非叶子节点共享同一内存空间,存储对应的元素编号或者分支信息;利用 整型变量parent_edge_sub_str_id的最高位存储和记录当前节
点是否为叶子节点;
[0040] 判断当前节点是否为叶子节点。
[0041] 更进一步地,所述非叶子节点的分支信息存储与高效查询的步骤,还包括,
[0042] 以数组的下标作为哈希表的key,数组的下标等于子字符串的枚举编号,数组对应位置存储分支子节点的节点编号;如果一个子字符串编枚举号所对应的分支不存在,则数
组对应的位置存储UINT32_MAX作为标记;
[0043] 当sub_str(按照层级分隔符切词后的无重复的子字符串)的数量增长到接近nids数组的长度时,对树的所有非叶子节点的nids 数组进行动态扩展。
[0044] 为实现上述目的,本发明还提供一种电子设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行如上
文所述的集成电路展平式设计的字符串存储与查询方法的步骤。
[0045] 为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行如上文所述的集成电路展平式设计的字符串存储与查询方
法的步骤。
[0046] 本发明的集成电路展平式设计的字符串存储与查询系统及方法,具有以下有益效果:本发明针对大规模集成电路展平式设计,充分利用了其电路元素名称具有层次化和结
构化的特点,将字符串存储的内存消耗大幅降低,同时也能满足字符串快速加载查询的性
能要求,使得展平式集成电路设计领域可以适应电路规模大幅增长的技术演进所带来的挑
战。
[0047] 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。

附图说明

[0048] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
[0049] 图1为根据本发明的集成电路展平式设计的字符串存储与查询系统结构图;
[0050] 图2为根据本发明的集成电路展平式设计的字符串存储与查询方法流程图;
[0051] 图3为根据本发明的字符串数据结构示意图。

具体实施方式

[0052] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
[0053] 在展平式集成电路设计领域,每个电路元素的字符串名称都包含了其完整的层级化信息,而随着集成电路规模的不断扩大,如何高效的存储规模庞大的电路元素字符串名
称,并且提供高效的查询算法,是EDA工具的一个关键挑战。针对大规模集成电路后端展平
式设计的应用领域,其电路元素字符串名称由于具有层级化信息的特点,因此可以根据上
述特点,本发明实施例设计了专门的数据结构和算法对存储查询功能进行性能优化,从而
使得EDA软件可以支持集成电路技术演进对计算和存储性能的极致要求。
[0054] 在集成电路后端展平式设计情形下,电路元素实例的字符串名称会展平显示其所有的层级结构(类似形如hierarchy1/hierarchy2/net[1]),由于高抽象层级的字符串会大
量重复出现于展平后的低层级的电路元素字符串全名,导致传统的展平式设计会消耗大量
的计算机内存空间资源,从而制约了EDA软件支持集成电路规模的持续演进。本发明采用高
效的字符串存储和查询方案,以实现大规模字符串集合的压缩存储和快速检索。
[0055] 实施例1
[0056] 图1为根据本发明的集成电路展平式设计的字符串存储与查询系统结构图,如图1所示,本发明的集成电路展平式设计的字符串存储与查询系统,包括,应用端10、字符串存
储查询单元20,以及数据处理单元30,其中,
[0057] 应用端10,为EDA软件框架的各个上层设计应用,比如对DEF/Verilog等电路设计文件的读入解析和建模操作、加载并创建所设计电路的元素实体;通过API启动字符串存储
查询单元20进行相应的功能操作,包括,创建字符串名字、执行电路元素与字符串全名对应
关系的加载、通过电路元素查询其对应的全名、通过字符串全名查询对应的电路元素等。
[0058] 字符串存储查询单元20,其通过API接收应用端10的启动指令,执行相应的功能操作,包括:创建字符串名字、电路元素查询其对应的全名、通过字符串全名查询对应的电路
元素等相关功能。
[0059] 本发明实施例中,通过如下API由应用端10驱动字符串存储查询单元20执行相关的动作,包括,
[0060] Init():模块初始化;
[0061] Finish():模块析构;
[0062] GetOrCreateName():插入一个电路元素及其字符串全名;
[0063] GetObjByName():通过指定字符串名称查询对应的电路元素;
[0064] GetName():获取电路元素的字符串全名。
[0065] 数据处理单元30,其构建字符串数据的数据结构,接受字符串存储查询单元20的指令,对存储器进行读写。
[0066] 本发明实施例中,字符串数据的数据结构如图3所示,考虑到展平式设计下电路元素字符串全名的特点,如Inst1/Ram1/Net1和Inst1/Ram1/Net2在高层级会共享相同的子字
符串,将字符串数据以树状的数据结构进行存储以达到共享的目的。首先,对电路元素全名
按照层级分隔符(通常为“/”)划分成子字符串,并且将子字符串进行枚举编码;然后根据层
级结构将各个子字符串的枚举编码值存储于树状的数据结构中,而电路元素的编号则存储
于树的叶子节点。这样设计能大幅的减少内存的消耗,原因有两点,其一是高层级的子字符
串虽然会大量重复存在于各个电路元素的全名中,但是树状的数据结构却可以保证高层级
的子字符串只会存储一次,从而避免了大量的重复浪费;其二,子字符串经过枚举编码后,
树状数据结构存储的是编码值而不是字符串本身,从而也达到了节约内存的效果。与此同
时,树状的数据结构也必须要能支持电路元素字符串全名与电路元素本身相互双向查询的
功能,因此,树状数据结构的设计需要同时支持自顶向下与自底向上两种回溯遍历的方式。
[0067] 具体的来说,本发明的字符串数据的树状数据结构HtreeNode的节点数据定义:
[0068] {
[0069]     整型变量 parent_edge_sub_str_id;
[0070]     整型变量 parent_node_id;
[0071]     联合体变量 {
[0072]         指针地址 *nids;
[0073]         整型变量 obj_id;
[0074]     } uni;
[0075] };
[0076] 其中,
[0077] parent_edge_sub_str_id,为当前节点指向其父节点的边的编号,此编号唯一映射一个子字符串;
[0078] parent_node_id,为当前节点的父节点;
[0079] 联合体 uni,使用联合体的方式对叶子节点和非叶子节点分别存储不同的信息,且共享一个内存地址以达到节省内存的目的;
[0080] 指针地址*nids,非叶子节点存储了指向其分支信息列表的指针,此指针地址指向的内存存储了当前节点的分支节点的编号;
[0081] 整型变量obj_id,叶子节点存储了其所代表的元素的ID。
[0082] 实施例2
[0083] 图2为根据本发明的集成电路展平式设计的字符串存储与查询方法流程图,下面将参考图2,对本发明的集成电路展平式设计的字符串存储与查询方法进行详细描述。
[0084] 首先,在步骤201,构建字符串数据的树状数据结构。
[0085] 本发明实施例中,首先,对电路元素全名按照层级分隔符(通常为“/”)划分成子字符串,并且将子字符串进行枚举编码;然后根据层级结构将各个子字符串的枚举编码值存
储于树状的数据结构中,而电路元素的编号则存储于树的叶子节点,构建字符串数据的树
状数据结构。
[0086] 本发明的树状数据结构HtreeNode的节点数据,包括:
[0087] parent_edge_sub_str_id,为当前节点指向其父节点的边的编号,此编号唯一映射一个子字符串;
[0088] parent_node_id,为当前节点的父节点;
[0089] 联合体 uni,使用联合体的方式对叶子节点和非叶子节点分别存储不同的信息,且共享一个内存地址以达到节省内存的目的;
[0090] 指针地址*nids,非叶子节点存储了指向其分支信息列表的指针,此指针地址指向的内存存储了当前节点的分支节点的编号;
[0091] 整型变量obj_id,叶子节点存储了其所代表的元素的ID。
[0092] 在步骤202,字符串切词与编码。
[0093] 本发明实施例中,对于每个电路元素的全名会按照层次分隔符(通常为“/”)进行切词,并且将切词后的无重复的子字符串(这里我们以sub_str作为指代,下同)进行枚举编
码。同时构建两个子字符串与编码相互映射查询的哈希表,用于记录字符串子串及其唯一
编码的映射关系。
[0094] 在步骤203,判断是否为叶子节点。
[0095] 为了节省内存,如前面数据结构的说明,我们使用了联合体的方式使叶子节点和非叶子节点共享一块内存空间存储对应的元素编号或者分支信息,因而我们需要一个额外
的标志位去判断当前节点是否为叶子节点。本发明实施例中,借用 parent_edge_sub_str_
id 的最高位去存储和记录当前节点是否为叶子节点,以达到进一步节省内存的目的。
[0096] 在步骤204,非叶子节点的分支信息存储与高效查询。
[0097] 传统的方式会采用一个哈希表去存储一个非叶子节点的分支信息,这种方式虽然能做到o(1)的分支查询效率,但是即使将子字符串枚举编码之后,哈希表的方式仍然会消
耗大量的内存,本发明实施例中设计了一个隐式哈希方案:
[0098] 此方案直接以数组的下标作为哈希表的key,即数组的下标等于字符串子串的枚举编号,而数组对应位置存储分支子节点的节点编号。如果一个子串编号所对应的分支不
存在,则数组对应的位置存储UINT32_MAX作为标记。
[0099] 由于所有的非叶子节点都共享一个哈希机制(树状数据结构中所有非叶子节点的哈希表都是一样的大小),所以当sub_str(按照层级分隔符切词后的无重复的子字符串)的
数量增长到接近nids数组的长度的时候,需要对整棵树的所有非叶子节点的nids 数组进
行动态扩展。(如前所述,nids数组存储了当前节点的分支节点的编号)
[0100] 本发明的一个实施例中,还提供一种电子设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行如上
文所述的集成电路展平式设计的字符串存储与查询方法的步骤。
[0101] 本发明的一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行如上文所述的集成电路展平式设计的字符串存储与查询方
法的步骤。
[0102] 本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员
来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进
行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含
在本发明的保护范围之内。