论文概述
前几日讲了 一种基于UVM的集群级测试平台(CLT)硬件加速方法,文中采用了信号级的加速,并表示可以采用事务级传输来进一步提速——这不,讲优化方案的论文就来了
本文题目是 Interface Centric UVM Acceleration for Rapid SOC Verification,作者是三星电子的几位韩国验证工程师。本文提出了一种以接口为中心的、基于事务级的UVM加速方案,来加速SoC验证,仿真速度提升了30多倍。
真真是你方唱罢我登场,两篇论文在所采用的方法上衔接是如此丝滑顺畅,而且是在同一届会议上。若不是一个在印度Intel,一个在韩国Sumsung,我都要怀疑这两篇是不是同一个team发了两篇文章。幸亏没有放在一个session里,不然开会的时候也怪尴尬的。
研究目的
片子越做越大,仿真耗时越来越长,有钱人家便用上了emulation来加速仿真。有钱也不能放肆,原来simulation用的UVM那一套能复用就复用,改改用在emulation上也不错。
在 simulator+emulator软硬件协同验证SoC的方案 中,常用的做法是把众多的验证组件放在软件一侧。这样一来,在硬件平台和软件平台之间需要频繁地通信以进行软硬件同步,占用了大量的仿真时间。
解决软硬件平台之间频繁通信降低仿真效率、增加仿真耗时的问题,便是本文的目的。
新方法
为了加快软硬件协同仿真平台的仿真速度,本文较新颖的点主要有两点:
采用了基于transaction的事务级加速方案;(非首次,参考文献[1][2]有类似概念)
提出了一种以接口为中心的UVM加速方案,把大量的验证组件移植为可综合的interface中,并部署到emulator上去跑。
除此以外,本文还开发了一系列的通用接口库,便于复用,加快移植速度。
采用本文提供的方案,仿真速度提升了30倍有余。🐂
基于事务的加速
相较于之前基于信号的加速(SBA,Signal Based Acceleration,图1a),本文的加速方案是基于transaction的、事务级的加速(TBA,Transaction Based Acceleration,图1b)。本文做了一个实验,采用SBA方案的SoC验证,软硬件通信占用了emulation整个仿真时间的70%多,TBA方案软硬间通信只占30%,TBA加速效果更明显。
图1 Previous UVM environment for SOC verification
为什么事务级通信加速更明显呢?
采用SBA方案时,为了正确驱动DUT,软件需要严格按照时序驱动多根信号线,还需要监测DUT反馈的信号进行check等。采用TBA方案时,由于相关驱动和监测模块做到了DUT接口部分,软件只需要发送简单的控制信号给DUT,DUT接口处的相关组件驱动DUT。之前需要长篇大论才能解释清楚的工作,现在现在一个眼神就心知肚明了,速度当然快了。
以接口为中心的UVM加速
以接口为中心的UVM加速环境示意图如图2所示。
UVM软件层面,把monitor、scoreboard、checker等工作从agent挪到interface里来完成;
硬件层面,在DUT接口处实现跟UVM monitor、scoreboard、checker等功能相同的、可综合的组件。
图2 Interface centric UVM Acceleration environment
TB移植
SoC验证软硬件接口
为了减少软硬件通信,硬件希望把接口部分放在硬件侧;为了开启增量编译,软件希望把接口部分放在软件侧,这样不用每次都编译完整的RTL。如何兼顾两者呢?本文把所有子系统的接口例化集中放在同一个接口文件 intf_inst.sv 中,用 EMULATION 这个宏决定吃不吃intf_inst.sv,在软硬件编译的时候都编译一次。如图3所示。
图3 Implementation of Interfaces
通用接口库
为了加速移植,本文开发了部分通用接口库。
以simulation环境的 repeat(cycle_delay) @(posedge aclk) 为例,本文详细解释了如何用通用接口库来实现替换的。原有的repeat方式,每个clk cycle都要进行软硬件同步。本文在interface的task实现相同的功能,软件调用task的方式,只需要start和result两次软硬同步就可完成repeat相同的功能。具体不作赘述,请看图4、图5自行品味。
图4 Example of using Common Interface Library
图5 waitClock Implementation for Concurrent Access of wait_posedge task
Emulation 加速
可综合的验证组件
为了打造一个适用于simulation和emulation的快速验证环境,原来simulation既有的monitor、checker、scoreboard等组件转换为可综合的形式,并移驾到Interface中。不同于典型的RTL写法,emulation中支持可综合的for/while等语法,便于code移植。
基于FIFO的软硬件通信
把原来simulation既有的monitor、checker、scoreboard等组件全部转换为可综合的形式,工作量也是不小。尤其是对于C model的情况,C不可综合,总不能把C model用RTL重写一边吧。这时怎么办? 本文还是继续用C model,通信的数据放在FIFO里,Emulator工具支持软硬件间通过FIFO通信,等FIFO快空/满的时候再填/搬数据,聚零为整,也是能够大大减少软硬件通信次数的。
实现举例
Monitor/Scoreboard
图6 Conventional Monitor for Scoreboard
图7 TBA Implementation of Figure 6
图8 Proposed Implementation of Scoreboard
寄存器访问
图9 Proposed Method for Register Access
图10 Example of Proposed Method for Polling
PLL
图11 Example of PLL Modeling
讨论
方法好,没得说。论文没有提下一步的计划,强行安了几条缺点:emulator贵、协同仿真schedule/resource不好排。
参考
Hans can der Schoot, “UVM and Emulation: How to Get Your Ultimate
Testbench Acceleration Speed-up”, DVCON EUROPE, 2015.
Sunil Roe, “UVM Acceleration Using Hardware Emulator at Pre-silicon Stage”, DVCON, 2018.