
UVM实战
文章平均质量分 94
张强《UVM实战》个人笔记,谨慎订阅。以实战为导向,逐步深入UVM验证平台的各个组件,掌握UVM验证平台搭建。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
MoorePlus
与世界格格不入的理想主义者!
展开
-
【UVM实战】《UVM实战》重要知识点总结
所谓深度优先,指的是如果i_agt的build_phase执行完毕后, 它接下来执行的是其孩子的build_phase, 如果孩子还有孩子, 那么再继续执行下去, 一直到整棵以i_agt为树根的UVM子树的build_phase执行完毕, 之后再执行i_agt的兄弟的build_phase。UVM的所有phase中,除了run_phase(包括预期并行的12个小phase)是task phase,其他phase都是function phase。如从main_phase跳转到shutdown_phase。原创 2025-03-19 23:53:29 · 98 阅读 · 0 评论 -
【UVM实战】第七章:UVM中的寄存器模型(3)后门访问与前门访问
为了讲述后门访问操作, 从本节开始, 将在7.1.1节的DUT的基础上引入一个新的DUT, 如附录B的代码清单B-3所示。这个DUT中加入了寄存器counter。它的功能就是统计rx_dv为高电平的时钟数。带计数器的DUT:代码清单 B-3文件: src/ch7/section7.3/dut/dut.svendmodulerst_n,bus_op,bus_addr,rxd,rx_dv,txd,tx_en);input clk;reg tx_en;原创 2025-03-20 23:50:13 · 131 阅读 · 0 评论 -
【UVM实战】第七章:UVM中的寄存器模型(2)简单的寄存器模型
因此, 必须要定义好一个转换器。一个转换器要定义好两个函数, 一是reg2bus, 其作用为将寄存器模型通过sequence发出的uvm_reg_bus_op型的变量转换成bus_sequencer能够接受的形式, 二是bus2reg, 其作用为当监测到总线上有操作时, 它将收集来的transaction转换成寄存器模型能够接受的形式, 以便寄存器模型能够更新相应的寄存器的值。add_reg函数的第一个参数是要加入的寄存器, 第二个参数是寄存器的地址, 这里是16’h9, 第三个参数是此寄存器的存取方式。原创 2025-03-20 23:50:44 · 88 阅读 · 0 评论 -
【UVM实战】第七章:UVM中的寄存器模型(1)寄存器模型简介
就目前读者所掌握的知识来说, 只能先通过使用bus_driver向总线上发送读指令, 并给出要读的寄存器地址来查看一个寄存器的值。当寄存器模型使用前门访问方式来实现读或写操作时, uvm_reg_map就会将地址转换成绝对地址, 启动一个读或写的sequence, 并将读或写的结果返回。uvm_reg_block: 它是一个比较大的单位, 在其中可以加入许多的uvm_reg, 也可以加入其他的uvm_reg_block。在本书以前所有的例子中, 使用的DUT几乎都是基于2.2.1节中所示的最简单的DUT,原创 2025-03-20 23:53:41 · 66 阅读 · 0 评论 -
【UVM实战】第五章:UVM验证平台的运行(2)objection机制
代码清单 5-33。原创 2025-03-20 23:54:20 · 68 阅读 · 0 评论 -
【UVM实战】第五章:UVM验证平台的运行(1)phase机制(下)
但是,reference_model.connect( scoreboard) 的要求则没有那么高, 只需要在上述代码中reference_model=new之后任何一个地方编写即可。可以看出,原创 2025-03-20 23:54:51 · 85 阅读 · 0 评论 -
【UVM实战】第五章:UVM验证平台的运行(1)phase机制(上)
对于图3-2中的scoreboard及driver的build_phase的执行顺序, i_agt实例化时名字为“i_agt”,而scb为“scb”, 那么i_agt的build_phase先执行, 在执行完毕后, 接下来执行driver、 monitor及sequencer的build_phase。无论是run-time phase之间的同步, 还是run_phase与post_shutdown_phase之间的同步, 或者是run_phase与run_phase之间的同步,转载 2025-03-20 23:55:21 · 97 阅读 · 0 评论 -
【UVM实战】第三章:UVM基础(3)field automation机制
在这个17bit的数字中, bit0表示copy, bit1表示no_copy, bit2表示compare, bit3表示no_compare, bit4表示print, bit5表示no_print, bit6表示record, bit7表示no_record, bit8表示pack, bit9表示no_pack。这样, 在post_randomize中计算CRC前先检查一下crc_err字段, 如果为1, 那么直接使用随机值, 否则使用真实的CRC。在这一系列uvm_field系列宏中,出现的。原创 2025-03-20 23:55:55 · 57 阅读 · 0 评论 -
【UVM实战】第三章:UVM基础(2)UVM的树形结构
读者可能会说, 因为A是自己写出的, 它就只有一个孩子, 并且孩子的名字叫b_inst, 所以可以直接使用a_inst.b_inst就可以了。( 而且也是唯一的一个实例 [1], 它的实现方式非常巧妙) , 而uvm_root派生自uvm_component, 所以uvm_top本质上是一个uvm_component, 它是树的根。关于叶子的判断是正确的, 但是关于树根的推断是错误的。b_inst是A的成员变量, 自然而然的, A就是b_inst的parent了, 无需再在调用new函数的时候指定。原创 2025-03-20 23:56:27 · 82 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(5)建造测试用例
UVM使用的是一种树形结构, 在本书的例子中, 最初这棵树的树根是my_driver, 后来由于要放置其他component, 树根变成了my_env。但是在一个实际应用的UVM验证平台中, my_env并不是树根, 通常来说, 树根是一个基于uvm_test派生的类。无论是在my_env中设置default_sequence, 还是在base_test中或者top_tb中设置,在把my_env放入base_test中之后, UVM树的层次结构变为如图2-11所示的形式。原创 2025-03-20 23:56:57 · 93 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(4)UVM 的终极大作:sequence
代码清单 2-60。原创 2025-03-20 23:57:28 · 69 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(3)为验证平台加入各个组件【时序解读;使用流操作符解包driver数据的代码;修正原书monitor数据的拼包错误】
代码清单 2-48。原创 2025-03-20 23:57:59 · 193 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(2)只有driver的验证平台【时序解读】
DUT的基本功能:采集输入端口的RX和RX_EN,打一拍后输出到TX和TX_EN。原创 2025-03-20 23:58:30 · 117 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(1)验证平台组成
一个简单的验证平台框图如图2-1所示。在UVM中, 引入了agent和sequence的概念, 因此UVM中验证平台的典型框图如图2-2所示。从下一节开始, 将从只有一个driver的最简单的验证平台开始, 一步一步搭建如图2-2所示的验证平台。,这个过程通常是把 DUT 放入一个验证平台中来实现的。图2-2 典型UVM验证平台框图。图2-1 简单验证平台框图。原创 2025-03-20 23:59:01 · 128 阅读 · 0 评论 -
【UVM实战】第一章:配置UVM环境(以VCS为例),跑通书上的例子(包括清理中间文件方法、使用DVE查看波形方法、命令执行原理探究)
源码下载地址:http://www.hzcourse.com/web/refbook/detail/5651/229这里我将其保存在win10下的 目录,并解压出文件夹和文件夹,如下图所示:打开虚拟机,依次点击菜单栏中的:虚拟机→设置→选项→共享文件夹→总是启用,然后在“文件夹中”添加书本源码所在目录,如下图:打开终端,输入,就可看到我们刚刚下载的《UVM实战》书本源码,如下图所示:这里我们将该目录下的文件夹和文件夹复制到我们的工作目录下,命令如下:命令运行情况,如下图所示:需要改的脚本其实就一个,即:原创 2025-03-20 23:59:32 · 302 阅读 · 0 评论