- 博客(57)
- 收藏
- 关注
原创 CDNS PCIe VIP debug info
1. TLP payload的顺序是反向的,即大小端反的,比如下面的denalirc打印的信息看,pl是我们发TLP时的配置,Cfg才是真正的data顺序。而seq写的时候如下:可以看到payload[2]时第三个8bit payload,但是我们是想配置bit15,在实际寄存器里是第二个byte。
2024-03-26 14:25:43
403
原创 30 UVM Adder Testbench Example
注:加法器可以很容易地用组合逻辑开发。引入时钟和重置,使其具有测试台代码中时钟和重置的味道。加法器设计在时钟的正边缘产生两个变量的合成加法。复位信号用于清除out信号。
2024-01-01 22:30:38
618
原创 29 UVM Command Line Processor (CLP)
随着设计和验证环境的复杂性增加,编译时间也增加了,这也影响了验证时间。因此,需要对其进行优化,以便在不强制重新编译的情况下考虑新的配置或参数。我们已经看到了function or task如何基于传递参数进行行为。类似地,UVM提供了一个接口来提供命令行参数,从而提供了灵活性,在“uvm_cmdline_processor”类的帮助下可以避免重新编译testbench。它允许使用不同的配置运行测试。
2024-01-01 22:27:06
642
原创 28 Singleton Object in UVM
单例对象/singleton object只是类的单个对象。即使用户尝试创建多个新对象,也会返回相同的对象。允许创建单个对象的类称为singleton类。在UVM中,uvm_root类只有一个实例。因此,它被称为单例类/singleton object。
2024-01-01 22:15:49
673
原创 23 UVM Event
even机制提供进程之间的同步。与System Verilo event相比,UVM event提供了额外的灵活性,如保持事件等待器/event waiters的数量和设置回调。
2023-12-31 11:29:41
1120
原创 21 UVM printer
uvm_printer 类提供了以不同格式打印 uvm_objects 的灵活性。我们已经讨论了使用宏的 print() 方法,或者如果不使用 utils_begin/ end 宏,则编写 do_print() 方法。UVM printer提供四种内置printer。
2023-12-29 16:44:33
901
原创 20 UVM comparer
在uvm_object中,我们讨论了print、clone、copy、compare方法等。compare()方法比较两个对象,如果比较成功则返回1。uvm_comparer 添加比较策略并计算错误比较的数量(如果有)。
2023-12-29 16:36:11
834
原创 19 UVM Subscriber
uvm_subscriber 类提供与analysis port连接的analysis export。顾名思义,它订阅广播器,即analysis port来接收broadcasted transactions。
2023-12-29 16:30:29
939
原创 18 UVM Scoreboard
UVM scoreboard是一个检查DUT功能的组件。它用analysis export从monitor接受transaction事务以进行检查。用户定义的scoreboard是从 uvm_scoreboard 扩展而来的,而 uvm_scoreboard 又派生自 uvm_component。
2023-12-29 16:17:18
1481
原创 17 UVM Agent
agent是保存并连接driver,monitor和sequencer实例的容器。agent基于协议或接口要求开发结构化层次结构。
2023-12-29 14:31:33
688
原创 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
691
原创 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
1102
原创 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
1125
原创 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
1049
原创 【PCIe】CDNS PCIe VIP -- Callback使用举例
之前针对CDNS PCIe VIP Calback部分进行了学习,并写了上面的博客。学习就是为了应用,本文就将记录一些我实际用到的我觉得比较典型的例子。仅供学习参考。
2023-12-28 17:13:05
2293
原创 14.1 virtual sequence and virtual sequencer
virtual sequence只是一个容器,它在不同的sequencer上启动多个sequence。virtual sequencer控制其他sequencer,它不连接到任何driver。
2023-12-27 23:32:00
1217
原创 14 UVM sequencer
sequencer是在sequence和driver之间建立连接的中介。最终,它将transactions或sequence items传递给driver,以便将其驱动到DUT。
2023-12-27 23:10:50
403
原创 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
421
原创 13.2 uvm_sequence_base Methods
可以使用uvm_sequence_base类中的预定义方法调用将随机序列项驱动到driver。有两种方法使用一组uvm_sequence_base方法,sequence可以通过这些方法发送sequence items并从driver检索响应(如果适用)。
2023-12-27 22:37:33
486
原创 13 UVM sequence
UVM sequence是一个容器,用于保存通过sequencer发送到driver的data items (uvm_sequence_items)。
2023-12-27 17:04:11
477
原创 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
1096
原创 11 sequence items in UVM
所有用户定义的sequence items都是从类扩展的,因为它利用生成激励并具有sequence-sequencer机制的控制功能。
2023-12-27 16:15:31
402
原创 10. UVM Environment
环境为agents, scoreboards和其他验证组件(包括有助于在 SoC 级别重用块级环境组件的其他环境类)提供良好的层次结构和容器。用户定义的 env 类必须从 uvm_env 类扩展。
2023-12-27 16:10:07
433
原创 9. UVM Test
test位于启动环境组件构建的层次顶部(top of the hierarchical)。它还负责测试平台配置和激励生成过程。根据验证计划中提到的设计特征和功能,编写测试。用户定义的测试类源自。
2023-12-27 15:55:15
1037
原创 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
521
原创 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
458
原创 7.3 uvm_config_db in UVM
uvm_config_db类派生自uvm_resource_db类。它是uvm_resource_db顶部的另一层便利层,简化了用于uvm_component实例的基本接口(资源库的访问方法)。下面uvm_config_db类的代码段取自uvm源代码。
2023-12-26 23:33:48
1040
原创 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
1200
原创 7. Resource database in UVM(UVM的资源数据库)
UVM集中资源数据库用于可配置(configurable)对象/object、变量/variables、虚拟接口/virtual interfaces、队列/queues、类句柄/class handles等,并从数据库中检索它们。这种可配置的测试平台为验证工程师提供了一定程度的自由度,以在测试平台的各个部分中使用所提供的信息。
2023-12-26 19:06:26
987
原创 6 UVM Object
uvm_object类是所有uvm层次类的基类,如uvm_report_object、uvm_component、uvm_transaction、uvm_sequence_item、uvm_sequence等。它在定义一组方法(如create, copy, print, clone, compare, record等)方面起着重要作用。
2023-12-25 23:59:32
979
原创 【PCIe】CDNS PCIe VIP 杂记 -- Packet Classes
在写callback那篇文章之后,继续这篇,因为CDNS VIP知识点散且杂,我们实际应用其实也只是冰山一角,【实话实说,UG及相关文档也有点杂、无序,尤其对新手不友好】,所以我也很难将一个topic总结详细到位,后面看时间和遇到的问题类型,根据自己的实际情况和理解不定时不定期更新不同topic吧。这篇更新一下packet class类,类特别多,只写我自己频繁用到的和我的理解点。后面有新的理解也会不定时回头再更新。顾名思义,packet class就是用来define不同种类的packet的。
2023-12-18 15:55:23
1509
原创 【PCIe】CDNS PCIe VIP 杂记 -- Callback
最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。
2023-12-12 10:29:41
2000
4
原创 PCIe知识碎片日常记录
1. message TLP包的类型是message,如PME, INTx message中断信息。但是MSI(message signaled interrupt)中断虽然名字有message,但是它的TLP包是。PCIe的知识实际上很多并且相对杂,在实际项目应用中并不一定都能够用到。这里会将自己在项目或者学习过程中遇到的有意义的,容易混淆的知识碎片进行记录。
2023-12-07 19:00:42
764
1
原创 【SystemVerilog】 $cast动态强制类型转换
会经常用到$cast,但因为一直没理解透彻,每次使用都得现找内容再消化。今天自己重新总结整理一下。
2023-12-07 11:09:28
2368
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人