uvm 形式验证_重复使用UVM RTL验证测试进行门级仿真详细过程介绍
当我们验证片上系统(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验证测试进行门级仿真详细过程介绍相关推荐
- 客户端表单验证_客户端的表单验证
客户端表单验证 在客户端进行表单验证是必不可少的-它可以节省时间和带宽,并为您提供更多选择,以指出用户填写表单时出错的地方. 话虽如此,我并不是说您不需要服务器端验证. 访问您网站的用户可能使用旧的浏 ...
- java spring 登录验证_浅析Spring Security登录验证流程源码
一.登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链.当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了. SpringS ...
- uvm 形式验证_这究竟属于下一代验证的方法、语言还是工具?||路科验证
来源:内容由 公众号 路科验证 (ID:Rocker-IC)编辑部 原创,谢谢! 首先声明,便携式激励标准(PortableStimulus Standard, PSS)不是一种方法论,而是一种语言. ...
- python 数据逐个验证_案例实战 | Python 实现 AB 测试中常见的分层抽样与假设检验 (附代码和数据集)...
在这里插入图片描述 作者 l 萝卜 本文会将原理知识穿插于代码段中,相关代码和数据集可在公众号 " 数据分析与商业实践 " 后台回复 " AB测试 " 获取. ...
- python 指定证书验证_如何在python中验证SSL证书?
我需要验证我的自定义CA签署了证书.使用OpenSSL命令行实用程序很容易做到: # Custom CA file: ca-cert.pem # Cert signed by above CA: bo ...
- python 代理服务器 身份验证_使用httplib2处理身份验证和代理服务器
我试图测试与Nexus服务器的交互,该服务器需要对我打算使用的操作进行身份验证,但我还需要处理一个内部代理服务器.在 基于我(有限)的理解,我可以向开场白添加多个处理程序.但是我还是收到401的回复. ...
- 项目数据验证_如何快速发货和验证新项目
项目数据验证 This article was sponsored by MOJO Marketplace. Thank you for supporting the partners who mak ...
- centos7进系统死机_电脑小白想学重装系统要怎么做?详细过程分享,学会远离电脑店...
电脑由硬件与软件组成,二者相辅相成,任何一个出现不正常都会引起电脑出现问题,比如蓝屏.黑屏.不能连网.死机.卡顿等等,对于这些常见的故障现象,5%的可能性是硬件出现了问题,95%的可能性是系统出现了问 ...
- java水彩画效果滤镜_自带高饱和滤镜的水彩画(内附详细工具介绍)!
原标题:自带高饱和滤镜的水彩画(内附详细工具介绍)! 画友分享第102期:自带高饱和滤镜的水彩画(内附详细工具介绍)! --潘子君的水彩心得分享 画友简介 Hello,我是潘子君(微博:溜溜潘子君,微 ...
- RTL行为级仿真、综合后门级功能仿真和时序仿真
数字电路设计中一般有源代码输入.综合.实现等三个比较大的阶段,而电路仿真的切入点也基本与这些阶段相吻合,根据适用的设计阶段的不同仿真可以分为RTL行为级仿真.综合后门级功能仿真和时序仿真.这种仿真轮廓 ...
最新文章
- CoordinatorLayout 的jar包位置
- oracle索引与mysql区别_MySQL和Oracle中的唯一性索引从差别(r12笔记第83天)
- 对Dev的GridControl/GridView控件进行分组并展开操作
- 南阳18--The Triangle
- 通用的异步处理类和进度通知类及其示例
- 从源码深处体验Spring核心技术--基于注解的IOC初始化
- 太空java游戏_JavaSpaceWar 一个基于 语言编写的太空战争游戏,包含所有图像和声音资源,便 习理解使用 Game Program 238万源代码下载- www.pudn.com...
- Best Coder Lotus and Characters
- 牛客网练习赛26B(简单的dp)
- ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)
- RGB数据保存为BMP图片
- 功能强大且易用的云打印解决方案
- 将谷歌插件打包给别人使用
- 密码学0930大作业
- protues 软件介绍
- 提升研发效率的基本工作原则
- 大量打印怎么省钱,数量多怎么打印便宜
- JAVA 语言程序设计与数据结构 教材课本源码 和 课后习题答案
- 图片一放大就模糊怎么办?图片无损放大器来帮忙
- 使用微服务定制企业应用程序
热门文章
- Atitit. Derby的使用总结attilax
- [LeetCode]题解(python):016-3Sum Closest
- mysql cluster安装报错
- Python使用TCPServer编写(多线程)Socket服务
- Java RMI之介绍
- C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式
- linux下如何在线添加和移除scsi磁盘?
- 1、分组选择器, 2、尺寸 (Dimension)属性,3、Display(显示) 与 Visibility(可见性),4、CSS Display - 块和内联元素,5、CSS Position(定位
- 6. Git 开启匿名访问
- 16. Shell scripts