当我们验证片上系统(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显示了验证测试平台的简单框图,该平台使用多个检查器进行有效的验证方法。

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

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

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

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

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

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

新的SoC验证流程

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

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

数据随机化

门级模拟的可移植性

易用性

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

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

图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位或更多。以下是记分板的示例。

全双工同步接口

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

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

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

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

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

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

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

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

半双工接口

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

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

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

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

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

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

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

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

主模式

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

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

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

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

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

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

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

复杂协议

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

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

uvm 形式验证_重复使用UVM RTL验证测试进行门级仿真详细过程介绍相关推荐

  1. 客户端表单验证_客户端的表单验证

    客户端表单验证 在客户端进行表单验证是必不可少的-它可以节省时间和带宽,并为您提供更多选择,以指出用户填写表单时出错的地方. 话虽如此,我并不是说您不需要服务器端验证. 访问您网站的用户可能使用旧的浏 ...

  2. java spring 登录验证_浅析Spring Security登录验证流程源码

    一.登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链.当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了. SpringS ...

  3. uvm 形式验证_这究竟属于下一代验证的方法、语言还是工具?||路科验证

    来源:内容由 公众号 路科验证 (ID:Rocker-IC)编辑部 原创,谢谢! 首先声明,便携式激励标准(PortableStimulus Standard, PSS)不是一种方法论,而是一种语言. ...

  4. python 数据逐个验证_案例实战 | Python 实现 AB 测试中常见的分层抽样与假设检验 (附代码和数据集)...

    在这里插入图片描述 作者 l 萝卜 本文会将原理知识穿插于代码段中,相关代码和数据集可在公众号 " 数据分析与商业实践 " 后台回复 " AB测试 " 获取. ...

  5. python 指定证书验证_如何在python中验证SSL证书?

    我需要验证我的自定义CA签署了证书.使用OpenSSL命令行实用程序很容易做到: # Custom CA file: ca-cert.pem # Cert signed by above CA: bo ...

  6. python 代理服务器 身份验证_使用httplib2处理身份验证和代理服务器

    我试图测试与Nexus服务器的交互,该服务器需要对我打算使用的操作进行身份验证,但我还需要处理一个内部代理服务器.在 基于我(有限)的理解,我可以向开场白添加多个处理程序.但是我还是收到401的回复. ...

  7. 项目数据验证_如何快速发货和验证新项目

    项目数据验证 This article was sponsored by MOJO Marketplace. Thank you for supporting the partners who mak ...

  8. centos7进系统死机_电脑小白想学重装系统要怎么做?详细过程分享,学会远离电脑店...

    电脑由硬件与软件组成,二者相辅相成,任何一个出现不正常都会引起电脑出现问题,比如蓝屏.黑屏.不能连网.死机.卡顿等等,对于这些常见的故障现象,5%的可能性是硬件出现了问题,95%的可能性是系统出现了问 ...

  9. java水彩画效果滤镜_自带高饱和滤镜的水彩画(内附详细工具介绍)!

    原标题:自带高饱和滤镜的水彩画(内附详细工具介绍)! 画友分享第102期:自带高饱和滤镜的水彩画(内附详细工具介绍)! --潘子君的水彩心得分享 画友简介 Hello,我是潘子君(微博:溜溜潘子君,微 ...

  10. RTL行为级仿真、综合后门级功能仿真和时序仿真

    数字电路设计中一般有源代码输入.综合.实现等三个比较大的阶段,而电路仿真的切入点也基本与这些阶段相吻合,根据适用的设计阶段的不同仿真可以分为RTL行为级仿真.综合后门级功能仿真和时序仿真.这种仿真轮廓 ...

最新文章

  1. CoordinatorLayout 的jar包位置
  2. oracle索引与mysql区别_MySQL和Oracle中的唯一性索引从差别(r12笔记第83天)
  3. 对Dev的GridControl/GridView控件进行分组并展开操作
  4. 南阳18--The Triangle
  5. 通用的异步处理类和进度通知类及其示例
  6. 从源码深处体验Spring核心技术--基于注解的IOC初始化
  7. 太空java游戏_JavaSpaceWar 一个基于 语言编写的太空战争游戏,包含所有图像和声音资源,便 习理解使用 Game Program 238万源代码下载- www.pudn.com...
  8. Best Coder Lotus and Characters
  9. 牛客网练习赛26B(简单的dp)
  10. ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)
  11. RGB数据保存为BMP图片
  12. 功能强大且易用的云打印解决方案
  13. 将谷歌插件打包给别人使用
  14. 密码学0930大作业
  15. protues 软件介绍
  16. 提升研发效率的基本工作原则
  17. 大量打印怎么省钱,数量多怎么打印便宜
  18. JAVA 语言程序设计与数据结构 教材课本源码 和 课后习题答案
  19. 图片一放大就模糊怎么办?图片无损放大器来帮忙
  20. 使用微服务定制企业应用程序

热门文章

  1. Atitit. Derby的使用总结attilax
  2. [LeetCode]题解(python):016-3Sum Closest
  3. mysql cluster安装报错
  4. Python使用TCPServer编写(多线程)Socket服务
  5. Java RMI之介绍
  6. C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式
  7. linux下如何在线添加和移除scsi磁盘?
  8. 1、分组选择器, 2、尺寸 (Dimension)属性,3、Display(显示) 与 Visibility(可见性),4、CSS Display - 块和内联元素,5、CSS Position(定位
  9. 6. Git 开启匿名访问
  10. 16. Shell scripts