论文概述
本文题目 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 测试框架。
图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愿意写也行,谁都不写的话,这方法也用不起来。
完