【DVCon-US-2020】采用先进 Save & Restore 技术加速仿真周转时间 (Simulation Turnaround Time)

简介: 【DVCon-US-2020】采用先进 Save & Restore 技术加速仿真周转时间 (Simulation Turnaround Time)

论文概述


本文题目 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的同学打。

1869444c29c24ad78d5c9e84bff3b1e3.png



图1 Proposed Workflows with SnR Methodology

4ceef459f6964b36a653f26a46d8590c.png


图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开始执行的时刻之前。


97840a8aba7f493086d0435a44861272.png

图3 The Dynamic SnR Methodology




方法实现


Save


为了保存仿真现场,需要做以下三步:


  1.    saving_test.sv 中插入save point,save point插入位置在common sequence之后、test sequence之前,其间可以插入多个save point。本文是DPI-C调用do_save函数,函数参数是save point的名称。


  1.    do_save.c中实现do_save函数,进行simulation状态的保存。


  1.    simulation flow中开启SnR功能,指定save file的保存路径等。



 Save 的示意代码见图4。

6333596a108343788b6bfb93fd999fc4.png


Restore


  为了恢复仿真现场,需要做以下三步:


 

  1.    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。


  1.    uvm_factory.tcl中用test_sequence override base_sequence。为了实现override_by_type,test_sequence和base_sequence的type需要相同,这也是第一步test_sequence从base_sequence派生而来的原因。


  1.    simulation flow中指定配置参数,例如sv package、tcl command、start point、datebase name等。


 Restore的示意代码见图5。

582ea401f6f545218d55300f1cfdf6b7.png




实验结果


  本文设置了两组对比实验,一是有无SnR方法的仿真时间,二是不同的common sequence(Block-A with boot,Block-B with boot + PHY init)。


试验结果如下图(图6)所示。


fc6667331c5a4535aee459f1c22623a4.png


图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资源。


 不错,推荐。





目录
相关文章
|
4月前
|
人工智能
极智AI | 讲解TensorRT Fully Connected算子
大家好,我是极智视界,本文讲解一下 TensorRT Fully Connected 算子。
68 0
|
6月前
|
前端开发 芯片
【芯片前端】所以说,一直以来我理解的set_multicycle_path -hold都是错的?
【芯片前端】所以说,一直以来我理解的set_multicycle_path -hold都是错的?
|
6月前
|
消息中间件 存储 缓存
关于电商解决方案里 Cart calculation 的数据库 Contention 问题
关于电商解决方案里 Cart calculation 的数据库 Contention 问题
41 0
|
9月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【计算机视觉】MDETR - Modulated Detection for End-to-End Multi-Modal Understanding
对于图像模型,MDETR采用的是一个CNN backbone来提取视觉特征,然后加上二维的位置编码;对于语言模态,作者采用了一个预训练好的Transformer语言模型来生成与输入值相同大小的hidden state。然后作者采用了一个模态相关的Linear Projection将图像和文本特征映射到一个共享的embedding空间。 接着,将图像embedding和语言embedding进行concat,生成一个样本的图像和文本特征序列。这个序列特征首先被送入到一个Cross Encoder进行处理,后面的步骤就和DETR一样,设置Object Query用于预测目标框。
|
9月前
|
C++
[simulink] --- 模型生成嵌入式代码配置
[simulink] --- 模型生成嵌入式代码配置
127 0
[simulink] --- 模型生成嵌入式代码配置
|
11月前
|
算法
m基于simulink的麦克纳姆轮Back-Stepping控制系统仿真
m基于simulink的麦克纳姆轮Back-Stepping控制系统仿真
134 0
|
算法
基于simulink的自适应PID控制器仿真
基于simulink的自适应PID控制器仿真
303 0
基于simulink的自适应PID控制器仿真
|
算法
m在simulink进行DS-CDMA建模,然后通过MATLAB调用simulink模型进行误码率仿真
m在simulink进行DS-CDMA建模,然后通过MATLAB调用simulink模型进行误码率仿真
176 0
m在simulink进行DS-CDMA建模,然后通过MATLAB调用simulink模型进行误码率仿真
|
数据可视化 PyTorch 算法框架/工具
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
ts重点学习13-ts优势和缺点优化
ts重点学习13-ts优势和缺点优化
69 0