在UVM验证平台中,callback的最大用处就是提高验证平台的复用性。很多情况下,我们期望在一个项目中开发的验证平台能够用于另一个项目。但是,通常来说,完全复用是非常难实现的,两个不同的项目之间或多
UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。在run()阶段进行实际的测试仿真,并且在此phase中,每个组件都可以在开始时提出raise_objection和drop_objection。一旦所有组件都drop_objection,则run_phase完成,然后所有组件的check_phase执行,然后测试结束。
UVM(九)之sequencej机制续1 当一个sequence启动起来之后,UVM会自动执行sequence的body任务,所以要产生各种和杨的激励,就要写好body任务。 body这个任务完成的事
UVM RAL(UVM Register Abstraction Layer)是UVM所支持的功能,有助于使用抽象寄存器模型来验证设计中的寄存器以及DUT的配置。UVM寄存器模型提供了一种跟踪DUT寄存器内容的方法,以及一个用于访问DUT中寄存器和存储器的层次结构。寄存器模型反映了寄存器spec的结构,能够作为硬件和软件工程师的共同参考。RAL还具备其他功能,包括寄存器的前门和后门初始化以及内置的功能覆盖率支持。
Q哥在上一篇文章uvm_info高级技巧(1)中,跟大家聊了如何屏蔽那些刷屏的uvm_info信息。
本案例将学习运用LyScript计算特定程序中特定某些片段的Hash特征值,并通过xlsxwriter这个第三方模块将计算到的hash值存储成一个excel表格,本例中的知识点可以说已经具备了简单的表格输出能力,如果时间充裕完全可以实现自动化报告生成。
不得不说,随着时代的发展,游戏产业在近几年的互联网潮流中越来越扮演者重要的地位,与之而来的不仅有网络游戏公司的春天,还有游戏灰色产业的暗流涌动。在游戏产业的发展中,诞生了一大批所谓的“外x挂”开发人员,他们不断的利用游戏的漏洞,在违法牟利的同时,也促进了游戏安全行业的进步。
为确保消息数据的完整性,除了验证消息CRC之外,建议实现检查串行端口(UART)成帧错误的代码。如果接收消息中的CRC与接收设备计算的CRC不匹配,则应忽略该消息。下面的C语言代码片段显示了如何使用逐位移位和异或运算来计算Modbus消息CRC。使用消息帧中的每个字节计算CRC,除了包含CRC本身的最后两个字节。
代码风格,是一个与人相关、与机器无关的问题。 代码风格的好坏,不影响编译器的工作,但是影响团队协同,影响代码的复用、演进以及缺陷修复。
双击运行AheadLib.exe,如果选择了dll,但是AheadLib.exe报错就需要运行AheadLib_x64.exe来生成,最后生成修改后的dll也需要生成x64位的
硬件/软件接口(简称为"HSI")是一个术语,用来描述 SoC 外围设备的配置和功能,以及它们如何与CPU交互。
类(class):包含成员变量和成员方法;verilog对应模块(module);
我们在前面的Librdkafka的基础数据结构 3 -- Buffer相关 1介绍了Buffer和其组成segment,只读映射slice的相关定义和操作; 这一篇我们来介绍librdkafka中rd_buf_t的实际使用, 实际上是通过rd_kafka_buf_s的封装来实现的; 包括: struct rd_kafka_buf_s struct rd_kafka_bufq_t ---- struct rd_kafka_buf_s 所在文件: src/rdkafka_buf.h 这个结构涉及的操作很多,
可以优化博客路径,默认路径 https://xcmaster.com/2022/07/07/hexo必装插件,还会带上标题,这款插件可以将路径优化为 https://xcmaster.com/posts/51727 等等,还支持 16进制。
建议准备仿真软件,熟悉VCS的同学可以直接使用VCS,不熟悉的同学建议直接再win平台的Questa就行了。
为了遵循验证计划完成不同的验证任务,用户可能需要扩展原始的通用验证环境。验证过程是动态的,可重用验证环境的开发人员无法预见未来每一个corner case验证的项目需求。
在UVM testbench开始发送激励之前,必须构建其组件层次结构以及验证组件之间的连接关系。
UVM testbench 是使用SystemVerilog(动态)类对象与SystemVerilog(静态)接口和结构化层次结构中的模块交互构建的。层次结构由功能层组成,testbench 的中心是被测设计(DUT)。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
嗨,屏幕前的你还好吗?我是不二鱼,一个不喜欢写技术博客的IC验证工程师,写这个系列,是需要很大的勇气的,因为,写得人很多,但写得好的不多,我也是如此。我一个菜鸡,敢写UVM(应该也不止UVM,我尽量把其他知识杂糅进去),我是疯了吗?至今能有比张强老师写得好的估计也没有,我之所以写,是为了促进自己进步,换了一个新的环境,使用UVM也是日常必备,所以,以写促学,写一写我眼中的UVM,我希望将自己在工作当中遇到的困惑和思考,和大家分享。也希望能和大家一起学习,相互成就,如有错误,欢迎私信我批评指正。
UVM模型(五)之factory机制 factory其实就是一个宏,当设计set_override等操作时,才有必要去理解factory机制的原理。factory机制更多的是体现在内部编程应用
考虑构建一个用于验证SPI主机DUT的testbench作为模块级testbench的一个例子。在这种情况下,UVM环境有两个agent—APB agent在其APB从机端口上处理总线传输,以及SPI agent在其SPI端口上处理SPI协议传输。整个UVM验证环境的结构在框图中进行了说明。让我们穿过testbench的每一层,并描述它是如何从上到下组合在一起的。
testbench分析部分的第一个任务是监测DUT上的活动。和driver一样,monitor也是agent的组成部分。类似于driver组件,执行的也是实际信号活动和该活动的抽象表示之间的转换(接口上的信号变化翻译成环境中的transaction)。Monitor和Driver之间的关键区别是Monitor总是被动的,不驱动接口上的任何信号。当agent处于passive模式时,Monitor仍将执行。
在处理Sequences时,考虑到测试平台可能会需要对不同功能测试,可以对功能进行分层拆解。在与每个代理相关联的最低层是API Sequences。利用API Sequence来完成工作的中间层是worker Sequence。最后,在控制整个测试顶部是一个虚拟sequence,它协调不同目标测序器上的工作sequence的运行
virtual sequence是控制多个sequencer中激励生成的序列。由于sequence,sequencer和driver集中在单个接口上,因此几乎所有测试平台都需要virtual sequence来协调不同接口之间的激励和交互。virtual sequence在子系统或系统级别的测试台上也很有用,可以使单元级别的sequence以协调的方式运行。下图从概念上展示了这一点,其中virtual sequence具有三个sequencer的句柄,这些sequencer连接到driver,以连接到DUT的三个独立接口。然后,virtual sequence可以在每个接口上生成subsequence,并在相应的subsequencer上运行它们。
典型的基于UVM 的验证平台(Testbench)通常会实例化DUT和UVM Testcase,以及完成DUT和UVM Testcase之间的链接。其中Testcase中的内容可以根据“静态”和”动态”两方面进行分类。
UVM 是 Universal Verification Methodology 的缩写,即通用验证方法学。它起源于 OVM(Open Verification Methdology),是由 Cadence, Mentor 和 Synopsys 联合推出的新一代的验证方法学。
Virtual Sequence是一个使用多个sequencer控制激励产生。由于sequence、sequencer和driver都专注于接口,几乎所有的测试平台都需要一个Virtual Sequence来协调不同interface之间的激励以及它们之间的交互。
在UVM中,我们不应该一直使用new()构造新的components和transactions,而应该从某个查找表中申请创建新的components和transactions,这种创建方式称为factory机制。
UVM testbench对象不能直接连接到DUT信号来驱动或采样。driver和monitor组件对象与DUT之间的连接是通过一个或多个具有静态信号端口的BFM组件间接实现的。这些BFM组件以module或interface的形式实现,为了完成到UVM monitor或driver组件类的连接,我们使用虚接口句柄来引用静态接口的内容。
UVM中的configure机制用来将一些对象(objects)和数据(data)传递到验证平台中的各种组件。
你刚开始是怎么学UVM的?白皮书还是红皮书?而我是从hello world实验开始的。
uvm_config_db机制支持在不同的测试平台组件之间共享配置和参数。用名为uvm_config_db的配置数据库启用该功能。任何测试台组件都可以使用变量,参数,对象句柄等填充配置数据库。
Virtual Sequences是使用多个sequencer控制激励生成的sequence。由于sequence、sequencer和driver(proxy和 BFM)专注于interface,几乎所有测试平台都需要一个sequence来协调不同接口之间的激励以及它们之间的交互。Virtual Sequences通常是sequence层次结构的顶层。Virtual Sequences也可以称为master sequence或coordinator sequence。
最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一下笔记。
设计可重用testbench的关键原则之一是使其尽可能可配。这就意味着testbench及其组成部分可以很容易地重用和快速修改(即重新配置)。在testbench中,有任意数量的值通常可以写成文本值,如for循环次数、字符串名称、随机权重、其他约束表达式值和coverage bin值。这些值可以用SystemVerilog变量表示,可以在运行时设置(和更改),也可以用SystemVerilog参数表示,但必须在elaboration时设置。由于它们提供的灵活性,应始终在可能的情况下构建存放这些属性的配置对象并使用 uvm_config_db API 访问。
sequence和它们的目标driver之间的req和rsp item的传输是通过在sequencer中实现的双向 TLM 通信机制来实现的。uvm_driver 类包含一个 uvm_seq_item_pull_port,它和sequencer中的 uvm_seq_item_pull_export。port和export类是sequence_items 类型参数化的。一旦建立了port和export连接,driver代码就可以使用export中实现的 API 从sequence中获取请求 sequence_items 并将rsp返回给它们。
假设一种场景,在调试环境的时候,运行到15min的时候,环境出现bug,需要去debug。也许错误的第一现场并不是15min的时候,可能在14min30s-15min之间,那么如果正向执行就需要14min30s以上。所以这个时候如果能够直接反向运行到14min30s,就可以节省很多时间。就像jojo的奇妙冒险中吉良吉影的招式,败者食尘一样,逆转时间
有时,在激励生成过程中,更改sequence或sequence item的行为很有用。UVM 工厂提供了一种覆盖机制,能够在不更改任何测试平台代码且无需重新编译的情况下将一个对象替换为另一个对象。
uvm_sequence_base 类通过添加body方法扩展了 uvm_sequence_item 类。sequence用于通过执行其body来产生激励。sequence item被设计为一个瞬态动态对象,这意味着它可以在被取消引用后被创建、使用和垃圾回收。
为了使用uvm_object方法(复制、比较、打包、解包、记录、打印等),所有变量都注册到uvm_field_*宏。
Accellera的便携式测试和激励标准提供了强大的验证功能,这些功能并不能代替UVM,而是可以增加现有的验证流程。这就是便携式激励和UVM相互作用的方式。
UVM中,component的task phase是消耗仿真时间的,各个components的task phase之间需要完成同步。只有在所有components的相同task phase结束之后,才能进入下一个task phase。
本标准适用于污染物在线监控(监测)系统、污染物排放过程(工况)自动监控系统与监控中心之间的数据传输,规定了传输的过程及参数命令、交互命令、数据命令和控制命令的格式,给出了代码定义,本标准允许扩展,但扩展内容时不得与本标准中所使用或保留的控制命令相冲突。 本标准还规定了在线监控(监测)仪器仪表和数据采集传输仪之间的数据传输格式,同时给出了代码定义。
在UVM中,有几个和“name”有关的“小”函数, 如get_name(), get_full_name(), get_type_name() ,set_name ()。 长得这么像,分不太清楚啊?这都是怎么玩的?先收藏再说!
UVM sequence在事务层面提供了一种面向对象的激励生成方法,一方面让测试用例编写更加高效,另一方面提高了测试用例的可复用性。
由于在工作中需要用到UVM仿真,就将自己的学习过程记录下来,写成了一个UVM学习的系列文章,文章中的绝大多数内容都来自《UVM实战》这本书,也从找了一些网上的公开资料,并从零开始搭一个UVM的验证环境,里面包含了UVM中许多功能的用法,相信能更好的帮助刚入门的工程师们理解UVM的工作机制。
领取专属 10元无门槛券
手把手带您无忧上云