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


 不错,推荐。





目录
相关文章
【笔记】PCIe LTSSM 状态转移
【笔记】PCIe LTSSM 状态转移
3380 0
【笔记】PCIe LTSSM 状态转移
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
编译器 索引
Verilog generate
Verilog generate
|
SQL 数据库 Windows
若依代码生成详细教程
我觉得若依官方的代码生成教程过于简单,网上的教程很多连个效果图都没有。 本文要达到的效果如下:[学生管理] 下有个 [学生信息] 菜单,里面可以增删改查。
7077 0
若依代码生成详细教程
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
88_多模态提示:图像与文本融合
在人工智能领域的快速发展中,多模态融合已成为突破单一模态限制、实现更全面智能理解的关键技术方向。人类理解世界的方式天然是多模态的——我们同时通过视觉、听觉、语言等多种感官获取信息并进行综合分析。例如,在餐厅点餐时,我们会同时处理菜单上的图片、服务员的介绍和菜品的文字描述,最终做出决策。这种自然的多模态信息整合能力,正是人工智能系统长期以来努力追求的目标。
910 0
|
12月前
|
JSON Cloud Native Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:后端权限控制
GoWind Admin「风行」是企业级中后台框架,集成Casbin与OPA实现API权限控制。支持RBAC、ABAC等模型,开箱即用,助力高效构建安全的前后端一体化系统。
918 1
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
1754 8
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
在Linux中,如何杀死一个进程?如果无法正常终止应如何操作?
在Linux中,如何杀死一个进程?如果无法正常终止应如何操作?
|
测试技术 SoC
【DVCon-US-2020】以接口为中心的软硬件协同SoC验证仿真加速
【DVCon-US-2020】以接口为中心的软硬件协同SoC验证仿真加速
805 0
【DVCon-US-2020】以接口为中心的软硬件协同SoC验证仿真加速