存储器版图和网表自动生成的软件实现方法与流程

文档序号:23091607发布日期:2020-11-27 12:45阅读:472来源:国知局
存储器版图和网表自动生成的软件实现方法与流程

本发明涉及集成电路辅助设计软件工具中存储器设计领域。



背景技术:

存储器(memory)设计是集成电路芯片(ic)开发过程中的一个专门领域,存储器包括sram,dram,rom,registerfile,flash等类型。为了能使存储器在多款芯片中使用,一般是将存储器划分成多个底层单元(leafcell),再根据一定的拼接规则将其拼接成指定大小的存储器。其容量和结构一般由如下变量指定:字(words)的容量,每个字的位(bits)数,和多路复用器(mux)的宽度。

存储器版图和网表自动生成软件(memorycompiler)是根据用户指定的words,bits,和mux完成对应存储器拼接的软件工具。其结果输出包括gdsii版图和cdl网表。

本发明实现了一种存储器拼接描述语言(memorycompilerdescriptionlanguage),简称mcdl,使用该语言可以完成任意复杂结构的存储器拼接,最终得到版图和网表输出。



技术实现要素:

附图1是使用本发明进行存储器编译的程序流程框图。程序首先读入mcdl语句描述的拼接定义,并从指定的标准gds/cdl格式文件中加载leaf单元信息。然后,程序根据用户指定的容量大小(word,bits)和结构(mux)参数,按照leaf单元信息和mcdl定义的拼接规则完成存储器的拼接。最终输出存储器的gds和cdl文件。

mcdl基于tcl语言,提供变量存取,表达式计算,和控制结构(if,while,for)等基本语法结构支持,并针对存储器拼接提供如下的扩展命令:

1)mcdl_place<cell>:<rotate><side>:拼接版图单元cell到当前单元。一个版图单元的放置由两个参数决定,坐标(x,y)和旋转方向rotate。旋转方向有8种,分别为r0(不旋转),r90(逆时针旋转90度),r180(旋转180度),r270(旋转270度),mx(沿y轴镜像),mxr90(先沿y轴镜像再旋转90度),my(沿x轴镜像),myr90(先沿x轴镜像再旋转90度),坐标需要根据旋转方向进行调整。mcdl_place命令的特征是,单元放置不需要考虑坐标,只需要考虑放置在已有图形的上方,下方,左方,还是右方(side),程序会自动计算坐标,并保持当前单元的左下角坐标始终为(0,0)。

3)mcdl_mapborderlabel<pattern><pin-list>:提取版图底层单元的label,将其映射为外部端口。普通存储器编译器只提供一层的label映射,最终形成外部端口要经过多层label映射,而本mcdl命令的特征是只要一次映射即可完成外部端口定义。命令首先根据pattern查找leaf单元中的label,pattern是一个正则表达式,例如,d*匹配d<0>,d<1>,d<2>...,d[0-3]匹配d0,d1,d2,d3。符合pattern的label被提取后按坐标从小到大排列顺序,这样,位于存储器底部和顶部的label按从左到右排列,位于存储器左部和右部的label按从下到上排列。排列后的label与pin-list按顺序一一对应,在相同位置生成外部端口。例如,label提取结果a0,a1,a0,a1,a2,与a<3:4>,a<0:2>的pin-list对应,则在第一个a0处生成外部端口a<3>,在第一个a1处生成外部端口a<4>,在第二个a0处生成外部端口a<0>,在第二个a1处生成外部端口a<1>,在a2处生成外部端口a<2>。

4)mcdl_donutbitcell-row...-col...:生成版图的donut圆圈环。存储器的字位单元称为bitcell,一个存储器除控制译码电路外,主要部分是bitcell拼接成的bit阵列。对于容量较大的存储器,通过仿真提取其时序特征的过程会很耗时。由于时序特征只与bit阵列的外圈bitcell相关,所以在仿真使用的版图中,会将bit阵列的中间部分挖空,即去除中间部分的mos管,只保留连线。mcdl_donut命令就是为了处理这种情况而设计的,只需要一条命令即可形成版图的donut圆圈环。命令中的-row/col控制保留和挖空哪些单元,例如,-row151表示保留7行中的第1行和第7行,挖空中间的5行;-col171表示保留9列中的第1列和第9列,挖空中间的7列;两者合起来,就表示保留阵列中的外圈,挖空中间的bitcell。

5)mcdl_connect<cell>-pinpin=>net...:拼接网表单元cell。端口连接由-pinpin=>net指定,例如-pindin<0:3>=>d0d1d2d3,表示端口din<0>连到线网d0,端口din<1>连到线网d1,端口din<2>连到线网d2,端口din<3>连到线网d3。本命令的特征是,如果端口名与线网名相同,则可以忽略不写。在存储器系统中,大多数线网名与端口名都是相同的,例如clk,web等,所以该特征大大简化了拼接定义。

6)mcdl_defpin<pin>...:定义网表单元的端口。

7)mcdl_loadleafcell<gds>/<cdl>:加载指定的lead单元版图或网表。版图单元以gds格式存储,每个单元包括单元名,单元大小,包含的图形和label等信息。网表单元以cdl格式存储,每个单元包括单元名,端口列表等信息。

附图说明

图1:存储器编译程序流程框图。

图2:mcdl_place命令示例。该图对应命令:

mcdl_placea:r0

mcdl_placeb:mxright

mcdl_placec:mybottom

首先放置单元a,不做任何旋转操作,操作后当前单元只包含单元a,左下角坐标(0,0)。之后在a的右侧放置单元b,放置前对单元b按y轴旋转,程序检查单元b和单元a的高度一致,操作后当前单元包含单元a和单元b,高度与单元a的高度一致,宽度是单元a加单元b的宽度,左下角坐标(0,0)。之后在当前单元的下方放置单元c,放置前对单元c按x轴旋转,程序检查单元c和当前单元的宽度一致,操作后当前单元包含单元a,单元b,和单元c,高度等于单元a加单元b的高度,宽度等于单元a加单元b的宽度,左下角坐标仍是(0,0)。

输出gds后,单元a坐标(0,hc)(图中坐标1),旋转方向r0;单元b坐标(wa+wb,hc)(图中坐标2)旋转方向mx;单元c坐标(0,0)(图中坐标1),旋转方向my。其中hc代表单元c的高度,wa和wb分别代表单元a和b的宽度。

图3:mcdl_mapborderlabel命令示例。该图对应命令:

mcdl_mapborderlabeldid<0:6>

mcdl_mapborderlabeldoq<0:6>

mcdl_mapborderlabela*a<6:7>,a<3:5>,a<0:2>

图中显示的是存储器的下部,从左到右由4个rd单元,一个ydech单元,一个ydecl单元,1个xdec单元,和3个rd单元组成,其中每个rd单元引出一个di和一个do,共两个数据信号,ydech单元引出a0和a1两个地址信号,ydecl单元引出a0-a2三个地址信号,xdecl单元引出a0-a2三个地址信号。

命令将di提取为6个数据输入信号d<0:6>,0-6按从左到右排列;将do提取为6个数据输出信号q<0:6>,0-6按从左到右排列;将a*提取为8个地址信号,由于地址信号从左到右不是单调递增的,所以在命令中要指定排列顺序a6,a7,a3,a4,a5,a0,a1,a2。

图4:mcdl_donut命令示例。该图对应命令:

mcdl_makedonutcellcell6tpolydiffnsdmpsdm

mcdl_donutcell6t-row‘1161’-col‘1161’

存储器的位点阵单元是cell6t,图中是18x15的存储器位点阵,位点阵中列方向每隔5个单元有一行strap单元,它们不计入位点阵。第一个命令首先生成cell6t的donut单元,该donut单元去掉了poly,diff,nsdm,和psdm图层中的所有图形(即去掉了mos管),其它金属层图形被保留了(即保留连线)。第二个命令生成圆环圈,中间的所有cell6t都被donut单元替代,但第一行(底),最后一行(顶),第一列(左),和最后一列(右)的cell6t单元被保留了。

图5:mcdl_connect命令示例。该图对应命令:

mcdl_defpind<0:6>,q<0:6>,a<0:4>,clk,web,oeb

mcdl_connectxdec-pina=>a<0:1>

mcdl_connectydec-pina=>a<2:4>

mcdl_connectwingl-pind=>d<0:3>-pinq=>q<0:3>

mcdl_connectwingr-pind=>d<4:6>-pinq=>q<0:3>

defpin定义外部端口:数据输入d<0:6>,数据输出q<0:6>,地址信号a<0:4>,控制信号clk,web,和oeb。connect信号连接了4个单元xdec,ydec,wingl,和wingr。3个控制信号是相同的,所以不用在拼接定义中描述。wing和dec间的bl,wl信号定义也是相同的,可以在拼接中省略。地址线分为两部分,a<0:1>和a<2:4>,分别送入x译码器xdec和y译码器ydec;数据线也分为两部分,d/q<0:3>和d/q<4:6>,分别送入左阵列wingl和右阵列wingr。地址线和数据线的连接需要在connect命令中描述。

具体实施方式:

存储器版图和网表自动生成软件由tcl语言实现,对每一个mcdl扩展命令,提供c++实现的函数库。软件实施过程如下:

第一步,用户编写一款存储器的mcdl文件,在其中指定leaf单元的gds/cdl文件,使用mcdl_place和mcdl_connect拼接存储器,相关存储器容量大小和结构的参数,如word,bits,和mux等以变量的形式出现并使用。

第二步,用户指定要生成的特定存储器的容量大小和结构参数的取值,例如word=512,bits=8,mux=4,即生成512个字,每个字8位,共4k位的存储器,该存储器采用4路多路复用器,即512/4=128行字线,8*4=32列位线。针对每款mcdl描述的存储器,可以生成有效范围内的多种指定大小和结构的特定存储器。

第三步,存储器版图和网表自动生成软件根据mcdl和参数拼接生成指定大小和结构的存储器,结果版图输出为gds格式文件,结果网表输出为cdl格式文件。

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