论文概述
本文题目 Saving and Restoring Simulation Methodology using UVM Factory Overriding to Reduce Simulation Turnaround Time,作者是三星电子的韩国工程师。
本文提出并实现了一种动态SnR(save and restore)方法,能够加速仿真周转时间(simulation turnaround time)。
研究目的
热身两小时,上场一分钟
SoC仿真验证中,你是否苦恼于 初始化配置两小时,个人测试sequence运行一分钟 的现状?对于大型SoC而言,在运行我们写的test sequence之前,要进行繁杂耗时的boot、initialization、phy training过程(下文称common sequence),我们真正关心的test sequence跑起来可能几分钟就够了。
在case调试期间,每做一点case修改rerun的时候都要重复跑一遍common sequence,common sequence删还删不得,让热爱工作追求效率的我们心力憔悴。
原有优化方法局限多
加速仿真的方法有很多:
- simulation加速,这个方法就很多了。
- 一是优化code、flow,但这个对优秀的验证工程师而言并不适用,除非你code、flow很烂,否则指望优化code获得的simulation提速效果都不是很明显。
- 二是可以用save & store(下文称SnR)的方法跳过common sequence(图1是未采用SnR及采用SnR方法的验证Flow对比,图二是SnR Override示意图),但传统的SnR方法仅适用于case、TB固定情况下的rerun,且只能指定一个时间点进行SnR。一来能够指定的SnR数目有点少,二来SnR时间点不好把握,三来Save后要用来override的test sequence不能做任何修改,这还怎么玩?
此外,simulation性能本身以每年10%的速度提升,这个跟SoC Size的发展速度比,还是不行。
emulation。emulation很快,但emulator一是死贵,二是一般用在耗时极久的大场面的仿真上,小case开发过程中也不太方便频繁放到emulator去跑,怕被跑emulation的同学打。
图1 Proposed Workflows with SnR Methodology
图2 Basic Concept of UVM Factory Override Mechanism
新方法
方法提出
本文提出一种新的SnR方法(图3)来缩减仿真周转时间,该方法仍然是基于UVM factory的override机制,采用该方法可以指定多个SnR的点,且在case、TB不稳定的时候仍然适用。该方法无需额外的硬件投资,经济实惠。
当simulation跑到指定点之后把DUT、TB状态进行保存,称为snapshot。restore的时候,先编译自己修改后的test sequence,然后用simulator的tcl命令把旧的sequence override掉,最后把save的文件读进来,从执行save的时间点继续执行仿真。
本文的方法在初次运行的时候,执行多次save过程,restore的时候可以指定save point。有几点需要注意:restore的时候,指定的save point需要在test sequence开始执行的时刻之前。
图3 The Dynamic SnR Methodology
方法实现
Save
为了保存仿真现场,需要做以下三步:
- saving_test.sv 中插入save point,save point插入位置在common sequence之后、test sequence之前,其间可以插入多个save point。本文是DPI-C调用do_save函数,函数参数是save point的名称。
- do_save.c中实现do_save函数,进行simulation状态的保存。
- simulation flow中开启SnR功能,指定save file的保存路径等。
Save 的示意代码见图4。
Restore
为了恢复仿真现场,需要做以下三步:
- test sequence放在test_pkg.sv中。可以在base_sequence放common sequence,并从base_sequence派生出test sequence。为了实现sequence可修改的SnR机制,test sequence需要放在SV package中(Top Level),以在多个环境组件之间共享数据、参数等。SV package作为restore simulation的输入文件,在restore之前重新compile、elabrate这些test sequence。
- uvm_factory.tcl中用test_sequence override base_sequence。为了实现override_by_type,test_sequence和base_sequence的type需要相同,这也是第一步test_sequence从base_sequence派生而来的原因。
- simulation flow中指定配置参数,例如sv package、tcl command、start point、datebase name等。
Restore的示意代码见图5。
实验结果
本文设置了两组对比实验,一是有无SnR方法的仿真时间,二是不同的common sequence(Block-A with boot,Block-B with boot + PHY init)。
试验结果如下图(图6)所示。
图6 试验结果
从图中可见,仅有Boot的Blocak-A,采用本文SnR方法能够把TAT提升88%;
Boot+PHY init的Blocak-B,采用本文SnR方法能够把TAT提升97%
讨论
方法挺好,实现起来不复杂,经济实惠,支持多save point,在case调试过程中也能使用,提升的速度也相当明显,能够大大加快case开发迭代速度。
本方法做些改进,用在power-aware sim、gate-sim或regression中,省时间不说,还能省不少memory、licence、server资源。
不错,推荐。
完