基于MVSIM-Native技术的低功耗仿真验证
王凤海wangfenghai@vimicro.com
吴 非wufei@vimicro.com
李树杰lishujie@vimicro.com
中星微电子有限公司
Vimicro
摘要
功耗问题现已成为制约一款芯片成功与否的重要因素之一,低功耗设计的需求推动了低功耗设计技术的突破。随着设计规模与复杂度的提高,对于电源管理策略的仿真验证的效率提出了更高的要求。本文通过一个中星微电子的实际项目,介绍如何引入Synopsys公司的MVSIM-Native Mode完成验证目标。结果表明,与传统的PLI Mode相比,MVSIM-Native Mode能很好的简化仿真验证的流程并显著提高验证工作的效率。
Abstract
Power has become a key point of a successful chip, the power spec of modern chips encourage the adoption of low power design techniques. The increase of design size and complexity raised the need of high performance power-aware simulation and verifi cation. This paper discusses the MVSIM-Native Mode technology from Synopsys, and the adoption of this technology into a ViMicro real project. The real result shows that, MVSIM-Native Mode can significantly simplify the power-aware verifi cation fl ow, improve the effi ciency, and thus shorten verifi cation turn-around time.
1. 简介
功耗问题现已成为制约一款芯片成功与否的重要因素,低功耗设计的需求又反过来推动了低功耗设计技术的突破。为了方便进行低功耗设计与验证,IEEE制定了IEEE1801标准,即Unifi ed Power Format (UPF),从而为从系统设计、分析、验证到设计实现的整个流程提供了完整的功耗描述规范。
目前SOC设计中主要采用了如图1 所示的几种降低功耗的设计技术:Clock Gating(时钟关断)、Multi Threshold(多阈值)、Power Gating(电源关断)、Multi VDD(多VDD)、Retention(状态保持) 、Dynamic Voltage and Frequency Scaling(动态频率电压调整, DVFS)及Adaptive Voltage Scaling(自适应电压调整, AVS)技术。

图 1 – Low power Design
这些低功耗技术引入了新的单元库,包括level shifter, isolation cell, retention cell等等,如图2 所示。同时,这些新技术对验证也带来了新的挑战。
我们在最近的数款低功耗SOC芯片中,采用了Power Gating, Multi VDD, DVFS及AVS等技术,为了在RTL阶段就能进行比较全面的验证,我们采用了IEEE-P1801标准,UPF,对设计的功耗意图进行描述,并使用Synopsys的Power-aware的仿真工具MVSIM与VCS配合来对这些芯片进行低功耗验证。

图 2 – Special Cells for Low power Design
2. MVSIM工具介绍
MVSIM工具是Synopsys推出的基于UPF流程的低功耗动态验证工具。它允许IC设计团队在RTL阶段(结合UPF文件)即可对自己的功耗管理机制进行功能的验证,从而尽量在设计的早期阶段发现问题,这样能够大大降低芯片的风险以及成本。
MVSIM工具是一款协仿真器(Co-simulator),它可与当下流行的功能仿真器(如VCS、Modelsim等)进行协同仿真,达到对低功耗设计的动态验证目的。传统上使用MVSIM的验证平台框架图所图3所示:

图 3– MVSIM-PLI Mode for Low Power Simulation
UPF文件反映了设计者的功耗管理意图与机制,MVSIM工具根据UPF文件来进行低功耗行为的仿真。MVSIM仿真器根据UPF文件内嵌了低功耗行为的断言。当这些断言被触发时,MVSIM会在log文件中打印出info, warning, error等信息,以帮助验证者发现问题。下面是MVSIM打印log的一段实例:
[MVSIM] INFO 5632: SupplyNet TB_VDD_CORE_PMU started with Voltage ON State/Voltage value 0.000000.
[MVSIM] INFO 5632: SupplyNet TB_VDD_CORE_D3 started with Voltage ON State/Voltage value 0.000000.
[MVSIM] INFO 5632: SupplyNet TB_VSS started with Voltage ON State/Voltage value 0.000000.
另外,MVSIM会根据UPF文件的描述,以及对工具的配置(通过archpro.ini文件)来对设计中变量的值进行force。比如某个power domain断电以后,MVSIM工具会将该domain的输出信号force成X,这样,如果设计的低功耗管理机制有问题,这些X就会传播到另外一个power on的区域,造成功能上的错误,这样验证者很容易就能发现问题。
实际的使用中,在调用MVSIM进行低功耗仿真之前,需要先使用MVCMP和MVDBGEN来对设计的HDL文件和UPF文件进行处理,从而得到可以进行低功耗仿真的数据库,如图4所示:

图 4 – MVSIM-PLI Mode Flow
MVSIM的编译流程主要分为以下几步:
1. 使用mvcmp编译UPF文件,如下所示:
mvcmp -upf tb.upf
此步完成以后,会在当前仿真目录下产生一个mvreports目录,并在这个目录下面产生一个mvcmp.log文件。该文件中包括编
译时的log信息。
2. 使用mvcmp编译设计及tb文件,如下所示:
mvcmp -vcs +systemverilogext+.sv … -f fi le.f
此步完成以后,该步编译的log信息也写在mvreports目录的mvcmp.log文件里。这里-vcs选项表明将来是要用VCS工具来进行仿真。
3. 使用mvdbgen来产生一个数据库,用于power方面的仿真。
如下所示:
mvdbgen -top SoC_tb_top
此步完成以后,该步编译的log信息写在mvreports目录的mvdbgen.log文件里。同时还会在当前仿真目录下生成一个apdb目录,这个目录里包括产生的数据库(供VCS通过PLI来调用)。另外,apdb/ev/EXTERNAL/目录下还会包含一些RTL代码,这些代码是MVSIM工具根据UPF里规定的低功耗机制来修改原设计中的RTL,在MVSIM仿真时,用的是这些修改后的RTL代码,而不是原设计中的RTL代码。
4. 使用VCS工具来进行编译。如下所示:
vcs -ntb_vl … -f apdb/ev/vcs_options_1 -f ./apdb/
ev/cmdfi le_1 -load “libmvsim-vcs.so:mvsimInit” -P /
tools/synopsys/mvtools/vC-2009.06-2/templates/
mvsim_vcs.tab
请注意-f指向的是apdb目录下的filelist,而不是mvcmp编译时指向的file.f,这是因为MVSIM仿真时需要使用修改后的RTL
(在apdb/ev/EXTERNAL目录下),而不是原始设计的RTL。
5. 最后执行simv。如下所示;
./simv …–l ./run.log
此步执行时,会在mvreports目录下生成一个mvsim.log文件,在该文件中,会打印出低功耗仿真相关的log信息。
由以上步骤可以看出,在将MVSIM整合进现有的VCS仿真流程时,MVSIM-PLI Mode需要的步骤较多。而且在中星微电子的设计中,我们使用了一些VCS的比较高阶的新feature(如Separate compile),因此在整合的过程中也遇到了一些障碍需要绕过([4] 低功耗验证解决方案 SNUG China 2010)。
3. MVSIM-Native Mode介绍
随着芯片规模以及功耗管理策略复杂度的不断增加,低功耗仿真在整个验证过程中所占据的时间越来越长,芯片设计及验证工程师们迫切希望能够提高低功耗仿真的速度。Synopsys为了更好地帮助用户,对自身的工具也在持续的整合以提高易用性和使用效率。从VCS-2011.03版本开始,Synopsys公司将MVSIM的low-power引擎也Native地整合在VCS的仿真引擎中,称之为MVSIM-Native Mode,或VCS-NLP。MVSIMNative Mode与传统的MVSIM-PLI Mode相比,不但通过去除MVSIM与VCS之间的PLI从而提高仿真的速度,而且在流程上也得到了很大的简化,使用户可以更加容易的将MVSIM低功耗仿真集成进现有的VCS功能仿真流程中。如图5所示:

图 5 – MVSIM-Native Mode Flow
可以看出MVSIM-Native Mode去除了MVCMP和MVDBGEN这两步。这样,可以保持原来的VCS功能验证的流程不用进行改变,只需要通过在VCS的编译选项中增加一个“-upf upf_fi le”选项告诉工具UPF文件的信息,就可以进行带有power信息的功能仿真了。在进行仿真时,由于VCS不需要再通过PLI来调用MVSIM,仿真的速度也得到了很大的提高。
MVSIM-Native Mode还有一个非常有用的新feature,即增加了VCS的图形界面DVE对low power相关调试的支(DVELP),
主要包括以下几点:
• 增加了数种方法可以很方便的观察各个Block(Power Domain)的Power状态
■ 新增的Power Pane可以检查各Power Domain及其所处的Power状态,可以在Data Tab中观察电源/地的信息,并可与Source Window联动用于对UPF文件进行调试,图6
■ 在Hierarchy Pane上可以弹出显示光标所指的Block所处的Power Domain及其Power 状态,图7
■ 自动生成的upf_simstate信号可以很方便的在变量和波形窗口上观察当前Domain的Power State,图8
• 在波形窗口中区分显示由于功能原因而导致的X(不确定态) 和由于供电电源而导致的X(不确定态),图8

图 6 – DVE-LP: Power Pane and Power-data tab

图 7 – DVE-LP: Tool tip in hierarchy pane

图 8 – DVE-LP: upf_simstate Signal and Special shading of LP X’s
4. MVSIM-Native Mode在ViMicro项目中的使用
我们在最近的一款大规模SOC芯片成功地同时使用MVSIM-PLI Mode和MVSIM-Native Mode完成了低功耗技术的验证。下面介绍一下项目中MVSIM-Natvie Mode的准备工作和流程。
首先要先设置一些环境变量:
module load vcs/2011.03
setenv VG_GNU_PACKAGE /tools/gcc/synopsys_gcc_4.4.2/linux
source $VG_GNU_PACKAGE/source_me_32.csh
setenv LD_LIBRARY_PATH /tools/synopsys/mvtools/vD-2010.06/linux/lib:$LD_LIBRARY_PATH
setenv APF_COMPAT 1
这里将APF_COMPAT置为1是因为当power off时mvsim工具会默认将real型的变量corrupt成0,这样我们的仿真模型会出错。添加此环境变量后可以预防这个问题。
然后是编译流程,与PLI Mode不同,Native-Mode大大简化了编译流程,不用mvcmp与mvdbgen单独进行编译,只用vcs加上-upf选项即可完成编译过程。另外,由于这是新的feature, 现在还需要加上-lca选项。如下所示:
vcs -sverilog -debug_all … f fi le.f -upf tb.upf -power_top tb_top -power=voltageaware+lp_assert -lca
这里-power_top后面接的是tb顶层。-power=voltageaware选项可以令mvsim工具对信号进行corrupt,当电压不足设计电压的30%时,信号1会被corrupt成0,当电压在设计电压的30%-70%之间时会被corrupt成X,当电压超过设计电压的70%时,信号1才是正常的1,这样可以帮助我们对低功耗设计进行debug. 另外该选项还使能了power state table的信号corrupt。当设计中出现不符合power state table的状态时,信号会被corrupt为X。
运行过程与普通情况相同:
simv -l simv.log
为了给DUV施加电压的激励,我们需要有一个vrm(voltage regulator model)模型来对设计中不同的power domain施加各种不同的电压。在PLI模式中,基本的vrm模型如下所示:
module vrm (
…
output VDD_AV,
output VSS,
output VDD_TB
);
real VDD_AV ;
real VSS;
real VDD_TB;
always @ (*) begin
VDD_AV = ….;
end
always @ (*) begin
VDD_TB = ….;
end
……
endmodule
PLI模式使用real类型的变量作为模块的端口,然后在upf中通过这个模块的端口来连接power port,如下所示:
connect_supply_net TB_VDD_AV -ports {u_vrm/VDD_AV u_vc07xx/VDD_AV}
这里u_vrm/VDD_AV是vrm模型的output端口,而u_vc07xx/VDD_AV是upf中的power port。从形式上来说,这里存在不一致问题。在Native-Mode中,纠正了这个问题,不再使用real型的变量来驱动电压,而是通过upf中的power port来驱动电压,如下所示:
首先,在upf中创建power port:
create_supply_port VDD_AV
然后在vrm模型中使用下面的命令来驱动这个power port:
supply_on(”VDD_AV”,0.9);
supply_off(”VDD_AV”);
supply_on(”VSS”,0);
下表比较了在我们项目中使用PLI模式和Native模式的编译时间以及运行时间:

由上可以看出,使用Native模式的编译时间稍有增加,但运行时间有大幅度的改善。以前的PLI模式MVSIM工具会在运行时与VCS进行大量PLI的交互,从而影响了运行效率。而NATIVE模式没有PLI交互,从而显著地提高了运行效率。
5. 结论及建议
我们在一款SOC芯片中成功地同时使用MVSIM-PLI Mode和MVSIM-Native Mode完成了低功耗技术的验证。通过比较我们发现使用MVSIM-Native Mode可以简化低功耗验证的流程并提高仿真的速度,从而保证了在设计的早期就能用较短的时间确定低功耗方面的问题,非常明显地减少了设计反复的代价。
MVSIM-Native Mode被引入实际项目的时间还不长,在VCS-2011.03版本中还是LCA的feature,因此在某些方面,还有一些有待进一步完善的地方。相信随着我们经验的积累以及流程的进一步成熟,在以后的项目中,我们对于低功耗验证流程的信心将进一步提高。
6. 致谢
在使用MVSIM与VCS完成低功耗的验证过程中,得到了中星微同事的大力支持,在此感谢刘子熹、侯华敏及其他同事的热情帮助。同时,我们要特别对Synopsys工程师时昕在我们项目过程中的宝贵建议和现场支持以及本文写作中的帮助表示感谢。
7. 参考文献
[1] Low Power Methodology Manual Michael Keating etc.
[2] Synopsys Low Power Verfi cation Tools Suite User Guide Synopsys
[3] MVSIM Native Mode User Guide Synopsys
[4] 多电压域SoC PMU Module Macro Architecture Specifi cation Vimicro.
[5] 低功耗验证解决方案 Vimicro.



