王福君 fujun_wang@panovasic.com
王志宇 wang.zhiyu@synopsys.com
四川虹微技术有限公司
新思科技
随着SoC芯片的集成度越来越高,功能越来越复杂,其功耗也在不断增大。功耗显然已经成为衡量一颗芯片成功与否的重要标准;而对目标市场定位为便携式电子设备的音视频处理SoC芯片而言,其对功耗的要求则更为严苛。
本文分享了我们使用Synopsys公司的低功耗验证工具MVTools进行低功耗验证的经验,通过对低功耗验证流程中几个阶段工作的把握,发现了低功耗技术实现过程中产生的一些缺陷,确保了芯片成功流片。
With the SoC chip’s more and more integrated, its functionality becomes more and more complex, and its power consumption is also growing ceaselessly. Nowadays power consumption has clearly become one of criterions to measure whether a chip is succeeded or not. The audio & video processing SoCs which are targeted at portable electronic devices need much more lower power consumption.
This paper shares the experience using Synopsys’s low-power verification tool – MVTools in certain project. By using MVTools in the several stages of the low-power verification, we found some bugs caused by implementation of low-power technology to ensure the taped-out successfully.
现在的SoC设计中,功耗问题逐渐成为业界关注的焦点。因为电池技术的发展滞后于半导体技术发展,对于使用电池供电的便携式产品来说,功耗问题带来的影响更大。另外,因为几乎很难在便携式产品上增加散热配件,散热是导致大家关注功耗问题的另一个原因。开发此类芯片时,需在设计之初就对功耗进行合理规划,使用多种低功耗技术来最大程度地降低芯片功耗,延长产品的使用时间,提供产品的竞争力。
在我们的项目中,为了更好地控制功耗,使用较多的低功耗设计技术。第二节对PA_XXX项目做以简单介绍,包括设计中使用的低功耗技术以及复杂的power domain和power sequence,引出低功耗验证中的难点。第三节详细介绍了项目中验证工作面临的挑战。第四节介绍了Synopsys MV Tools工具在低功耗验证方面强大的功能和优势。第五节介绍了如何使用MV Tools对设计进行动态仿真和静态检查。第六节则对低功耗验证中发现的bug做以分析。最后,得出结论并给出一些建议。
PA_XXX SoC的是一颗用于便携式设备的高性能、低功耗的多媒体处理芯片,采用CPU+DSP的双核多总线架构,支持多格式视频硬件解码;支持多媒体加速;支持高清电视输出;支持多格式音频解码;支持高品质的视频录制及图像拍摄;支持数据加解密;支持基于SD、USB等大批量数据传输、存储等。图1是PA_XXX SoC的系统结构框图。
由于便携式设备大多采用电池供电,所以芯片对功耗的控制显得尤为重要,如何最大限度地降低芯片的动态静态功耗,延长电池的寿命,是我们设计中的一个重点。
PA_XXX项目中对功耗管理进行了规划,使用了较多的低功耗设计技术,如下描述:
同时,根据实际的应用场景考虑,我们将芯片划分了多个power domain(如图2所示),随之衍生出复杂的power mode和power sequence(如图3所示)。
由图3可以看出,power sequence较多且情况较复杂。我们将常用的合法的power sequence列在表1中,如果穷举所有的可能,则情况更为复杂,具体要根据testcase来制定需要捕获的Power sequence。
当设计中引入了多种低功耗技术后,验证工作相应地增加了难度。结合PA_XXX项目,我们认为以下几个方面对验证工作提出了挑战。
要解决上述这些问题,唯一的途径是使用下一代的验证工具,它要能够识别功耗设计意图文件(Power Intent)并检查其正确性;可以智能地捕获电源或电压的变化,并根据变化做出相应的反应;可以抓取power sequence信息,并检查power sequence的覆盖情况。
Synopsys公司的MV Tools正是针对低功耗验证开发的专项验证工具,它可以完美解决上面我们提出问题。MV Tools支持完整的基于UPF的低功耗验证流程(见图4)。与其它公司的低功耗验证工具相比,MV Tools在以下几个方面拥有优势:
MV Tools工具包括两个部分,即动态仿真工具MVSIM和静态检查工具MVRC。图5为基于UPF的使用MV Tools工具的验证流程。
与普通的验证环境相比,低功耗验证环境中的输入内容有所不同。上图蓝色虚线框中的内容为低功耗验证环境中必备内容:
低功耗验证流程与设计实现(implementation)流程相对应。无论是使用MVSIM做低功耗仿真,还是使用MVRC做静态检查,低功耗验证流程都会经历三个步骤,即:RTL+UPF阶段,Gate+UPF’阶段和Gate+UPF’’阶段。在后面两个阶段,验证的设计文件和UPF文件来自于设计实现的输出,如图13所示。下面详细说明低功耗的仿真与静态检查。
低功耗验证的目的是保证芯片设计在加入低功耗机制后仍然能够正确地工作,并正确实现了定义的低功耗策略,因此,在仿真时,我们将关注以下几个方面:
根据上节的分析,在制定testcase时要覆盖到上面所述的所有情况,同时要覆盖各个Power Domain之间切换,各个电压频率模式切换,以及芯片中各个数据通路。Testcase制定是否合理精炼对验证工作有着重要作用。
从图5我们可以归纳出基于MVSIM的仿真步骤:
为了对Power sequence进行捕获和检查,我们在MVSIM的仿真中结合了APF(ArchPro Power Format)文件,下面是一段APF文件的实例代码。在APF文件中,我们会对合法的power sequence进行描述,最终通过对Mvsim图形界面进行数据库分析,就可以判断是否我们关心的power sequence都已经出现。
ClockDef clk;
Sequence LpSeq;
initsection
PA_XXX.statemachine = {
Full= Normal,
(PA_XXX_top.u0_system_top.u0_PD_IP.CDSP_ISO==1)@clk;
Normal= Full,
(PA_XXX_top.u0_system_top.u0_PD_IP.CDSP_ISO==0 && PA_XXX_top.u0_system_top.u0_PD_IP.MDSP_ISO==1)@clk;
Idle= Operation, (PA_XXX_top.u0_system_top.u0_PD_IP.CPU_ISO==0)@clk;
Operation= Backup_Hiberate,
(PA_XXX_top.u0_system_top.u0_PD_IP.VIDEO_ISO==1 && PA_XXX_top.u0_system_top.u0_PD_IP.CPU_ISO==1)@clk;
Sleep= Backup_Hiberate,
(PA_XXX_top.u0_system_top.u0_PD_IP.CPU_ISO==1)@clk
……
};
clk.signal = “PA_XXX.u0_system_top.u0_PD_IP.CLK_SOURCE”;
clk.clocktype = posedge;
LpSeq.voltagestatetable = PA_XXX;
LpSeq.sequences["lp_sq1"]={”Full”,”Operation”,”Sleep”, Operation”};
LpSeq.sequences["lp_sq2"]={”Full”,”Operation”,”Sleep”, “Hiberate”, “Operation”};
LpSeq.sequences["lp_sq3"]={”Full”,”Normal”,”Operation”,”Sleep”, “Backup_Hiberate”,”Operation”};
LpSeq.sequences["lp_sq4"]={”Full”,”Operation”,”Sleep”, “Hiberate”, “Operation”,”Full”};
LpSeq.sequences["lp_sq5"]={”Full”,”Normal”,”Sleep”,”Idle”,Operation”,”Normal”,”Full”};
…..
endinitsection
MVSIM通过PLI接口与仿真器进行交互,在VCS中使用VPI(Verilog)和VHPI(VHDL)。通过PLI访问使不少仿真优化选项失效。最典型的是,使用VPI访问设计时会让runtime性能降低。为了得到更高的性能,对回归模式的设置进行了优化,如果启用PLI,对它的性能影响也很大。另一方面,如果在debug模式(全部访问选项都被打开)或仿真时,因为使用了其它的PLI,此时启用PLI访问,对性能的影响不是十分明显。
目前,在MVSIM中提供的是通过PLI对整个设计的访问。设计允许被部分访问,可以通过PLI表文件(.tab)来控制。有时候,并不是设计中所有的模块都需要通过VPI访问。
在这样的情况下,如果测试向量对设计有类似的访问需求(severity and scope),可以先生成pli_learn.tab文件,在仿真时使用该pli_learn.tab文件。操作分两步:第一步+vcs+learn+pli生成learn.tab,第二步+apply+learn应用第一步生成learn.tab。下面是代码示例。
vcs +v2k -l transcript.log -full64 \
-f apdb/ev/cmdfile_1 \
+vpi \
-P ${ARCHPRO_ROOT}/templates/mvsim_vcs.tab \
-load “libmvsim-vcs.so:mvsimInit”
simv +vcs+learn+pli
@rm -rf csrc
vcs +v2k -l transcript.log -full64 \
-f apdb/ev/cmdfile_1 \
+vpi \
+applylearn \
-load “libmvsim-vcs.so:mvsimInit”
多数情况下,下面三种情形可能导致仿真变慢:
(a) 使能强制访问;
(b) 大量调用PLI,强制设置power domain中内部信号为x态;
(c) 装载MVDB库文件消耗了过多的额外内存。
我们下面介绍的dgate模式可以克服上述问题。在archpro.ini文件中进行如下设置可使能该模式:
[MVSIM]
performance_mode = dgate3
当使能这种模式后,在domain的边缘和domain中的某些内部信号上,会使用”disconnect gate”。当这个domain被关闭后,disconnect gate的输出为”X”. 以此”X”态传播,可以对于其他power domain进行corruption。这样可以避免force domain中所有的内容(信号),也可以减少对PLI的调用。
当使用这种模式时,MVSIM运行中使用的access文件已经被从apdb/ev/mvsim_vcs.tab文件中移除了,该文件现在由MVDBGEN产生并优化,生产的文件只会罗列被MVSIM访问的信号名,访问的权限也会降低。
目前,这种模式只能在纯Verilog设计中使用。在UPF_ON_OFF=yes和UPF_ON_OFF=no两种模式下都能使用。但是,使用它还有较多的限制条件,描述如下:
1. 不支持电平有效的retention;
2. 不支持备份功能;
3.不支持VHDL及混合设计
4. Disconnect gates会忽略驱动的strenth.
5. 在power domain的边缘,Inout ports 不能被corrupt.
6.不支持SystemVerilog
7. 如果clock的产生模块在其中一个power domain中,当关闭此电源域,日志文件中会出现不正确的clock wiggling assertion.
MVRC是一个用于多电压规则检查的静态验证工具,它使用TCL接口,能够对RTL、网表以及带PG(Power-Ground)信息的网表做规则检查。MVRC在使用时同样要先执行mvcmp和mvdbgen,产生Multi-Voltage数据库,然后使用MVRC提供的TCL脚本命令,检查我们关心的内容。在验证过程中,根据MVRC的标准流程,我们完成了如下的工作。
Power Intent Consistency Check用于确认UPF文件中基于PST(power state table)的isolation单元和level shifter单元符合规则,实际上就是将PST作为golden的参照标准,去检查UPF和设计是否存在问题。在实际验证过程中,我们使用了如下两条命令对RTL阶段的UPF文件和设计进行检查:
report_protection –critique
report_architecture
Architectural Check用于对从一个关断的电源域输出到一个有效的电源域的信号进行检查,这个(这些)信号可以是穿过关断的电源域的信号,也可以是本身源于这个电源域的信号。在这个阶段,MVRC check不再考虑PST,而是将经过实现后的设计与UPF intent文件进行对照检查。在实际验证过程中,我们使用了下面的命令,当使用这条命令时,Critical functional signals和UPF控制信号会被自动检查。
report_architecture –island_order
如果还希望检查其它信号,则增加-signal命令选项。
report_architecture –island_order –signal <signal_root_pin>
Structural Checks用于对网表级的isolation单元和level shifter单元相关信息进行检查。常见的问题包括,冗余的level shifter单元,缺失isolation单元或level shifter单元,isolation单元和level shifter单元互换,经isolation单元箝位输出的信号极性错误等。在实际验证过程中,我们使用了下面的命令来检查上述的可能出现的问题。
report_protection –intent
如果需要对power switch单元进行检查,使用下面的命令。
report_power_switch
在这个阶段,MVRC可以对power switch单元,isolation单元以及level shifter单元的完整性进行验证,检查这些特殊单元是否没有连接,或者是否按照UPF文件的描述正确的连接,实际验证中主要使用如下命令。
report_protection_pg
report_switch_pg
在进入深度睡眠模式之后又被唤醒后,VIC(中断控制器)工作异常。经过debug后发现,软件在进入深度睡眠前只对前一个模式中相应的寄存器配置信息进行了备份,并没有对VIC的配置信息进行备份,而VIC在深度睡眠前使用边沿有效,而VIC默认的是电平有效。所以系统在唤醒后,VIC为电平有效,而原来产生的一个中断一直没有清掉,导致VIC看到还有中断就产生了一个irq送给CPU,这是一个错误的行为。
在UPF的描述中,电源域PER的输出信号RESET_WDT应被isolation cell箝位为0,但文档描述为1,所以导致UPF文件中的RESET_WDT箝位值为1。
在某个DVFS的case中有这样的一段操作:“配置CPU core clock和bus clock的比例,由2改为3,再将CPU core clock的分频系数由默认的3改为2”,软件在实际操作过程时,在配置完CPU core clock分频系数后,需要读CLK_LOAD_EN寄存器是否为1,然后在读这个寄存器是否为0(该寄存器为硬件自己清零,但需要几个Clock周期)。但在CPU core clock的分频系数由默认的3改为2后,硬件在CPU执行读CLK_LOAD_EN寄存器是否为1前已经将该寄存器清零,所以程序一直在循环的执行读操作,而无法向下运行,而实际中这样的错误只会出现在CPU core clock的分频系数修改的情况。
在某个变频的case中,某个时钟在频率切换过程中出现了高频时钟,这是时钟控制单元设计本身的问题。
在设计中实现低功耗技术后,传统的仿真工具和验证方法已经不能满足需求,我们需要使用新的仿真工具和方法;同时低功耗技术的加入也会引入新的bug,bug的发现又需要新工具和新方法的支持。在项目中,我们使用了Synopsys公司开发的基于UPF流程的MV Tools,发现了传统验证方法无法发现的bug,大大加速了项目的验证,为设计做了充分的保证。
感谢余德君、魏丹在低功耗验证工作中的通力合作,感谢徐栋磊、郑元吉、何祥、周磊以及其他同事的大力协助和支持。另外,还要感谢Synopsys工程师王志宇,他为我们的低功耗验证工作提出了很多宝贵的意见和建议,给予了我们极大的支持和帮助。
转自:http://www.synopsys.com.cn/information/snug/2010/low-power-verification-experience-using-mvtools
文章评论(0条评论)
登录后参与讨论