快速读写海量数据文件的方法

文档序号:6598793阅读:370来源:国知局
专利名称:快速读写海量数据文件的方法
技术领域
本发明涉及电子设计自动化(EDA)领域,特别是一种快速读写海量数据文件的方法。
背景技术
物理版图数据文件是系统集成电路芯片(SOC)设计中数据量最大的文件,目前已有的SOC电路的物理版图数据文件的大小规模在几个GB到几十个GB量级,随着集成电路工艺的不断发展和设计技术的不断进步,SOC电路的物理版图数据规模将达到几百个GB的量级。在SOC设计流程中,对物理版图数据的读写较为频繁物理综合需要写出物理版图数据;物理版图优化需要读取和写出物理版图数据;几何设计规则检查需要读取物理版图数据;寄生参数提取需要读取物理版图数据;电路图和物理版图一致性检查(LVS)需要读取物理版图数据;可制造性设计优化(DFM)需要读取物理版图数据。传统的数据输入输出方式是基于最小基本数据单位进行的,需要在计算机内存中逐一构造每一基本数据单位。以传统的数据输入输出方式读写物理版图数据文件规模的数据,一次就需要几十分钟甚至几十个小时,而在设计流程中,尤其是在设计流程的后端,需要频繁地读取如此规模的数据,这使得海量规模的物理版图数据输入输出成为了集成电路设计过程中的一个重要瓶颈。

发明内容
本发明的目的之一在于提供一种快速读写海量数据文件的方法,用于在集成电路设计过程中,提高海量规模的物理版图数据输入输出的效率。本发明的实施例提供了一种快速读写海量数据文件的方法,包括对海量数据文件的数据类型进行分类,为不同数据类型的数据申请存储页面,将相同类型的数据存储到内存中的同一存储页面,利用存储页面到硬盘的快速写入,将存储页面内的全部数据一次性地写入硬盘。本发明通过将相同类型的物理版图数据存储到内存中的同一存储页面,而所有物理版图数据存储页面的大小是相同的,能够简化和加速存储页面的创建、导入和导出,并且存储页面的大小为计算机内存页面大小,这样能够减小内存碎片,提高内存使用效率。在将存储页面的内容写到硬盘时,忽略内存中具体存储位置上的数据属于哪一个具体的数据类型和占据多少数据单位,而是将该存储页面的镜像数据写入硬盘的相应文件;在将硬盘中的物理版图数据读入内存时,内存存储页面的数据镜像在硬盘数据文件中得到了保留,重新读回到内存存储页面的数据保留了各自原先在存储页面内的位置。从而无需关注具体的数据类型和具体的数据单位以及具体数据单位的重构,避免了全部数据的逐一重构,提高了读写速度,实现了计算机存储器和硬盘之间快速读写海量集成电路物理版图数据。


图1是本发明实施例提供的快速读写海量数据文件的方法流程图;图2是本发明实施例中物理版图数据存储页面的结构图;图3是本发明实施例中为物理版图数据申请存储页面的示意图;图4是本发明实施例中将物理版图数据存储页面写入硬盘的示意图;图5是本发明实施例中从硬盘数据文件向内存存储页面读入存储页面镜像的示意图。
具体实施例方式本发明的技术方案可应用于物理综合、物理验证、寄生参数提取等集成电路设计的自动化软件中,在计算机存储器和硬盘之间快速读写集成电路设计中产生的海物理版图数据文件,可有效地回避集成电路设计过程中的海量物理版图数据输入输出所带来的设计瓶颈。为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。图1是本实施例提供的快速读写海量数据文件的方法流程图,包括以下步骤步骤101、对物理版图数据的数据类型进行分类。物理版图数据分类的依据是物理版图数据的内容,同一类型的物理版图数据其存储空间的字节数相同,根据类型分类的目的是将不同存储长度的物理版图数据分开存储。举例说明,数据类型可以分为LibHeaderRecord,CellNameRecord, LibCatalogRecord, ChangeNameRecord, CelIHeaderRecord, PropertySetRecord, DisplayPropRecord, PropertyRecord, RectangleRecord, GdsRectRecord, ValueRectangleRecord, ViaRecord, ViaArrayRecord, OffsetViaArrayRecord, PolyRecord, PathRecord, WireRecord等,但不仅限于这些,根据实际应用可以进一步增加。 下面是对Poly、Path、Wire类型数据的定义struct PolyRecord{ObjectId m_propertyListId ;ObjectId m_netld ;BBoxm_bBox ;LayerNumber m_layerNumber ;DataType m_dataType ;UCharm_flags ;ObjectId m_pointId ;} PolyRecord;struct PathRecord{ObjectId m_propertyListId ;ObjectId m_netld ;BBoxm_bBox ;LayerNumber m_layerNumber ;
DataType m_dataType ;UCharm_flags ;intm pathffidth ;ObjectId pointld ;};struct WireRecord{ObjectId m_propertyListId ;ObjectId m_netld ;Pointm一point ;Coordinate m length ;Coordinate m_width ;LayerNumber m_layerNumber ;DataTypem_dataType ;UCharm_flags ;}。步骤102、为不同数据类型的物理版图数据申请存储页面,该存储页面对应计算机系统内存中的存储页面。所有数据类型的物理版图数据的存储页面大小相同,物理版图数据存储页面如图2。物理版图数据存储页面分为页头和页芯两部分,页头存储该页面的序号、页面的数据类型、该类型数据的长度、实际存储类型数据的首地址等页内管理信息;页芯存储若干该类型的数据单位。所有数据类型的物理版图数据存储页面的大小相同,该存储页面分为信息位置固定的页头和信息位置可变的页芯页头部分存储管理信息;页芯部分连续存储数据单位。一个存储页面在页芯部分只存储同一个类型的数据,并记录若干数据单位。在申请实际存储空间之后,需要在页头内的固定位置填写本页面的管理信息,其中包括在固定位置处标定页面属性,并根据实际存储类型数据的首地址和存储一个该类型数据所需的字节数计算每一数据单位的存储空间的地址,因此需要对存储页面内部进行二次划分,如图3。页芯部分相邻数据单位之间的地址偏移量为数据的字节数,页芯首字节相对页面内首字节其地址偏移量是固定的,即页头的大小固定。物理版图数据存储页面的数据结构如下struct Page{Bit32 m_pageID ;/* 页头开始 */UShort m_maxRec0nPage ;UShort m_flags ;/*存储数据类型标志*/CellId m_cellld ;/* 页头结束 */char m_pageData[PAGE_DATA_SIZE] ;/* 页芯部分 */} ;I^age部分存储与数据类型有关。在下述结构中,从m_pageID到111_06111010个字节为页头,而m_pageData以后即从页面内的第11个字节开始的后续8192-10 = 8182个字节为页芯,页芯首字节相对页面内首字节其地址偏移量是从m_pageID到m_cellID所占存储空间决定,此例中页芯首字节
5相对页面内首字节其地址偏移量是10,m_flags的位值标定页面属性,存储指定的类型的物理版图数据。需要说明的是这里举例的页头仅仅是用于说明,实际应用和实现时页头的内容根据需要会有所改变。所有物理版图存储页面的大小是相同的,以简化和加速存储页面的创建、导入和导出。存储页面的大小与操作系统指定的页面大小一致,如在LINUX上页面的大小为8192字节。步骤103、将相同类型的数据存储到内存中的同一存储页面。在计算机内部,需要通过申请来构造页面,因为所有存储页面的大小相同,则其在通过操作系统申请存储空间时,申请到的存储空间大小也相同,其值为计算机内存页面大小,这样能够减小内存碎片, 提高内存使用效率。在得到相应的内存存储空间之后,针对物理版图数据存储页面,需要将该页面的序号、页面的数据类型、该类型数据的长度、实际存储类型数据的首地址等信息写入页头, 并在位置固定的页芯起始位置,根据该页面所存数据的具体类型及其所占空间的大小,将页芯细分成存储若干同类型数据的存储单位,计算出存储数据单位的地址。在前述的物理版图数据存储页面的数据结构中,从111_ 叫610到111_(^111010个字节为页头,而nupageData 以后即从页面内的第11个字节开始的后续8192-10 = 8182个字节为页芯,页芯首字节相对页面内首字节其地址偏移量是从111_ 恥610到111_(^1110所占存储空间决定,此例中页芯首字节相对页面内首字节其地址偏移量是10,存储指定的类型的物理版图数据。存储页面内第一个物理数据单元地址为页面首字节地址+10,第二个物理数据单元地址为页面首字节地址+10+SUE0F(该类型的物理数据单元的大小),第N个物理数据单元地址为页面首字节地址+10+SUE0F(该类型的物理数据单元的大小)X (N-I)。步骤104、利用存储页面到硬盘的快速写入,将存储页面内的全部物理版图数据一次性地写入硬盘。在将存储页面的内容写到硬盘时,忽略内存中具体存储位置上的数据属于哪一个具体的数据类型和占据多少数据单位,而是将该存储页面的镜像数据写入硬盘的相应文件。图4是将物理版图数据存储页面写入硬盘的示意图。以C/C++程序为例,以 fwrite (buffer, size, count, fp)函数将整个存储页面上的全部数据一次性的写入硬盘。 buffer为页面的首地址;size为1,表示要写入的基本单位为1个字节;count为要写的基本单位数,在本实施例中为存储页面所包含的字节数;fp为输出的物理版图数据文件的指针,是在写文件之前通过fopen函数根据指定文件名打开或创建数据文件时所得到的文件指针,该指针用于向指定文件写数据)。步骤105、将一定长度的硬盘数据一次性地读入到内存的存储页面,从而实现原来存储页面内的若干物理版图数据一次性的读入。在将物理版图数据从硬盘读入到内存时, 在每一个读入操作之前申请固定大小的内存存储页面,将硬盘中的物理版图数据文件内的存储页面镜像读入该内存存储页面。以C/C++程序为例,以fread(buffer,size, count, fp)函数将存储在若干扇区上固定长度的信息读入到该存储页面,buffer为页面的首地址,size为1个字节,count为页面的字节数,fp为输出的物理版图数据文件的指针。然后,根据存储页面固定位置的数据值(标志字节,由前述页面结构I^age中的m_flags的位值决定,具体如何标识所存数据类型取决于实际实现时的定义)自动区分物理版图数据存储页面。因为内存存储页面的数据镜像在硬盘数据文件中得到了保留,重新读回到内存存储页面的数据保留了各自原先在存储页面内的位置,避免了全部数据的逐一重构。最后,根据页头中存储的页面的序号、页面的数据类型、该类型数据的长度、实际存储类型数据的首地址计算每一数据单位的存储空间的地址,以便后续程序对这些数据的访问。图5为从硬盘数据文件向内存存储页面读入存储页面镜像,自动构造物理版图数据存储页面。特别说明的是,本实施例列出的数据类型、页头的内容等仅是用于说明发明所及方法,根据实际的实现和应用,数据类型、页头等可根据需要进行增加或裁减。总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种快速读写海量数据文件的方法,其特征在于,包括对海量数据文件的数据类型进行分类,为不同数据类型的数据申请存储页面,将相同类型的数据存储到内存中的同一存储页面,利用存储页面到硬盘的快速写入,将存储页面内的全部数据一次性地写入硬盘。
2.根据权利要求1所述的方法,其特征在于,所述海量数据文件为物理版图数据。
3.根据权利要求2所述的方法,其特征在于,该方法进一步包括将一定长度的硬盘中的物理版图数据一次性地读入到内存的存储页面。
4.根据权利要求2或3所述的方法,其特征在于,所述数据分类的依据是物理版图数据的内容,同一类型的物理版图数据其占用存储空间的字节数相同,从而将不同存储长度的物理版图数据分开存储。
5.根据权利要求4所述的方法,其特征在于,所述申请的存储页面为计算机系统内存中的存储页面,所有数据类型的物理版图数据的存储页面大小相同。
6.根据权利要求5所述的方法,其特征在于,所述物理版图数据的存储页面包括页头和页芯,所述页头存储该页面的页内管理信息,所述页芯连续存储至少一个该类型的数据单位,并且一个存储页面在页芯部分只存储同一个类型的数据;当申请到实际存储空间之后,在所述页头内的固定位置填写本页面的页内管理信息, 并根据实际存储类型数据的首地址和存储一个该类型数据所需的字节数划分每一数据单位的存储空间的地址,在页芯的相应位置写入该类型物理版图数据。
7.根据权利要求6所述的方法,其特征在于,所述页内管理信息具体包括页面的序号、页面的数据类型、该类型数据的长度、实际存储类型数据的首地址。
8.根据权利要求3所述的方法,其特征在于,所述将硬盘中的物理版图数据读入到内存的存储页面具体包括在将物理版图数据从硬盘读入到内存时,在每一个读入操作之前申请固定大小的内存存储页面,将硬盘中的物理版图数据文件内的存储页面镜像读入该内存存储页面。
全文摘要
本发明公开了一种快速读写海量数据文件的方法,包括对海量数据文件的数据类型进行分类,为不同数据类型的数据申请存储页面,将相同类型的数据存储到内存中的同一存储页面,利用存储页面到硬盘的快速写入,将存储页面内的全部数据一次性地写入硬盘。本发明无需关注具体的数据类型和具体的数据单位以及具体数据单位的重构,避免了全部数据的逐一重构,提高了读写速度,实现了计算机存储器和硬盘之间快速读写海量集成电路物理版图数据。
文档编号G06F12/08GK102193873SQ201010118129
公开日2011年9月21日 申请日期2010年3月4日 优先权日2010年3月4日
发明者叶甜春, 吴玉平, 陈岚 申请人:中国科学院微电子研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1