- 2024-11-20从零搭建UVM验证平台 简介
搭建UVM流程:定义interface。Interface是连接DUT和验证平台的桥梁,根据DUT的输入输出参数定义interface,在top_tb里连接interface和DUT。加入transaction。transaction是一个数据包,transaction由sequence产生,通过sequencer传递给driver。加入driver。Driver负责将接收到的tr
- 2024-11-19new 函数(一)name 参数
在UVM(UniversalVerificationMethodology)中,new函数是构造对象的关键函数之一,它用于创建和初始化UVM对象或组件。UVM中的new函数不仅用于创建对象,还通常涉及到对象的初始化和设置属性(如名字)。new函数的使用方式有一定的规范,特别是在UVM的对象和组件体系中。1.new
- 2024-11-19new 函数 (二) parent 参数
在UVM(UniversalVerificationMethodology)中,new函数通常用于创建对象或组件,并进行初始化。对于大多数uvm_object和uvm_component类,new函数会使用stringname参数来指定对象的名称。parent参数主要与uvm_component类有关,用于指定组件的父级组件。这个参数对于UVM
- 2024-11-12第18篇 :深入剖析systemverilog中 randomize 失败之烧脑案例(三)
在工作实践中,验证环境往往十分复杂,约束条件根据实际测试场景,也是层出不穷,到处都是。可能会遇到各种各样,奇奇怪怪的问题。 针对systemverilog中的randomize()随机约束问题,前面总结了一些规则,这些规则,语法书并不会讲的很透彻,全面覆盖到。只有我们在实际工作中,反复捶打,不断尝试
- 2024-11-04PVE容器直通显卡教程
intel、amd、nvidia的显卡均可以直通,并且该直通是共享,不是独占,也即所有容器都可以同时使用这些显卡,同时性能没有损耗。创建容器取消勾选无特权的容器,即unprivilegedcontainer查看显卡文件$ls-l/dev/dri/crw-rw----1rootvideo226,0Dec2911:20card0crw-rw---
- 2024-10-23uvm factory机制
UVM(UniversalVerificationMethodology)是一种用于设计验证的标准方法学。UVM提供了一种基于类的、重用的验证框架,可以简化和加速验证环境和测试用例的开发。UVM使用了一种称为工厂机制(FactoryMechanism)的技术,用于创建和管理各种对象实例。工厂机制允许用户通过使用工厂对
- 2024-10-23UVM中Seq-Seqr-Drv之间的通信
Wediscussedsequece_item,sequence,sequencer,anddriverindependently.Inthissection,wewilldiscusshowtheytalkwitheachotherandprovidesequenceitemsfromsequencetodriverviathesequencer.Beforeyoustartreadingthissection,makes
- 2024-10-15uvm_event的变量传递+查看软链接的指向+grep只打印匹配的数据+并行进程的串行化--构建进程池+UVM动态复位问题+VIP动态复位注意事项
uvm_event的变量传递uvm_event可以传递变量,但是变量需要为uvm_object类型,对于package,建议类型向下转换,直接传递uvm_object,并在另一端解析https://www.edaplayground.com/x/RhYcmoduletestbench;classclass1extendsuvm_object;`uvm_object_utils(class1)inta
- 2024-10-12【学习记录丨UVM】1.6代理人agent
《UVM白皮书》关于agent的介绍driver和monitor处理同一协议,uvm中通常将二者封装在一起,成为一个agent。一、一个agent示例classmy_agentextendsuvm_agent;my_driverdrv;my-monitormon;`uvm_component_utils(my_agent)functionnew(stringname="my_age
- 2024-10-08对UVM添加超时前的打印信息+AXI低功耗接口+process的await语句+对象当成参数+sv的单例模式+关联数组的初始化+VIM的正则表达式+grep的或操作+uvm event的电平触发+二维
对UVM添加超时前的打印信息首先获取到UVM的超时值,然后手动设定\$time的比较和while延时循环,当超出时间后,打印特殊的debug信息。$time<set_time,则进行循环。uvm_cmdline_processorclp;clp=uvm_cmdline_processor::get_inst();stringtimeout_settings[$];stringtimeout
- 2024-10-08【学习记录丨UVM】1.2驱动器driver(1)——最简单的driver及其实例化
《UVM白皮书》关于driver的介绍一、只有driver——最简单的验证平台UVM是一个库,其中的driver等组件都是派生(extends)自UVM库中的类(class)。类中通过function和task实现组件功能。UVM常用类及树形结构_uvm树-CSDN博客 下边这张图展示了UVM常用的类之间的派生关系。可
- 2024-09-07数字IC验证笔面试常见100题【持续更新】
【提要】收集整理了一些网络上和我自己在秋招、实习时遇到的题目,适合数字验证方向求职的同学进行差缺补漏或者应对八股时的速成。 对于时间比较充裕并且有条件的同学,还是强烈建议找个实习来提升自己的能力以及校招竞争性,独立完成了一两个真实项目后,能大大加深对验证
- 2024-08-28数字验证:一文弄懂UVM的factory机制
如果我们用SystemVerilog构建验证平台,构建好了之后,想改变平台中的某个组件,例如将driver改成driver_new,我们需要重新定义一下driver_new,当然也可以直接从driver继承。但是我们还需要在driver对象例化的地方将driverdrv;改成driver_newdrv;,如果需要多个组件的
- 2024-08-26UVM中的TLM(事务级建模)通信(2)
上一篇介绍了UVM中利用TLM进行的一对一通信:UVM中的TLM(事务级建模)通信(1)-CSDN博客,除此之外,UVM还有两种特殊的端口:analysis_port和analysis_export,用于完成一对多的通信。1.analysis端口 这两种端口同样也是用于传递transaction,他们与put,get的区别是:
- 2024-08-23UVM中的TLM(事务级建模)通信(1)
1.验证平台内部的通信 我们希望在验证平台内部找到两个component之间适合通信的方法,在接触TLM之前,想到的方法无非有采用全局变量、通过config_db传输等等。然而全局变量因为安全性不高,是我们长期以来竭力避免使用的方法;config_db虽然相对安全,但需要拉入basetest的
- 2024-08-22使用uvm_config_db 分层Testbench配置
前言 对于刚接触验证方法或正在采用uvm的工程师,本文重点介绍uvm配置机制"uvm_config_db",它有助于在分层测试台组件之间传递不同的类属性。通过使用示例,本文解释了uvm_config_db的用法、技术和局限性。介绍 为满足当今验证架构的需求,有必要对组件进行分层设置,以便在不
- 2024-08-18IC验证面试经验分享——UVM篇
验证最需要会的技能树是什么?!那肯定是非UVM莫属了,趁着校招之际,准备IC面试的ICer赶快码住!IC验证面试经验分享UVM篇一、UVM验证平台组件二、UVM_component和uvm_object三、sequence启动方式四、seqence是怎么给到dut的?五、p_sequencer和m_sequencer的区别1)含义2)区别六、
- 2024-07-25UVM-config_db机制和用法
1.用途 config_db机制用于在UVM验证平台间传递参数,通常成对出现,其中set相当于寄信,get相当于收信。UVM提供的config_db机制可在组件实例化前就设定好配置信息,这样就可在tb的initial块中就进行设定了。真正将这些配置信息落实在各component,是在testbench运行过程
- 2024-07-09SV/UVM 类的多态和虚方法解析
类具有三大特性:封装/继承/多态,多态是面对对象编程中最神奇的特征,也是最抽象和难以理解的特征。对于初学者来说,最好对sv有了一定了解,在掌握了封装和继承之后再学习多态会更容易理解。1.类的继承 首先复习一下继承的概念:继承是利用共性构建一个基类
- 2024-07-08[UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count
Title:[UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count文章目录1-前言2-uvm_top.set_timeout3-set_report_max_quit_count4-运用5-小结1-前言数字IC验证过程中,需要运行不同Testcase,有些TC会因为TC配置、TB机制等原因,导致m
- 2024-05-212.3.3 加入monitor
作用:监测DUT的行为,driver负责把transaction级别的数据转变成DUT的端口级别,并驱动给DUT,monitor的行为与其相对,用于收集DUT的端口数据,并将其转换成transaction交给后续的组件如referencemodel,scoreboard等处理。一些代码中用到的方法如下:monitor代码如下:需要注意1.所有的
- 2024-05-202.3.2加入env
env的作用:实例化验证平台的各个组件,作为一个容器类,在这个容器里面实例化其他组件,然后再调用run_test时传递的参数就不再是my_driver,而是这个容器类,即让UVM自动创建这个容器类的实例。所有env都应该派生自uvm_env,且与my_driver一样,容器类在仿真中也一直是存在的,使用uvm_componen
- 2024-05-172.3.1---加入transaction
transaction概念:可以简单地将transaction理解为一个包,在不同的验证平台中的transaction也不相同。一个简单的transaction如下:在这些代码中,其中dmac是48bit的以太网目的地址,smac是48bit的以太网源地址,ether_type是以太网类型,pload是其携带的数据大小,通过pload_cons约束可以看到
- 2024-05-152.2.1最简单的验证平台(单个driver)
书中的DUT(待测设计)定义如下:这个DUT的功能非常简单,通过rxd接收数据,再通过txd发送出去,其中rx_dv是接收的数据有效指示,tx_en是发送数据的有效指示。本章中的所有例子都是基于这个DUT.验证平台中的所有组件都应该派生自UVM中的类。比如UVM验证平台中的driver应该派生自uvm_driver
- 2024-05-02RISC-V SoC研发flow的总结
RISC-VSoC研发flow的总结今年的流片接近尾声了,我个人的评价是相比去年,在进度管理和流程管理上做的更好了一些。对比今年一月份开会时开会的PPT,基本上当时的规划和目标基本上都达成了。这次聊聊整个研发过程中的一些感悟。首先是对于整个团队的研发方向做了一个比较大的修正,大概