在混合信号芯片设计领域,Verilog/Systemverilog/VHDL等行为级模型被广泛应用于描述模拟和混合信号模块的电路特性,用以帮助实现更快速全面的全芯片功能验证。为了保证正确、有效和全面的全芯片功能验证,电路模块的行为级模型和晶体管级设计之间的功能比对验证(Behavior vs.Schematic,BVS)非常关键。在此之前,利用现有的EDA工具,只能进行逻辑状态的BVS矢量检查,而不能进行实数类型的矢量检查。为了更好地描述模拟和混合信号模块的行为特性,采用了Wreal模型和SV-UDT(Systemverilog-User Defined Type), 因此对EDA工具提出了新的要求,需要其支持实数类型的矢量检查。本文描述了一种行为级模型功能比对验证的自动方法学,基于Cadence XPS仿真器的矢量检查功能,可以同时实现逻辑状态和实数类型的自动比对检查。实数类型矢量检查是向EDA供应商Cadence提出的一种新的概念和需求,且已经在XPS仿真器中成功实现。
中文引用格式: 廖璐,候春源,李跃平,等. 行为级模型功能比对验证的自动方法学[J].电子技术应用,2019,45(8):63-67.
英文引用格式: Liao Lu,Hou Chunyuan,Li Yueping,et al. Automatic simulation method for functional equivalence check[J]. Application of Electronic Technique,2019,45(8):63-67.
随着集成电路技术的进步与发展,混合信号芯片现今被广泛使用,该芯片设计领域通常需要采用大量测试矢量进行全芯片功能验证仿真,因此,对模拟和混合信号模块建立快速、准确的行为级模型至关重要[1]。这些行为级模型既要和实际电路端口一致,还要能正确体现实际电路的功能和重要行为特性,且不能对全芯片功能验证仿真速度造成太大影响[2]。为了更准确地描述模拟和混合信号模块的行为特性,例如电路中的电压都是实数值,而不是简单的0和1,采用了Wreal模型和SV-UDT来实现模块实数电压的建模。此外,为保证正确、有效和全面的全芯片功能验证仿真,需要对各个模块的行为级模型和晶体管级电路进行功能比对验证。采用Cadence XPS仿真器的矢量检查功能对行为级模型的Verilog仿真结果和晶体管级电路的Spice仿真结果进行比对验证,把这套方法称为BVS流程或者BVS检查。在此之前,利用现有的EDA工具,只能进行逻辑状态的BVS矢量检查,而不能进行实数类型的矢量检查,因此,对EDA工具提出了新的要求,需要其支持实数类型的矢量检查。此外,功能比对验证时所采用的输入激励传统上是根据工程师对于电路模块的理解手动生成的,这样采用的输入激励覆盖率不够全面,因此,需要一种自动生成覆盖率全面的输入激励的方法。基于BVS功能比对验证的重要性,本文描述了一种行为级模型功能比对验证的自动方法学,采用Cadence XPS仿真器的矢量检查功能,可以同时实现逻辑状态和实数类型的自动比对验证。传统的逻辑状态矢量检查可以通过图1所示的BVS自动比对流程实现。其中,模块的行为级模型用NC-Verilog进行仿真,对应的晶体管级电路用XPS进行仿真,并通过在XPS仿真中添加测试矢量文件,对上述两种仿真结果进行自动比对,用以验证行为级模型和晶体管级电路的功能是否匹配。
图2给出了通过行为级模型Verilog仿真生成的测试矢量文件以及XPS如何基于该文件进行自动比对的实例。生成的测试矢量文件主要包含了如下几个分支:vname、io定义,检查时间窗口以及信号切换监测。其中,vname用于列出所仿模块所有输入和输出pin脚的名字。io定义用于说明每个pin脚的类型,输入pin为“i”,输出pin为“o”,对于矢量文件中的输入pin脚,它在XPS仿真时会根据矢量文件中设定的Vih和Vil值转换成PWL电压源;对于矢量文件中的输出pin脚,它的值会被认作为预计逻辑输出,然后XPS的模拟实际输出会根据矢量文件中设定的Voh和Vol值转换成实际逻辑输出,并与预计逻辑输出进行比对验证;对于io定义为“u”的pin脚,表示为没有用到的pin脚,仿真时会被接到高阻态,并且不会对这个pin脚进行任何比对验证。检查时间窗口定义了在哪个时间段对实际输出和预计输出进行比对,通常会选择实际输出信号建立稳定后的时间窗口,如图3所示。信号切换监测会打印出所有输入pin脚和输出pin脚的信号切换值,以确保用于行为级模型Verilog仿真和晶体管级电路Spice仿真的输入激励相同,并且所有相应的输出都会被比对验证。
进行逻辑状态自动比对时,如果实际逻辑输出和预计逻辑输出不匹配,也即是违反了匹配需求条件,如表1所示,则警告和错误信息会被写入矢量检查出错报告中,如图4所示。如果完全匹配,则出错报告会是一个空文件。
只包含逻辑状态的行为级模型用来描述模拟模块行为特性会有较大的局限性。如图5所示,例如:(1)不能描述输出电压和电源电压之间的相关性;(2)电路中被不同模块多级驱动的节点不能被正确描述,从而不能正确反映实际电路真实情况;(3)模块内部中被多级驱动的节点不能被正确描述,对应的电压转换不能被正确体现出来。Wreal模型和SV-UDT的引入和组合应用可以帮助克服这些局限性[3],通过SV-UDT,可以基于建模需求去定义一些特定的信号类型,例如同一个端口可以包含逻辑状态和实数值两种类型,因此这就需要矢量检查同时支持逻辑状态和实数类型两种检查。图6给出了Wreal模型和SV-UDT组合应用的一个具体示例。
在利用XPS仿真器进行逻辑状态矢量检查的基础上,对EDA供应商Cadence提出了实数类型矢量检查的新需求,具体的实现细节如下:首先,在矢量文件中增加了一个新的参数“sig_type”,用来帮助区分是逻辑状态检查还是实数类型检查。此外,还增加了2个新的参数用来定义电压容差,一个是允许的绝对误差(abstol),另一个是允许的相对误差(reltol)。这个电压容差,定义了行为级模型Verilog仿真预计实数输出和晶体管级电路Spice仿真实际模拟输出之间允许的电压误差,只有当实际模拟输出在“预计实数输出±(绝对误差+预计实数输出*相对误差)”范围以内时,两者才算匹配。例如,行为级模型Verilog仿真预计实数输出为1.2 V,允许的绝对误差为0.01,允许的相对误差为0.1,也就是10%,根据公式计算,晶体管级电路Spice仿真实际模拟输出只有在1.07 V~1.33 V之间时,两者才算匹配。除此以外,还提出了进一步的改进需求,例如需要矢量检查支持实数类型的x状态(`wrealXstate)检查和实数类型的z状态(`wrealZstate)检查。当进行z状态检查时,如果行为级模型的预计实数输出是`wrealZstate,对应晶体管级电路的实际模拟输出需要是高阻状态,否则不匹配;当进行x状态检查时,如果行为级模型的预计实数输出是`wrealXstate,对应晶体管级电路的实际模拟输出需要是多驱动状态,否则不匹配。这些进一步的改进需求也已经在XPS仿真器中实现了。图7给出了一个用于实数类型矢量检查的测试矢量文件的实例。行为级模型Verilog仿真的预计实数输出可以和晶体管级电路Spice仿真的实际模拟输出在检查时间窗口内直接进行自动比对验证,如图8所示。
进行实数类型自动比对时,如果实际模拟输出和预计实数输出不匹配,也即是违反了匹配需求条件,如表2所示,则警告和错误信息会被写入矢量检查出错报告中,如图9所示。如果完全匹配,则出错报告会是一个空文件。
传统上,功能比对验证时所采用的输入激励是根据工程师对于电路模块的理解手动生成的,然而这样采用的输入激励覆盖率不够全面,进而影响功能比对验证的准确度[4]。为了解决这个问题,提出了一种利用带设计约束的IO配置表产生覆盖率全面的输入激励的方法,图10给出了这种方法的工作流程图。
IO配置表不仅用于定义产生输入激励的输入约束,也用于定义输出比较的输出约束。例如,对于用作输入的pin脚,其设计约束包含:(1)Vih/Vil,用于指定逻辑高和逻辑低状态转换成模拟输入时的电压值;(2)信号强制,用于定义是否强制某个输入信号为逻辑状态“1/0/x/z”中的某一个或者遍历这些状态;(3)限制性输入,用于定义某个输入信号和其他输入信号之间的相关性;(4)优先级,用于指定遍历某些输入信号组合时的优先顺序;(5)周期,用于定义输入组合激励之间的间隔周期。对于用作输出的pin脚,设计约束包含:(1)是否包含实数电压值,如果“是”,则对这个输出信号既要进行逻辑状态检查,又要进行实数类型检查;如果“否”,则只对这个输出信号进行逻辑状态检查;(2)Voh/Vol,用于指定逻辑状态检查时,XPS实际模拟输出电压转换成逻辑高和逻辑低状态对应的电压值;(3)没有用到的pin脚,用于指定是否要跳过对这个输出信号的矢量检查;(4)Z态检查,指定是否要对这个输出信号进行Z状态检查;(5)X态检查,指定是否要对这个输出信号进行X状态检查。混合信号芯片设计中需要对大量模块进行行为级建模和功能比对验证,因此需要引入一种自动仿真方法来自动生成功能比对模块清单,启动行为级模型Verilog仿真和晶体管级电路Spice仿真,进而从XPS仿真中自动生成逻辑状态矢量检查出错报告和实数类型矢量检查出错报告,最后提取其中的有用信息并汇总到自动比对检查报告中。这套功能比对验证的自动仿真方法流程图如图11所示:第一步,根据电路模块清单从Cadence数据库中抽取出行为级模型和Spice网表;第二步,为每个模块生成带有所有pin脚的IO配置表;第三步,为IO配置表中的所有输入pin脚和输出pin脚定义设计约束,这一步可以帮助确保生成覆盖率全面的输入激励;第四步,基于IO配置表,自动生成每个模块的行为级模型Verilog仿真平台和晶体管级电路Spice仿真平台;第五步,用NC-Verilog启动所有的行为级模型Verilog仿真,并生成矢量检查需要用到的测试矢量文件;第六步,用XPS启动所有的晶体管级电路Spice仿真,仿真时会用到已经生成的测试矢量文件,并进行矢量检查,逻辑状态矢量检查和实数类型矢量检查都会在此涉及;第七步,从逻辑状态矢量检查和实数类型矢量检查结果中提取有用信息并生成自动比对检查报告。
在混合信号设计中,创建准确的行为级模型对于能否实现正确、有效和全面的全芯片功能验证至关重要。因此,对行为级模型和晶体管级设计之间进行功能比对验证非常关键。Wreal模型和SV-UDT可以帮助实现更准确的行为级模型。本文介绍了一种基于覆盖率全面的输入激励,对大量电路模块同时进行逻辑状态矢量检查和实数类型矢量检查,从而实现行为级模型功能比对验证的自动方法学。实数类型矢量检查是我们向EDA供应商Cadence提出的一种新的概念和需求,该需求已经在XPS仿真器中成功实现。在此基础上,XPS实数类型矢量检查进一步改进,以支持高阻态检查和多驱动态检查。覆盖率全面的输入激励是根据带设计约束的IO配置表自动生成的。本文提出的这套自动方法学,可以帮助显著提高全芯片验证的精度、效率和覆盖率。
参考文献
[1] THELEN D,MACDONALD J.Simulating mixed analog-digital circuits on a digital simulator[C].ICCAD,1988:254-257.
[2] MALCOVATI P,BRIGATI S,FRANCESCONI F,et al.Behavioral modeling of switched-capacitor sigma-delta modulators[J].IEEE Transactions on Circuits System I,2003,50(3):352-364.
[3] O’LEARY M,KOLPEKWAR A.Cadence wreal technology contribution to Accellera Verilog-AMS standard[Z],2010.
[4] LIM B C,KIM J,HOROWITZ M.An efficient test vector generation for checking analog/mixed-signal functional models[C].Proceeding DAC,2010:767-772.
作者信息:
廖 璐1,候春源1,李跃平1,王 美1,刘欢艳2,黄丞权2,徐南南2,董丽霞2
(1.紫光长存(上海)集成电路有限公司,上海200120;2.Cadence Design System,上海200120)