电子产业一站式赋能平台

PCB联盟网

搜索
查看: 11|回复: 0
收起左侧

【芯片验证】聊聊配置寄存器的动态改配测试与等级

[复制链接]
匿名  发表于 昨天 12:03 |阅读模式
其实工作里几乎没有人会“寄存器测试等级”这么提,这个题目起成这样完全是为了跟前一篇能联系上:
【芯片设计】聊聊配置寄存器的动态改配场景与等级
寄存器测试贯穿在TO前芯片项目交付的全流程中,因为之前做了一些寄存器测试方面的工作(细想做的东西是挺杂的),所以借本篇聊一下。寄存器测试穿插在功能测试流程里,比如一般的冒烟测试至少应该有一条要求是寄存器配置通路可以正常的下配置到DUT,这本身就是在覆盖从ral_model到配置组件到RTL配置通路的功能正确性。而项目收尾的质量活动里,通常也会要求测试一下DUT内和DUT间的寄存器地址“黑洞”区域,确保不会挂死访问通路或者高要求返回固定值或error信息。在这种测试场景下就不好通过ral来下配置了,因为ral里没有这些空洞地址的寄存器信息(因为就没有真实的寄存器在这嘛),所以通常可以封一个task来根据配置地址直接对apb/axi口发起读写测试。

掐头去尾之后,中间留下的就是常规一些的寄存器测试了,这里也可以分为两部分:reg_test case和用例中寄存器访问。reg_test case通常包括复位默认值测试、读写测试、属性测试、动态复位测试等。比如对于一个RC型的寄存器A,一般需要RTL复位同时ral.reset()后读取A的值检查是否为default值;之后通过force或后门写(前提是配置了RC可被后门写)将RTL内寄存器实体赋为随机值(后release掉),而后第一次读取检查读取值是否正确,第二次读取检查读取值是否为0以确认其读清属性;之后再赋值,而后RTL复位,读取A的值来确定是否可以呗正确复位(或者,确定其不被某些复位信号影响);其他的测试还包括写a5a5、5a5a来测试位之间是否有粘连等(但没见过这个发挥作用)。UVM本身是提供了一组寄存器测试的sequence的,随便搜一下有很多使用实例白皮书上也有讲:

但是之前负责这块工作的时候是,要求是参考UVM提供的seq和其他资料组织一个独立的reg test公共测试组件供大家使用。所以很长时间以来都在疑惑,对于这种明显有成型工具与方法的测试为啥还要单独再开发一次呢,这个也没啥卡脖子的风险吧。reg_test case之外呢,就是在普通用例中对寄存器的读写与覆盖了。在之前交付的项目里,reg_test case是不能计入覆盖率的,因为你是遍历而非在真实芯片工作场景中进行的读写,覆盖项本质是伪覆盖。于是就必须想办法在功能用例中去提高寄存器的覆盖率,那终于回到了本篇的主题:寄存器的动态改配测试与等级。
在前一篇文章里我们把寄存器(主要是配置寄存器,但本篇不限于配置寄存器)划分了改配等级,那从验证的角度看,在规划寄存器操作时必须要遵循这类等级。当然如果为了注错、定向测试或者分析后可以放宽的场景下,也是可以调整策略的:

对于T4等级的不必说,通常情况下用例中是不会去配置的,此时其复位值就应该是合理值。如果必须上电改配一次才禁止后续改配那通常默认值设置的有些问题,不过对于一些时间戳时间点版本信息啥的自然没关系。T3等级一般就是configure_phase中配置一次或者动态复位用例中在复位重新撤销后配置一次。T2和T1根据实际的使用场景,可以在用例中动态的主动的配置一次或若干次。对于这类寄存器,如果想提高覆盖率或者或者增加场景覆盖度,可以采用“做减法”思路进行随机。关于这一点就不在此展开了,可以参见之前的一篇文章。而对于T0级,可以采用“白噪声”的策略在提高覆盖率和加强系统稳健性。白噪声,顾名思义就是在用例正常跑功能的同时,一般伴随着主流程嗡嗡作响的一些操作。从这个维度来说,我们可以把所有的寄存器分成以下四类:

可动态读不可动态读可动态写白噪声中随意读写白噪声中随意写不可动态写白噪声中随意读白噪声中禁用比如某个RO型计数器,其显然属于“白噪声中可随意读”的范畴,那么我们可以给他配置这个关键词,而后在白噪声的seq里随机遍历到这个寄存器时,发现可以随意读就下发一笔读请求。通过这样的方式,即确认了这类寄存器确实可以带流读写,又增加了寄存器值的覆盖率,还进行了系统的稳健性测试。当然需要注意的是,白噪声不应该影响用例主流程推进(环境保证),其造成的结果也不应该对RTL的行为有影响(RTL保证)。

系列文章入口——
【芯片设计】SoC 101(一):绪论
【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起
【芯片设计】计算机体系结构(一)虚拟内存
【芯片设计】深入理解AMBA总线(零)绪论
【芯片设计】握手协议的介绍与时序说明
【芯片设计】复位那些小事 —— 复位消抖
【芯片设计】快速入门数字芯片设计(一)Introduction
【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
【芯片设计】从RTL到GDS(一):Introduction
其他文章链接——
【芯片验证】sva_assertion: 15道助力飞升的断言练习
【芯片验证】可能是RTL定向验证的巅峰之作
【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起
【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
【芯片设计】verilog中有符号数和无符号数的本质探究
【芯片设计】论RTL中always语法的消失术
【芯片设计】代码即注释,注释即代码
【芯片设计】700行代码的risc处理器你确实不能要求太多了
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
如何计算系统的outstanding 和 burst length?
芯片搬砖日常·逼死强迫症的关键词不对齐事件
熟人社会里,一群没有社会价值的局外人

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表