UVM
文章平均质量分 71
小ICer要努力
好好学习,天天向上。争做技能满满的ICer。
展开
-
30 UVM Adder Testbench Example
注:加法器可以很容易地用组合逻辑开发。引入时钟和重置,使其具有测试台代码中时钟和重置的味道。加法器设计在时钟的正边缘产生两个变量的合成加法。复位信号用于清除out信号。原创 2024-01-01 22:30:38 · 552 阅读 · 0 评论 -
29 UVM Command Line Processor (CLP)
随着设计和验证环境的复杂性增加,编译时间也增加了,这也影响了验证时间。因此,需要对其进行优化,以便在不强制重新编译的情况下考虑新的配置或参数。我们已经看到了function or task如何基于传递参数进行行为。类似地,UVM提供了一个接口来提供命令行参数,从而提供了灵活性,在“uvm_cmdline_processor”类的帮助下可以避免重新编译testbench。它允许使用不同的配置运行测试。原创 2024-01-01 22:27:06 · 552 阅读 · 0 评论 -
28 Singleton Object in UVM
单例对象/singleton object只是类的单个对象。即使用户尝试创建多个新对象,也会返回相同的对象。允许创建单个对象的类称为singleton类。在UVM中,uvm_root类只有一个实例。因此,它被称为单例类/singleton object。原创 2024-01-01 22:15:49 · 577 阅读 · 0 评论 -
27 UVM queue
uvm_queue类构建一个动态队列,该队列将按需分配并通过引用传递。原创 2024-01-01 22:07:40 · 843 阅读 · 0 评论 -
23 UVM Event
even机制提供进程之间的同步。与System Verilo event相比,UVM event提供了额外的灵活性,如保持事件等待器/event waiters的数量和设置回调。原创 2023-12-31 11:29:41 · 1055 阅读 · 0 评论 -
22 UVM Callbacks
回调用于改变组件或对象的行为而不修改其代码。请参阅以更好地理解。。原创 2023-12-29 16:57:48 · 556 阅读 · 0 评论 -
21 UVM printer
uvm_printer 类提供了以不同格式打印 uvm_objects 的灵活性。我们已经讨论了使用宏的 print() 方法,或者如果不使用 utils_begin/ end 宏,则编写 do_print() 方法。UVM printer提供四种内置printer。原创 2023-12-29 16:44:33 · 644 阅读 · 0 评论 -
20 UVM comparer
在uvm_object中,我们讨论了print、clone、copy、compare方法等。compare()方法比较两个对象,如果比较成功则返回1。uvm_comparer 添加比较策略并计算错误比较的数量(如果有)。原创 2023-12-29 16:36:11 · 688 阅读 · 0 评论 -
19 UVM Subscriber
uvm_subscriber 类提供与analysis port连接的analysis export。顾名思义,它订阅广播器,即analysis port来接收broadcasted transactions。原创 2023-12-29 16:30:29 · 700 阅读 · 0 评论 -
18 UVM Scoreboard
UVM scoreboard是一个检查DUT功能的组件。它用analysis export从monitor接受transaction事务以进行检查。用户定义的scoreboard是从 uvm_scoreboard 扩展而来的,而 uvm_scoreboard 又派生自 uvm_component。原创 2023-12-29 16:17:18 · 1316 阅读 · 0 评论 -
17 UVM Agent
agent是保存并连接driver,monitor和sequencer实例的容器。agent基于协议或接口要求开发结构化层次结构。原创 2023-12-29 14:31:33 · 586 阅读 · 0 评论 -
16 UVM Monitor
UVM monitor是一个passive component,通过virtual interface来捕获DUT的信号,并将他们转化为sequence item格式。sequence item或者transactions被广播给其他component组件,如UVM scoreboard,coverage collector等。monitor使用TLM analysis port来广播transactions事务。原创 2023-12-29 11:11:49 · 596 阅读 · 0 评论 -
15 Sequence-Driver-Sequencer communication in UVM
我们分别讨论了sequece_item、sequence、sequencer和driver。在本节中,我们将讨论他们如何相互talk,sequencer如何给driver提供从sequence里的sequence item。在开始阅读本节之前,请确保您了解sequencer和driver中使用的所有方法。(参考:UVM seqeuencer和UVM driver ).原创 2023-12-28 22:23:00 · 1004 阅读 · 0 评论 -
14.3 Lock and Grab Methods in UVM sequencer
UVM sequencer通过使用锁定机制向driver提供对序列的独占访问权限(exclusive access)。此锁定机制是使用lock和grab方法实现的。例如:在控制器或微处理器中,internal core中断服务处理以及其他操作。有时,如果设备引发特定中断,需要立即关注并停止正在进行的进程执行。一旦core为这个高优先级中断提供服务,就可以恢复之前的进程。原创 2023-12-28 21:54:23 · 1036 阅读 · 0 评论 -
14 Arbitration in sequencer(仲裁)
uvm_sequencer 有一个内置机制,可以在sequencer上同时运行的sequence中进行仲裁。基于仲裁算法,sequencer将得到仲裁权的sequence的sequence_item发送到driver。每个sequence发送的sequence_items也有自己的id来区别于其他sequence。要设置特定的仲裁机制,请使用 set_ arbitration 函数,该函数在 uvm_sequencer_base 类中定义。原创 2023-12-28 17:40:47 · 961 阅读 · 0 评论 -
14.1 virtual sequence and virtual sequencer
virtual sequence只是一个容器,它在不同的sequencer上启动多个sequence。virtual sequencer控制其他sequencer,它不连接到任何driver。原创 2023-12-27 23:32:00 · 1103 阅读 · 0 评论 -
14 UVM sequencer
sequencer是在sequence和driver之间建立连接的中介。最终,它将transactions或sequence items传递给driver,以便将其驱动到DUT。原创 2023-12-27 23:10:50 · 358 阅读 · 0 评论 -
13.3 Start a sequence
通过调用start方法启动sequence,该方法接受指向sequencer的指针,sequence_item通过该sequencer发送给driveer。sequencer的指针也通常称为m_sequencer。start方法为m_sequencer分配一个sequencer指针,然后调用body()任务。完成与driver交互的主体任务后,start()方法返回。由于它需要与driver交互,因此start()是一种阻塞方法。原创 2023-12-27 22:49:39 · 377 阅读 · 0 评论 -
13.2 uvm_sequence_base Methods
可以使用uvm_sequence_base类中的预定义方法调用将随机序列项驱动到driver。有两种方法使用一组uvm_sequence_base方法,sequence可以通过这些方法发送sequence items并从driver检索响应(如果适用)。原创 2023-12-27 22:37:33 · 421 阅读 · 0 评论 -
13.1 UVM sequence macros
根据需要,在编写sequence时可以使用几个宏。原创 2023-12-27 17:20:17 · 364 阅读 · 0 评论 -
13 UVM sequence
UVM sequence是一个容器,用于保存通过sequencer发送到driver的data items (uvm_sequence_items)。原创 2023-12-27 17:04:11 · 430 阅读 · 0 评论 -
12 UVM Driver
driver与 DUT 交互。它使用接口/interface将随机事务(randomized transactions)或sequence item驱动到 pin-level的DUT。driver必须从uvm_driver扩展。从sequencer中检索/retrieve事务或序列项,driver使用接口句柄将它们驱动到设计。可以从已在顶级层/top-level次结构中设置的配置数据库中检索。原创 2023-12-27 16:52:53 · 1020 阅读 · 0 评论 -
11 sequence items in UVM
所有用户定义的sequence items都是从类扩展的,因为它利用生成激励并具有sequence-sequencer机制的控制功能。原创 2023-12-27 16:15:31 · 378 阅读 · 0 评论 -
10. UVM Environment
环境为agents, scoreboards和其他验证组件(包括有助于在 SoC 级别重用块级环境组件的其他环境类)提供良好的层次结构和容器。用户定义的 env 类必须从 uvm_env 类扩展。原创 2023-12-27 16:10:07 · 387 阅读 · 0 评论 -
9. UVM Test
test位于启动环境组件构建的层次顶部(top of the hierarchical)。它还负责测试平台配置和激励生成过程。根据验证计划中提到的设计特征和功能,编写测试。用户定义的测试类源自。原创 2023-12-27 15:55:15 · 957 阅读 · 0 评论 -
8 UVM testbench Top
testbench top是一个具有DUT和接口实例的静态容器(static container)。接口实例在TB top和DUT信号相连。生成时钟,并将初始重置适用于DUT。它/clock也被传递给接口句柄。接口使用set方法存储在uvm_config_db中,可以使用get方法沿层次结构向下检索。UVM testbench top还用于通过调用run_test()来触发测试。原创 2023-12-26 23:54:31 · 463 阅读 · 0 评论 -
7.3 Passing interface handle down the hierarchy in UVM
axi_inf接口句柄存储或设置在配置数据库中,在env类中field_name是axi_interface。在低层次driver类中,使用相同的field_name检索或获取。原创 2023-12-26 23:45:33 · 415 阅读 · 0 评论 -
7.2 uvm_resource_db in UVM
uvm_resource_db是一个类型参数化 type-parameterized的类,它是资源数据库顶部的一个方便层(convenience layer)。这个便利层简化了对低级数据库的访问,并且没有添加新功能。因此,uvm_resource_db不是从uvm_resource类派生的。例如:uvm_resource_db #(整数)::设置(…);3. 如果作为命令行参数提供,它会打印所有资源数据库的访问(写入和读取)。原创 2023-12-26 23:05:28 · 999 阅读 · 0 评论 -
7. Resource database in UVM(UVM的资源数据库)
UVM集中资源数据库用于可配置(configurable)对象/object、变量/variables、虚拟接口/virtual interfaces、队列/queues、类句柄/class handles等,并从数据库中检索它们。这种可配置的测试平台为验证工程师提供了一定程度的自由度,以在测试平台的各个部分中使用所提供的信息。原创 2023-12-26 19:06:26 · 937 阅读 · 0 评论 -
SystemVerilog Callback理解
的,比如CC总不能给主函数注册一个“由民警配送到我家”的回调函数吧。原创 2023-11-29 19:03:39 · 1052 阅读 · 1 评论 -
SystemVerilog中的callback(回调)
我们可以将数据成员传递给任何函数。现在考虑一种情况,将一个函数(例如func1)作为数据成员传递给另一个函数(例如func2),并且得到所谓的callback。之所以称为callback,是因为函数func2现在可以在其代码函数func1中的任何地方调用。callback是SystemVerilog学习者的主要困惑点之一。许多人在许多论坛上都提出了相同的问题,但答案似乎并不能尽如人意。一直对callback不是很理解,看了很多资料,发现下面这篇写的很具体并容易理解。转载过来分享给大家。转载 2023-11-29 17:08:26 · 342 阅读 · 1 评论 -
【UVM】 -- 对寄存器建模的方法RAL(Register Abstraction Layer,寄存器抽象层)
的时候,寄存器会根据寄存器名称产生uvm_reg_item的事务对象,产生的名字会根据寄存器名称reg_name自动生成,接着将对象类型转换为uvm_reg_bus_op类型对象,并将该对象传入转换器中,然后转换为sequencer可以接收的事务类型(用户自定义类型),sequencer将数据发给driver,进而操作DUT,操作的结果会在寄存器模型中体现,如读出的值会返回给寄存器模型,这里的整个过程由寄存器模型实现,需要消耗仿真时间。scoreboard就可以通过寄存器模型来访问DUT中的寄存器。转载 2023-11-29 15:35:22 · 357 阅读 · 1 评论 -
UVM糖果爱好者教程 -- 36.寄存器回调函数(Register Callbacks)
看了XtremeDV对cluelogic.com的“UVM Tutorial for Candy Lovers”系列的翻译,翻译的很棒。看原文还有两节没有翻译,自己尝试翻译一下,有不合适地方,敬请谅解并帮忙指出,进行修改。原创 2023-11-28 16:59:01 · 1154 阅读 · 1 评论 -
【SystemVerilog】SV面向对象编程入门
面向对象编程原本属于C++/Java的语法,SystemVerilog有类的概念,也属于面向对象变长语言,为此它具有面向对象编程语言的语法特征,如类的封装、对象的生成和使用、类的继承和扩展、虚方法和多态。(自己用了SV和UVM很久了,可是一直对面向对象理解不是很透彻,闲下来又重新研读了些资料,记录一些心得一边后续查阅。) 对象就是封装数据和对数据操作(方法)的编程结构。它包括了数据成员和方法(Method),方法也就是一个任务或者函数,对对象内的数据进行操作。 过程编程语言就如 V原创 2023-11-08 18:40:04 · 308 阅读 · 1 评论 -
【UVM】virtual sequence & virtual sequencer
virtual seq & virtual sqr原创 2023-10-25 10:42:56 · 264 阅读 · 2 评论 -
【UVM】UVM中打印信息的控制
起作用:env.i_agt.drv.set_report_severity_id_override(UVM_WARNING, “my_driver”, UVM_ERROR);UVM默认有四种信息严重性:UVM_INFO、UVM_WARNING、UVM_ERROR、UVM_FATAL。严重性重载用的较少,一般只会对某个component内使用,不会。重载严重性可以只针对某个component内的。原创 2023-02-06 10:45:20 · 1328 阅读 · 0 评论 -
【UVM】UVM_MAX_QUIT_COUNT
对于某个测试用例,如果出现了大量的UVM_ERROR,根据这些错误已经可以确定bug所在了,再继续仿真下去意义已经不大,此时就可以结束仿真,而不必等到所有的objection被撤销。与set_max_quit_count相对应的是get_max_quit_count,可以用于查询当前的退出阈值。如果测试用例与base_test中同时设置了,则以测试用例中的设置为准。其中第一个参数6表示退出阈值,而第二个参数NO表示此值是不可以被后面的设置语句重载,其值还可以是YES。上述代码把退出阈值设置为5。原创 2023-02-03 11:28:57 · 1482 阅读 · 1 评论