2021-03-19 验证导论

验证导论

1. HVL(Hardware Verification Language)相比于HDL(Hardware Description Language)的一些特点:

  1. 受约束的随机激励生成;
  2. 功能覆盖率;
  3. 更高层次的结构,尤其是面向对象的编程;
  4. 多线程及线程之间的通信;
  5. 支持HDL数据类型;
  6. 集成了事件仿真器,便于对设计施加控制;

2. 漏洞可能发生的地方:

  1. 代码块层次:功能定义,数据流向等等;
  2. 代码块边界:对于规范的理解不同;

3. 基本测试平台的功能

  1. 产生激励;
  2. 激励加载到DUT上;
  3. 捕捉响应;
  4. 检查正确性;
  5. 对照验证目标测算完成进度;

4.完全覆盖的技术路线

添加约束
受约束的随机测试
使用不同的种子多次运行
功能覆盖率
识别覆盖盲区
最少的代码修改
定向测试案例

4. 可能随机化的对象:

  1. 设备配置;
  2. 环境配置;
  3. 输入数据;
  4. 协议异常;
  5. 错误和违例;
  6. 时延;

4.1. 设备和环境配置

  • 在实际的应用环境中,随着待测设计使用时间的增加,其配置环境会变得越来越随机;
  • 可以对仿真的时长,设备的数量,以及端口的配置等等,加以约束进行随机;

4.2 协议异常、错误和违例

  • 可以使用一些不当的激励来测试,并在有可能出错的地方加入检验代码,最好能够停下来
  • 恰当的使用断言;

4.3 时延和同步

  • 尝试不同驱动器以不同的速度通信;

4.4 并行的随机测试

  • 可以尝试将处理器名称、处理器核的编号以及不同运行目录的名称加入到种子里进行随机;

5. 功能覆盖率

  • 加入代码确定哪些功能是被测试过的,且测试结果如何。
  • 覆盖率驱动的验证:
    在随机测试中,随着功能覆盖率逐渐接近极限,测试需要改变,以期望找到新的方法去测试尚未被覆盖的区域。
  • 对于覆盖率的约束调整,可以写入反馈循环(这需要对设计有深入的了解,以及高超的验证技术);

6. 测试平台的构成

testbench
输入
输出
待测设计
测试平台
  • 在仿真时,测试平台会把整个待测设计包裹起来;
  • 测试平台的分层:
    在这里插入图片描述
  • 信号层:待测设计(DUT)与待测设计与测试平台的连接(interface)
  • 命令层
    驱动器:执行总线的读写命令驱动待测设计的输入;
    断言:监视独立信号的变化;
    监视器:监视所有信号的变化,并分组;
  • 功能层
    代理器:接收事务信息,处理成相应的命令;
    计分板:预测代理器接收的事务结果;
    检验器:比较来自监视器和计分板的命令;
  • 场景层
    发生器:产生各种应用场景所需要的的数据驱动功能层;
  • 测试层
    指挥官的地位,引领着整个测试平台进行合适的测试,包含创建激励的约束;由于经常改变,所以不足为测试环境。
  • 功能覆盖率
    衡量测试进展,由于需要经常改变,所以不作为测试环境。
  • 测试平台不必需要所有的层次,但测试层是必须的。

7. 对测试环境的仿真

  • 建立(build)、运行(run)、收尾(wrap-up)
  • 建立
    1. 生成配置:把待测设计的配置和周围环境随机化;
    2. 建立环境:基于配置来分配和连接测试平台构件;
    3. 对待测设计进行复位;
    4. 配置待测设计;
  • 运行
    1. 启动环境:运行测试平台构件;
    2. 运行测试:启动测试平台,等待结果;
  • 收尾
    1. 清空:等待待测设计清空最后的事务;
    2. 报告:根据测试平台的数据反馈编写补充验证报告,对下一步进行安排。

8. 一个随机测试的创建

建立分层的测试平台
按照验证计划中列举的目标创建激励
功能覆盖率
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值