【DVCon-US-2020】基于RAL的UVM Sequence自动生成方法

简介: 【DVCon-US-2020】基于RAL的UVM Sequence自动生成方法

论文概述


 本文题目 Automated Generation of RAL-based UVM Sequences,作者是 Intel 的加拿大工程师。


 本文提出了一种 基于RAL(寄存器抽象层)的UVM Sequence自动生成 方法,并探讨了 通过划分TB约束范围来加速仿真 的问题。




研究目的


 通常而言,我们通过配置一组寄存器来控制 DUT 的硬件行为,以使 DUT 工作在某一 feature 下。对于不同的 feature,配置的寄存器以及配置寄存器的顺序或有不同。目前,比较常用的配置寄存器的方法是采用 UVM RAL Model 来配置 DUT 寄存器。这就意味着:我们要针对每一个feature制定一个programming sequence,并coding 成uvm sequence。


 想必各位DV同学在验证过程中遇到过这些情况:feature太多了,feature又变了,programming sequence又变了,寄存器又变了 …… 手动写、手动改,手都麻了


 怎么办?自动化!用脚本实现自动化!



新方法


 本文提出了一种 从设计文档自动生成基于RAL的UVM Sequence的方法 ,并探讨了 通过划分TB约束范围来加速仿真 的问题。图1是脚本生成UVM sequence的UVM 测试框架。


e91275f044ca43d7b68b371ed247bfcd.png

图1 Modified UVM test framework integrated with the RAL and UVM sequence auto-generation scripts



 该方法的主体思路总结如下:


   标准设计文档。写一份特定格式的设计spec,要求机器可读。该文档中需包含两个重要子spec,其一是寄存器spec,其二是各个feature的programming sequence spec。

   解析脚本。用脚本自动解析该文档,自动生成uvm sequence和ral sequence。


   每次更新设计文档,重新解析一次重新生成相关sequence即可。




 以上方法中,有几个地方我重点解释一下:


   设计文档中的programming sequence设计为有向无环图的状态机形式,便于脚本正确生成对应uvm sequence。


   为了提高coverage,这需要对RAL Model的寄存器值进行大范围随机。在较大的设计中,但考虑到寄存器间或许存在依赖关系,仅靠ral自己随机或手动在ral内添加随机约束均不太现实,ral model全部寄存器随机约束很复杂,解约束耗时久。而且不同feature下ral model的随机方案也不同。


在本文自动生成环境中,是怎么实现的呢?——针对用config_db,每一个feature的test的uvm sequence都对应一个特定的config_db,在test里set给ral sequence,且只随机我们在验证的block相关的寄存器,以此来减小解随即约束的时间(就是前边说的加速仿真),也能过防止随机出预期外的错误结果。




讨论


 这个方法好,DV再也不怕设计文档变化啦!


 方法是好方法,但实话说,本文所用的自动生成test sequence的概念并不是很新,成熟点的公司都有类似的脚本吧。


 真正要把这方法用起来,需要DE同学在写设计spec的时候规范一点。尤其是programming sequence,每个寄存器怎么配、配多少,都要写得清清楚楚。这么多feature …… 这个方法解放了DV,苦了DE啊,估计DE要骂娘了。DE不写DV愿意写也行,谁都不写的话,这方法也用不起来。





目录
相关文章
|
Java 数据库
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
186 0
【UVM源码学习】uvm_resource_db
【UVM源码学习】uvm_resource_db
468 0
【UVM源码学习】uvm_resource_db
|
测试技术 数据库 容器
【UVM源码学习】uvm_resource
【UVM源码学习】uvm_resource
174 0
【UVM源码学习】uvm_resource
【UVM源码学习】uvm_object
【UVM源码学习】uvm_object
129 0
【UVM源码学习】uvm_object
【UVM源码学习】uvm_event
【UVM源码学习】uvm_event
305 0
【UVM源码学习】uvm_event
【UVM源码学习】uvm_object_globals
【UVM源码学习】uvm_object_globals
138 0
【UVM源码学习】uvm_object_globals
|
算法
【UVM源码学习】uvm_spell_chkr
【UVM源码学习】uvm_spell_chkr
191 0
【UVM源码学习】uvm_spell_chkr
【UVM源码学习】uvm_resource_specializations
【UVM源码学习】uvm_resource_specializations
91 0
|
存储 索引
【UVM源码学习】uvm_pool
【UVM源码学习】uvm_pool
396 0
|
索引
开发指南—Sequence—隐式用法—CREATE TABLE
在为拆分表或广播表的主键定义AUTO_INCREMENT后,Sequence可以用于自动填充主键,由PolarDB-X自动维护。 扩展标准建表语法,增加了自增列的Sequence类型,如果未指定类型关键字,则默认类型为GROUP。PolarDB-X自动创建的、跟表相关联的Sequence名称,都是以AUTO_SEQ_为前缀,后面加上表名。