【路科V0】验证环境2——验证环境组件

本文详细介绍了验证环境中的核心组件——激励发生器、监测器和比较器。激励发生器模拟接口协议,生成丰富激励,监测器观察DUT信号,而比较器则通过参考模型预测并比较输出数据,确保设计功能正确。文中还提到了各组件的实现策略和建议。
摘要由CSDN通过智能技术生成

测试平台(testbench)结构图

典型验证结构框图

主要验证环境 组件

  • 激励发生器
  • 监测器
  • 比较器

激励发生器

Stimulator(激励发生器)是验证环境的重要部件。

在一些场合中,它也被称为

  • driver (驱动器)
  • BFM (bus function model,总线功能模型),
  • behavioral(行为模型)
  • generator (发生器)。

Stimulator的主要职责

        模拟与DUT相邻设计的接口协议,只需要关注于如何模拟接口信号,使其能够以真实的接口协议来发送激励给DUT。

        Stimulator不应该违反协议,但不拘束于真实的硬件行为,还可以给出更多丰富的只要协议允许的激励场景。

        比真实硬件行为更丰富的激励,会使得在模块级的验证更加充分,因为它不但可以验证硬件普通的接口时序,还模拟出更多复杂的、在更高系统级别无法产生出来的激励场景。

        Stimulator的接口主要是同DUT连接,此外,也有时钟和复位信号的输入,确保生成的数据同DUT的接口一侧是同步的关系。

        Stimulator还可以有其它的配置接口用来控制接口数据的生成。

        Stimulator也可以有存储接口数据生成历史的功能,这可以用来在仿真运行时或者结束后查看接口数据,方便统计或者调试。

激励组件结构框图

被测设计DUT:MCDT 

在构建验证环境时,会先将stimulator和 添加进来

channel generator负责生成激励数据,送往channel initiator

channel initiator在接收到激励数据以后,会将它们按照协议时序,驱动到接口上面

接口与设计MCDT相连,这时MCDT的端口接收到了激励数据,将其存入到缓存中。

​​​​​​​stimulator分类:

 从stimulator同DUT的连接关系来看,我们可以将其进一步分为两种:

  • initiator (发起器)用来对设计主动发送数据请求
  • responder(响应器) 作为从端,被动响应

实现initiator的要求

MCDT ​​​​​​​为例

1、满足时序协议 

        由于channel从端接口协议上有握手信号,我们需要遵照接口时序,确保chx_ready为低时,保证chx_data和chx_valid保持不变。

2、发送的数据之间是否考虑空闲周期,设定整体数据的传输速率

        相邻数据之间没有数据包的限制,所以相邻数据之间的关系较弱,但也应该考虑数据之间是否有空闲周期,以及整体数据的传输速率设定。

3、由于每一个数据从端都有对应的FIFO缓存数据,所以也需要考虑如何使得FIFO的状态可遍历

        例如,典型的FIFO状态可以分为empty、 full以及中间状态即有数据存储但未写满。

        要使得FIFO可以触发这些状态,我们就应该控制channel initiator的传输速率。

监测器

Monitor(监测器)的主要功能

        用来观察DUT的边界或者内部信号,并且经过打包整理传送给其它验证平台的组件,例如 checker(比较器)。

从监测信号的层次来划分monitor的功能:

  • 观察DUT边界信号
  • 观察DUT内部信号

观察DUT边界信号

  •   对于系统信号如时钟,可以监测其频率变化
  •   对于总线信号,可以监测总线的传输类型和数据内容,以及检查总线时序是否符合协议。

观察DUT内部信号

        从灰盒验证的手段来看,往往需要探视DUT内部信号,用来指导stimulator的激励发送,或者完成覆盖率收集,又或者完成内部功能的检查。

监测器组件结构框图

        分布式的monitor结构,monitor一般会对应一个stimulator 。

        对于MCDT 验证结构,我们需要3个channel monitor来监测对应的channel接口,以及1个arbiter monitor来监测arbiter接口。

监测器实现建议 

         如果没有特殊的需要,我们应采取灰盒验证的策略(而非白盒)

        观察的内部信号应当尽量少,且应当是表示状态的信号。(不建议采集中间变量信号的原因在于,这些信号的时序、逻辑甚至留存性都不稳定,这种不稳定对于验证环境的收敛是有害的。)

        可以通过接口信息计算的,就尽量少去监测内部信号(因为这种方式也有悖于假定设计有缺陷的验证思想)

我们观测到的内部信号在被环境采纳之前也有必要确认它们的逻辑正确性,使用方式

  • 动态检查
  • 断言触发

比较器

         无论是从实现难度,还是从维护人力上来讲,checker (比较器)都应当是最需要时间投入的验证组件了。

         我们将checker添加到验证环境中,需要它分析DUT的边界激励,理解数据的输入,并且按照硬件功能来预测输出的数据内容。

        这种预测(prediction)的过程,发生在reference model中,有时我们也将其称为predictor。

        reference model也会内置一些缓存,存放从DUT输入端观察到的数据,以及经过功能转换的数据,同时checker也有其它缓存来存放从输出端采集到的数据。

checker作用:

  • 模拟设计行为和功能检查的任务。
  • 缓存从各个monitor收集到的数据。

        checker缓存从各个monitor收集到的数据继而 将DUT输入接口侧的数据汇集给内置的reference model(参考模型)。

Reference model在这里扮演了模拟硬件功能的角色(需要较多精力维护的部分,因为验证者需要在熟悉硬件功能的情况下实现该模型,而又不应参考真实硬件的逻辑。)

         通过数据比较的方法,检查实际收集到的DUT输出端接口数据是否同reference model产生的期望数据一致。

        对于设计内部的关键功能模块,也有相对应的线程进行独立的检查

        在检查过程中,可以将检查成功的信息统一纳入到检查报告中,便于仿真后的追溯。如果检查失败,也可以采取暂停仿真同时报告错误信息的方式,进行在线调试。

数据比较方式

  • 线上比较(online check) 在仿真时收集数据和在线比较,并且实时报告。
  • 线下比较(offline check) 将仿真时收集到的数据记录在文件中,在仿真结束后,通过脚本或者其它手段,进行数据比较。

比较器组件结构框图

白色部分:待测设计MCDT

蓝色部分:验证环境部分

        channel generator和channel initiator之间保持通信,monitor和checker之间保持通信。

(线程间的通信)​​​​​​​

比较器实现建议

        对于复杂的系统验证,我们倾向于集中管理stimulator和checker,因为它们两者都需要主动给出激励或者判断结果,也需要较多的协调处理。

        而monitor则相对更独立,因为它只是作为监测方,将其兢兢业业观察到的数据一字不落地交给checker即可,至于checker怎么使用,monitor并不需要关心。

        因此,stimulator和monitor是一一对应,我们通常将它们进一步封装在agent单元组件中,而checker则最终集群搁置在中心化的位置。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口中的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值