0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

PCB线路板打样 来源:LONG 2019-08-09 15:25 次阅读

当我们验证片上系统(SoC)嵌入了具有多个数字外设的微处理器以及可能的模拟模块时,我们希望检查所有实现的功能和可能的极端情况,以最大限度地缩短验证时间。多种技术和方法的混合用于改进功能验证并提取覆盖等级的度量:基于通用验证方法(UVM)的形式验证和随机约束测试增加了发现错误的可能性。有时我们为RTL验证创建一个完美有效的测试,但发现它不能在门级仿真期间重复使用,因为UVM监视器挂在内部SoC信号上,这些信号在实现阶段后可能会消失或改变。

本文将描述创建有效的自检模型是多么容易,这些测试既简单又可以在门级模拟过程中重复使用。令人惊讶的是,通过改变数据流,我们可以为测试平台带来好处,降低记分板的复杂性,这也意味着更少的测试开发时间。

流程基于实例化UVM验证用于检查接口的组件,例如SPI,I 2 C,& UART,但它也可以扩展到更复杂的接口。

SoC验证流程

最有效的SoC验证是基于内部总线内部,特定内部模块和主SoC接口上的多个UVM验证组件(UVM VC)的实例化。这些UVM VC用作总线协议检查器(例如,AMBA检查器);串行协议检查器和主动主控器(例如,I 2 C,SPI,UART,JTAG,SATA,PCIe)。

基于UVM开发的测试应该是自检的;必须通过检查器验证每个操作,激励和事务,如果不匹配,会引发一个“标志”,停止模拟并发出模拟器控制台上显示的错误消息并写入日志文件。

通信接口(例如,SPI)的验证需要使用由在总线上获取事务的收集器形成的UVM VC,用于检查协议合规性的监视器以及生成的生成的总线功能模型(BFM)交易。 SoC和外部UVM VC之间交换的数据通过名为记分板的模块进行验证。

此记分板至少有两个端口,其中添加的对象与第二个相匹配 - 参考。如果不匹配,则发出错误。在门级仿真期间必须重复使用这种检查器以刺激关键路径。图1显示了验证测试平台的简单框图,该平台使用多个检查器进行有效的验证方法。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图1:典型的UVM验证测试平台

黄色块是UVM VC。总线监视器是一个只有监视器和检查器的无源组件。

用于测试串行外设的通用数据流是将数据从UVM VC发送到微处理器并检查数据是否有到达目的地(微处理器)。在第二步中,我们将数据从微处理器发送到UVM VC,检查正确的数据是否已到达目的地(UVM VC)。

图2显示了数据记分板<的示例/i>用于全双工同步通信(例如,SPI)。 UVM VC和外围总线上的监视器(被动)用于将数据发送到记分板:UVM VC发送的数据被添加到记分板 TX路径,当它们到达外围设备时,将通过总线监视器发送到相同的记分板进行匹配。来自外围设备的数据被添加到记分板 RX路径中,并与UVM VC被动监视器接收的数据相匹配。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图2:全双工同步外设示例

此方法的主要缺点是门级仿真的可移植性。在实施阶段,RTL中可用的内部信号可能会在优化的网表中消失,UVM VC模块的绑定变得困难,有时甚至不可能(例如,在合成期间删除未使用的端口)。

新的SoC验证流程

新流程的基本概念是记分板中检查的数据不应来自内部SoC节点上绑定的监视器(参见图2)。因此,修改了测试平台配置,以便仅使用UVM VC(主动和被动)进行顶层绑定的数据检查。内部监视器(绑定在SoC内部节点上的监视器)仅用于RTL仿真,检查总线的合规性并跟踪覆盖范围。

此时,有必要更改数据在UVM VC和SoC外设之间交换数据包的流程。主要要求是:

数据随机化

门级模拟的可移植性

易用性

由UVM VC生成并由外围设备接收的随机约束数据分组被SoC用于生成出站分组。为了增加随机化,SoC中的微处理器计算接收数据的CRC并将结果用作要传输的数据。

记分板将从UVM获取数据VC,在将它们添加到数据列表之前,它将计算CRC。从外围设备返回的数据将直接添加到记分板以进行匹配过程。图3显示了这个新流程的一个示例。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图3:数据检查的新方法

计算CRC非常简单;对于记分板,可以使用内置函数(伪方法),例如,可以使用 e 语言:

list_bytes 。crc_32(来自字节,字节数)

list_bytes 。crc_8(来自字节,字节数)

它逐字节读取列表返回位或字节列表的CRC函数的整数值。可以计算CRC,定义起始字节(通过第一个参数 from byte )和选定的字节数(通过第二个参数字节数)。

32位CRC的生成多项式为:

x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x +1

8位CRC的生成多项式为:

x 8 + x 2 + x + 1

类似的函数用于SoC中微处理器执行的 C 代码:


POLY_GEN8为0x03。可以使用POLY_GEN32 = 0x2608EDB为CRC32扩展该功能。

使用此方法可以极大地简化记分板上的数据管理;由于数据检查是在串行接口上进行的,因此它与微处理器总线的数据大小无关,可以是8,16,32位或更多。以下是记分板的示例。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍



全双工同步接口

如果是全双工同步接口,例如SPI,我们可以有两种可能的模式:外设是从机,或外设是主机。

当外设是从机时,事务由外部UVM VC启动。全双工模式意味着必须同时发送和接收数据。由于我们希望避免在SoC侧生成数据(在 C 代码上没有有线数据),因此有效数据存在系统延迟。此延迟应在记分板上实现,以便正确比较交换的数据。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图4:全双工数据序列用于从模式

图4显示了在主(UVM VC)和从(外设)之间交换的数据序列的示例。由外围设备发送的第一个符号对于记分板“不关心”,因此被释放。微处理器需要一些时间从缓冲区获取数据并计算CRC。一段时间后,数据准备就绪,交换继续从UVM VC随机生成和来自外围侧的伪随机数据(在D x 上计算的CRC)。

我们可以通过使用传统的“不关心”数据(例如,零)来进行自动符号同步。当然,这些数据不应由UVM VC生成。 SoC上的外设将发送零直到CRC数据准备就绪,并且UVM VC以足够的零符号终止以完成记分板中的匹配。

当外围设备是主设备时,事务通过微处理器自行启动。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图5:主模式的全双工数据序列

数据流与奴隶模式的情况非常相似。图5显示了在主(外设)和从(UVM VC)之间交换的数据序列的示例。外围设备发送的第一个符号对于记分板“不关心”。 UVM VC用随机符号D x 回复,微处理器用它来计算外围设备发送的伪随机数据。如上所述,黄色突出显示的符号是在记分板中比较的符号。

半双工接口

如果是半双工接口,例如I 2 C,我们可以有两种可能的模式:外设是从机,或外设是主机。

外设是slave,事务由外部UVM VC启动。半双工模式基于通信协议,其中主设备发送命令请求数据作为回复或将数据发送到专用从设备。

对于全双工模式,有必要定义良好的流程这样可以避免 C 代码中的数据(非随机)并使数据检查变得简单:

通过发送write命令启动事务。 UVM VC将开始发送数据包。在计算CRC之后,这些数据被添加到记分板中。

接收的数据被DUT用作“回复读取”命令。微处理器计算接收数据的CRC并准备数据包以进行回复。

UVM VC发送读命令。外围设备开始发送先前准备的数据。这些数据将添加到记分板中以进行匹配。

图6显示了此数据握手的简单图表。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图6:从模式的半双工数据交换

主模式

当外围设备是主设备时,事务通过微处理器自行启动。

在这种情况下,为了利用UVM VC的随机约束特性,协议必须

通过发送读命令启动事务。 UVM VC将开始作为回复发送数据包。在计算CRC之后,这些数据被添加到记分板中。

接收的数据被DUT用作“写入数据”命令。微处理器计算接收数据的CRC并为下一步准备数据包。

外设发送写命令,然后开始发送先前准备的数据。这些数据将添加到记分板中以进行匹配。

图7显示了此数据握手的简单图表。

重复使用UVM RTL验证测试进行门级仿真详细过程介绍

图7:主模式的半双工数据交换

复杂协议

相同的方法可以也可用于USB以太网等复杂协议。概念是相同的:对于全双工通信,初始符号是“不关心”(空符号),然后DUT使用接收的样本来计算CRC并将数据发回。

对于半双工,数据交换由UVM VC启动,然后DUT使用接收的数据包构建传输数据包。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132148
  • PCB打样
    +关注

    关注

    17

    文章

    2965

    浏览量

    21383
  • 华强PCB
    +关注

    关注

    8

    文章

    1831

    浏览量

    27459
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42574
收藏 人收藏

    评论

    相关推荐

    RTL仿真与门仿真

    调用了modelsim进行仿真,发现有毛刺,后来才知道有RTL仿真,运行后波形很好。想问下如
    发表于 08-08 22:57

    RTL的功能仿真结果和系统建模仿真的结果比较

    我是做数字滤波器的,别人从系统进行建模、仿真来完成设计,我从RTL开始对其设计进行
    发表于 12-08 14:46

    关于RTL仿真仿真求助~

    `刚刚本科毕业,假期导师要求做一个设计。实验室没有做过FPGA的学长只好问网上的各位了。写好的FPGA代码进行RTL仿真波形是符合要求的,如下图。但是做
    发表于 08-06 12:12

    IC验证"为什么要学习UVM呢"

    的产品在验证过程中能最大程度使用前一代产品的代码。同样的一件事情有多种实现方式,这多种方式之间分别都有哪些优点和缺点,在权衡利弊之下哪种是最合理的。一些OVM用法的遗留问题。可以说,UVM特别适合欲
    发表于 12-01 15:09

    IC验证UVM验证平台加入objection机制和virtual interface机制“(七)

    机制来控制验证平台的关闭。细心的读者可能发现,在上节的例子中,并没有如**《IC验证"一个简单的UVM验证平台"是如何搭建的(五)》**所示显式地调用 finish语句来结束
    发表于 12-09 18:28

    基于C的测试验证套件集成到常规UVM测试平台的方法

    Systemverilog [1]和 UVM [2]为验证团队提供结构和规则。它使得在许多测试中能获得一致的结果,并可以在团队之间共享验证。许多验证
    发表于 12-15 07:38

    数字IC验证之“UVM”基本概述、芯片验证验证计划(1)连载中...

    ,这决定了芯片的用途以及芯片的功能,然后从市场需求到高层算法,算法的目的是建立芯片的功能模型,然后从高层算法到芯片的架构,从芯片的架构到具体rtl代码的实现,对rtl代码进行综合就得到了
    发表于 01-21 15:59

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载中...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容有介绍什么是uv
    发表于 01-21 16:00

    数字IC验证之“典型的UVM平台结构”(3)连载中...

    应用的过程中,将uvm的组件封装起来,可以将这些封装的组件呢作为一个整体进行重用,在进行芯片或者是系统
    发表于 01-22 15:32

    数字IC验证之“构成uvm测试平台的主要组件”(4)连载中...

      大家好,我是一哥,上章一个典型的uvm验证平台应该是什么样子的?从本章开始就正式进入uvm知识的学习。先一步一步搭建一个简单的可运行的测试平台。  本章首先来
    发表于 01-22 15:33

    数字IC验证之“搭建一个可以运行的uvm测试平台”(5)连载中...

      大家好,我是一哥,上章介绍了构成uvm测试平台的主要组件?最后,我们将一个典型的uvm平台进行最简化,从本章我们开始搭建一个可以运行的
    发表于 01-26 10:05

    什么是uvmuvm的特点有哪些呢

    大家好,我是一哥,上章内容我们介绍什么是uvmuvm的特点以及uvm为用户提供了哪些资源?本章内容我们来看一看一个典型的uvm
    发表于 02-14 06:46

    如何构建UVM寄存器模型并将寄存器模型集成到验证环境中

    ),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文要介绍的内容,包括对UVM寄存器模型的概述,如何构建寄存器模型,以及如何将寄存器模型集成到验证环境中。篇幅原因,将在下一篇文章再给出寄存器
    发表于 09-23 14:29

    Python硬件验证——摘要

    & IP Core Verification)”卷。 本章介绍了 IC 和 IP 核设计过程验证中涉及的一些关键 Python 方法、工具、包和库,包括以下章节: 纯 Python
    发表于 11-03 13:07

    测试验证复杂的FPGA设计(2)——如何在虹科的IP核中执行面向全局的仿真

    仿真验证是开发任何高质量的基于FPGA的RTL编码过程的基础。在上一篇文章中,我们介绍了面向实体/块的
    的头像 发表于 06-15 17:31 425次阅读
    <b class='flag-5'>测试</b>与<b class='flag-5'>验证</b>复杂的FPGA设计(2)——如何在虹科的IP核中执行面向全局的<b class='flag-5'>仿真</b>