具体实施方式:
下面结合附图和实施例对本发明作进一步详细说明。
如图1-1和图2-1所示,现有技术的组合逻辑电路逻辑参数提取激励波形的产生方法,由用户输入工艺文件、电路网表给计算机,并给出各逻辑单元中每个输出管脚与各输入管脚的逻辑关系,即单元逻辑功能,用户手动给出或计算机产生电路级模拟程序spice(Simulation Program with Integrated CircuitEmphasis)的激励波形,用于测量集成电路内部功耗和时序,接下来计算机产生测量各参数的spice程序,对集成电路进行仿真,并将仿真的结果整理成综合工具synopsys的综合库文件进行存储。
如图1-2和图2-2所示,本发明的组合逻辑电路逻辑参数提取激励波形的产生方法,包括以下步骤:
一、由用户向计算机输入由集成电路制造商提供的可用于spice仿真的工艺模型文件和电路网表。
工艺模型文件根据流片工艺不同而不同,一般在集成电路设计之前首先要确定流片工艺,工艺模型文件由设计者向集成电路制造厂商索取,例如,如果芯片最终采用SMIC 0.18um的普通工艺流片形式,则主要包括的工艺文件有:1018_v2p4.lib、1018_v2p4.mdl、1018_v2p4_bjt.mdl和1018_v2p4_res.mdl,本发明对工艺模型文件无特殊要求,只要是合乎spice语法要求的工艺模型文件都能应用于本发明。现以上面提到的工艺文件为例,其中1018_v2p4.lib文件包含仿真工艺角的相关参数,1018_v2p4.mdl文件包含MOS管的工艺模型参数,1018_v2p4_bit.mdl包含双极晶体管BJT的工艺模型参数,1018_v2p4_res.mdl文件包含电阻的工艺模型参数。
电路网表中包含需要测量逻辑参数的组合逻辑单元,该单元以cdl网表的形式给出,是仿真和测量逻辑参数的主体。
二、计算机根据电路网表采用spice工具进行仿真,得到用于仿真集成电路内部功耗和时序所需的激励波形。
三、计算机用该激励波形作为spice仿真激励,编写spice仿真文件(仿真文件如图7所示),然后调用spice仿真工具,如新思Synopsys公司的仿真工具Hspice,执行sp脚本文件进行仿真,得到测量集成电路逻辑单元的功耗power,单元延时cell_delay,输入输出沿延时tansition,输入管脚电容,漏功耗,建立保持时间参数信息的spice仿真序列(即仿真激励波形)。
四、计算机根据spice仿真序列对集成电路进行仿真后,产生包含管脚电容、内部功耗、时序测量信息的结果文件,例如若用Hspice仿真将产生.mt0文件,将仿真的结果编写ksh格式的可执行命令(脚本文件),执行该命令(运行该文件)将仿真的参数信息添加到synopsys综合库文件中,综合库的格式根据综合的情况一般是固定的,如图4所示典型逻辑参数库的文件结构。也可手动一个个添加到综合库文件中,本发明主要强调组合逻辑单元激励波形的产生方法和逻辑参数的测量方法,对逻辑参数产生后添加到库的过程可以是任意的。
五、用户向新思Synopsys公司综合库文件中添加集成电路各逻辑单元中每个输出管脚与各输入管脚的逻辑关系,即单元逻辑功能,完成这一过程后即完善了库文件。
对比现有技术和本发明的组合逻辑电路逻辑参数提取激励波形的产生方法,可以发现,采用对组合逻辑单元的电路网表进行仿真来获得所需要的组合逻辑单元的逻辑功能信息,避免了在激励波形生成和参数提取仿真中对逻辑功能输入的依赖,消除了由电路网表生成最终逻辑参数之间的人为误差风险,而人工分析逻辑电路功能会造成理解上的误差和测量激励文件的非完备性,造成参数测量的不完全,甚至会产生测量错误。本发明直接基于目标组合逻辑单元的电路网表得到所需的激励波形,将使得对组合逻辑单元逻辑功能的输入由整个提取工作的关键输入,变成了对结果的描述性输入,逻辑功能描述的正确性对激励波形的生成和参数提取仿真过程不会造成影响,提高了整个建库过程的可靠性和灵活性。
如图3、图5所示,以产生单个激励波形的方法为例,对本发明的方法进行说明:
第一步,由用户将需要测量的组合逻辑电路单元电路网表,单元电路网表名,单元电路单元名,输出管脚个数和spice模型参数文件输入到计算机,其中单元电路网表需要满足格式:在电路网表中,对电路名、各输入输出管脚名进行命名,需要把各输出管脚置于输入管脚之前,输出管脚之间、输入管脚之间的顺序不限,单元电路的端口列表中不包含电源管脚、地管脚。
第二步,利用单元电路单元名,计算机通过使用命令,如ksh格式的命令语句或脚本,从单元电路网表中寻找到该单元电路的单元命名,由于该命名具有固定格式,并且要求用户将输出管脚置于输入管脚之前,该命名语句将呈现如下格式:
.SUBCKT 单元名 输出管脚1 输出管脚2 输出管脚3… 输入管脚1输入管脚2输入管脚3…
例如:.SUBCKT AND2 Y A B
因此,结合输出管脚个数(1个)和单元名(AND2),计算机可以得到各输出管脚名(Y)和输入管脚名(A,B)。
第三步,计算机利用该单元电路的单元名、各输入管脚名以及各输出管脚名采用实例化语句实现该单元电路作为子模块的调用。所谓例化就是对子模块各个端口的定义和实现对子模块的调用,其语法结构为:X调用名输出管脚名输入管脚名单元名;字母X是关键字,调用名为用户任意选取,不重复即可;各管脚名顺序需要和单元电路网表中管脚顺序一致,子模块实体化语句如下例:Xand2 Y A B AND2。
第四步,基于遍历Traversal的方法,计算机产生不同的输入激励组合,测量输出管脚的翻转情况,对各种输入管脚的激励组合及对应的输出管脚的翻转情况进行记录,存储在计算机中,形成相应的激励文件。激励文件的文件名将包含以下信息:输出管脚翻转情况、目标输入管脚(发生翻转的输入管脚)。
首先,用户给计算机输入N个输入管脚,N为至少1个,计算机从尚未被当作发生翻转的目标管脚中任取一个输入管脚作为目标管脚,除去目标管脚之外的N-1个输入管脚依次取不同的01(0代表低电平,1代表高电平)组合值。除目标管脚之外的其余输入管脚每选定一种01组合,目标管脚发生上升翻转产生一个所需激励波形;每次完成后计算机判断其余输入管脚是否已经遍历了所有的01组合状态,如果尚没有遍历所有的01组合状态,则计算机为除目标管脚之外的其余输入管脚选择尚未遍历过的其他01组合,重复上述过程,产生目标管脚上升翻转的所需激励波形;如果计算机判断其余输入管脚已经遍历了所有的01组合状态,那么完成了该目标管脚的所有所需激励波形生成工作。下一步,计算机判断是否将所有输入管脚都当作目标管脚处理过了,如果没有,则从尚未被当作发生翻转的目标管脚的输入管脚中任取一个作为目标管脚,重复上述操作生成新的所需激励波形;如果计算机判断所有输入管脚都作为目标管脚处理完成后,结束所需激励波形(对应流程图中的“临时激励波形”)产生程序。
其次,由已经得到的子模块实体化语句和上述得到的仿真单元电路功能所需的激励波形,以及spice模型参数,计算机调用spice对单元电路进行仿真。在仿真过程中,计算机会测量并纪录各输出管脚的变化情况(上升翻转,下降翻转,没有翻转),并纪录该次仿真的各输入管脚状态(不发生翻转的输入管脚纪录它的逻辑电平,发生翻转的管脚纪录它的管脚名)。当仿真单元电路功能所需的spice激励波形都得到处理之后,就完成了该步操作。
上述产生仿真单元电路功能所需的spice激励波形,其目的是仿真不同的输入翻转造成怎样的输出翻转,其内容为一个目标输入管脚的特定翻转(上升翻转)和其余输入管脚的固定电平值(0为低电平;1为高电平)。为了全面了解该单元电路的输入输出关系,该部分的仿真单元电路功能的spice激励波形就不能存在遗漏,需要完备全面。在这些所需激励中,每一个输入管脚都需要充当目标输入管脚,发生上升翻转;并且在此时其余输入管脚应该依次遍历各种可能的01电平的组合,如果共有N个输入管脚,应共有N个目标管脚;对于每个目标管脚,其余输入管脚应有2^(N-1)种组合,所以应该共有N*[2^(N-1)]个这样的激励波形。
遍历各种01组合是指,管脚各自独立取低电平逻辑0或者高电平逻辑1,全部这些管脚的逻辑值构成了一个二进制数,或者一种01组合,这些管脚改变电平取值,就改变了这个二进制数或者生成了一个新的01组合,当这些管脚无论再如何取值都不能再生成新的二进制数或01组合时,就认为已经完成了01组合的遍历。
如果有输出管脚发生了翻转,还将对该翻转与目标输入管脚翻转的相对关系,相同或者相反进行区分。在生成的激励波形文件中,将包括产生该激励波形文件的所需激励波形中的内容,即目标管脚管脚名和其余管脚及其电平值。如图5所示,逻辑参数库文件的格式要求带有以下相关描述信息:输出管脚名、关联管脚名related pin(即目标管脚)、其余管脚状态、输出翻转和目标管脚的相互关系(相同或者相反),所以这些信息也将出现在激励波形文件中,作为生成库文件时的辅助信息。激励波形信息和生成库文件时的辅助信息,共同构成了激励波形文件。
计算机对输出管脚是否发生翻转是这样处理的:计算机测量输出信号在开始阶段电压值(设为v0)和最终阶段的电压值(设为v1),并计算电压差值deltav=v1-v0;计算机将deltav与一个设定的电压精度值v_pre(如0.1v)进行比较;如果deltav>+v_pre,则输出发生上升翻转,如果deltav<-v_pre,则输出发生下降翻转,如果二者都不成立,则输出不变。
如果有输出管脚发生了翻转,将对该翻转与目标输入管脚翻转的相对关系,即相同或者相反翻转进行记录;如果没有发生翻转也将记录。
实施例1,逻辑单元:二输入与门AND2,仿真用的硬件为装有linux系统的个人计算机或工作站,使用ksh语言或Hspice语言。
1)输入信息:
spice模型参数文件:1018_v2p4.lib,1018_v2p4.mdl(中兴国际0.18um工艺)
单元电路网表:and2.cdl(文件)
输入任务文件内容:
cdl_name and2.cdl
cell_name and2
output_num 1
2)计算机通过使用如下例给出的命令从单元电路网表中寻找到该单元电路的单元声明(命名)语句,并获得各输入输出管脚名,该单元电路网表的文件内容如图8所示,计算机使用如下命令(ksh语言):
cat and2.cdl|tr“[A-Z]”“[a-z]”|grep“subckt.*and2”>temp1
该语句可以从包含多个单元电路网表的文件中,找到该任务对应的单元声明语句并将其写入文件temp1中。注意单元名and2前后都有空格。
根据输出管脚为1,计算机可以使用如下命令(ksh语言)
read a cell_name output1 input<temp1(如果有两个输出管脚则为:
read a cell_name output1 output2 input<temp1;依此类推)
这样,变量output1中存储的就是输出管脚名Y,变量input中存储的就是输入管脚名AB。
3)计算机利用该单元电路的单元名、各输入管脚名以及各输出管脚名生成子模块实体化语句,计算机可以使用如下命令(ksh语言):
echo“X${cell_name}$output1 $input${cell_name}”>temp2
生成子模块实体化语句并将其写入文件temp2,需要使用时将读出即可。(如果是两个输出管脚的则为:echo“X${cell_name}$output1 $output2 $input${cell name}”>temp2依此类推。)
4)生成激励波形文件。
共得到两个激励波形文件:stimu_YA1 stimu_YB1;激励波形文件内容分别为:
上述激励波形文件内容各部分含义为:(1)发生翻转的输出管脚名为Y;(2)目标输入管脚(发生上升翻转的输入管脚)为A;(3)在输入管脚A发生上升翻转时,导致输出管脚Y发生了上升翻转(01代表上升翻转,10代表下降翻转);(4)when0:此时其他输入管脚中为低电平的管脚,无;(5)when1:此时其他输入管脚中为高电平的管脚:B;(6)VA A GND p_pwl:激励波形的第一行,表示在节点A和节点GND(地电平)之间加入名字为VA,值为p_pwl1的输入电压激励。p_pwl1最后的1表示上升翻转;需要由用户给出带具体的时间点和电压值的具体激励将该部分替代;该部分只起表示上升翻转的作用。(7)VB BGND vh:激励波形的第二行,表示在节点B和节点GND(地电平)之间加入名字为VB,值为vh的输入电压激励。vh需要由用户由具体的电压值代替,只表示输入高电平的含义。
文件名stimu_YA1的含义为:输出发生翻转的管脚为Y,输入发生翻转的管脚为A,1表示该激励为本系列激励中的第一个。
如图4所示,为典型逻辑参数库的文件结构图,图示了synopsys公司的逻辑综合库的结构框架,包括管脚信息,功耗power,单元延时cell_delay,输入输出沿延时transition等部分,其中的具体数值正是需要本专利测量和填充的组合逻辑单元的逻辑参数信息。
如图6和图7所示,为典型spice仿真的文件,文件中调用了组合逻辑单元的电路网表和仿真工艺模型,例化了单元电路,设置了PVT(电源,工艺角,温度)和仿真控制条件等,另外也写出了测量相关逻辑参数的测量语句。图6中的子模块实例化语句(即子模块调用语句)部分和激励波形部分,即是需要通过ksh语句编写脚本用以填充的部分,其中子模块实例化语句和激励波形的生成前面已经介绍过。
如图7所示,为and2单元电路Spice仿真文件的实例,文件中首先使用.include和.lib语句来分别调用and2单元电路网表和1018_vap4.lib工艺库模型,其次设定PVT(电源,工艺角,温度)和仿真控制条件,然后使用.measure语句来测量相关逻辑参数以及X语句实现对and2单元电路的实例化(and2子模块电路网表如图8所示),最后给出and2单元电路A和B输入端激励波形。
如图8所示,为and2子模块电路网表,文件首行以.subckt语句开头定义了单元电路的单元名,输入输出端口名,然后描述单元电路内部各个器件的名称、连接关系、使用晶体管的类型以及尺寸,最后以.ends语句结束。