
数字IC验证百宝箱
文章平均质量分 68
数字IC验证百宝箱涵盖博主在实际工作中常用的技能与工具,包括但不限于SV、UVM、Formal、脚本(perl/python/shell)及EDA工具快速上手使用等。无论你是刚踏入职场的验证小白,还是希望回顾基础寻找跳槽机会的从业者,本专栏都能为你提供实用的技术支持,在达成目标的路上,助你一臂之力。
优惠券已抵扣
余额抵扣
还需支付
¥399.90
¥499.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
MoorePlus
与世界格格不入的理想主义者!
展开
-
【数字IC验证】博客内容全览
以真题及面试为基础,总结各大IC公司笔试以及面试中的常考、常问知识点!(数字IC前端设计、验证都可使用)笔试及面试中常考知识点、手撕代码总结常见面试问题总结(七、常见总线协议篇)常见面试问题总结(六、项目篇)常见面试问题总结(五、验证策略及宏观思想篇)常见面试问题总结(四、UVM篇)常见面试问题总结(三、SystemVerilog篇)常见面试问题总结(二、数字电路与Verilog篇)常见面试问题总结(一、EDA工具及IC整体设计流程篇)原创 2025-03-16 00:27:36 · 1765 阅读 · 0 评论 -
【数字IC验证基础】专栏内容导航
【数字IC验证基础】专栏内容导航原创 2024-10-08 00:32:13 · 247 阅读 · 0 评论 -
【UVM实战】第一章:配置UVM环境(以VCS为例),跑通书上的例子(包括清理中间文件方法、使用DVE查看波形方法、命令执行原理探究)
源码下载地址:http://www.hzcourse.com/web/refbook/detail/5651/229这里我将其保存在win10下的 目录,并解压出文件夹和文件夹,如下图所示:打开虚拟机,依次点击菜单栏中的:虚拟机→设置→选项→共享文件夹→总是启用,然后在“文件夹中”添加书本源码所在目录,如下图:打开终端,输入,就可看到我们刚刚下载的《UVM实战》书本源码,如下图所示:这里我们将该目录下的文件夹和文件夹复制到我们的工作目录下,命令如下:命令运行情况,如下图所示:需要改的脚本其实就一个,即:原创 2025-03-20 23:59:32 · 278 阅读 · 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 · 101 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(2)只有driver的验证平台【时序解读】
DUT的基本功能:采集输入端口的RX和RX_EN,打一拍后输出到TX和TX_EN。原创 2025-03-20 23:58:30 · 101 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(3)为验证平台加入各个组件【时序解读;使用流操作符解包driver数据的代码;修正原书monitor数据的拼包错误】
代码清单 2-48。原创 2025-03-20 23:57:59 · 185 阅读 · 0 评论 -
【UVM实战】第二章:一个简单的UVM验证平台(4)UVM 的终极大作:sequence
代码清单 2-60。原创 2025-03-20 23:57:28 · 62 阅读 · 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 · 75 阅读 · 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 · 74 阅读 · 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 · 50 阅读 · 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 · 91 阅读 · 0 评论 -
【UVM实战】第五章:UVM验证平台的运行(1)phase机制(下)
但是,reference_model.connect( scoreboard) 的要求则没有那么高, 只需要在上述代码中reference_model=new之后任何一个地方编写即可。可以看出,原创 2025-03-20 23:54:51 · 76 阅读 · 0 评论 -
【UVM实战】第五章:UVM验证平台的运行(2)objection机制
代码清单 5-33。原创 2025-03-20 23:54:20 · 59 阅读 · 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 · 59 阅读 · 0 评论 -
【UVM实战】第七章:UVM中的寄存器模型(2)简单的寄存器模型
因此, 必须要定义好一个转换器。一个转换器要定义好两个函数, 一是reg2bus, 其作用为将寄存器模型通过sequence发出的uvm_reg_bus_op型的变量转换成bus_sequencer能够接受的形式, 二是bus2reg, 其作用为当监测到总线上有操作时, 它将收集来的transaction转换成寄存器模型能够接受的形式, 以便寄存器模型能够更新相应的寄存器的值。add_reg函数的第一个参数是要加入的寄存器, 第二个参数是寄存器的地址, 这里是16’h9, 第三个参数是此寄存器的存取方式。原创 2025-03-20 23:50:44 · 81 阅读 · 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 · 102 阅读 · 0 评论 -
【UVM基础】仿真时间与运行时间
【代码】【UVM基础】仿真时间与运行时间。原创 2025-03-20 00:00:11 · 77 阅读 · 0 评论 -
【UVM基础】UVM各个组件功能
while(1)原创 2025-03-19 23:59:41 · 40 阅读 · 0 评论 -
【UVM基础】uvm_info 宏介绍
在验证平台中, 某些信息是非常关键的, 这样的信息可以设置为UVM_LOW;而有些信息可有可无, 就可以设置为UVM_HIGH;介于两者之间的就是UVM_MEDIUM,UVM默认只显示UVM_MEDIUM或者UVM_LOW的信息。uvm_info宏的功能与Verilog中display语句的功能类似,但是它比display语句更加强大。原创 2025-03-19 23:59:09 · 56 阅读 · 0 评论 -
【UVM基础】什么是transaction
transaction是一个抽象的概念。一般来说, 物理协议中的数据交换都是以帧或者包为单位的, 通常在一帧或者一个包中要定义好各项参数, 每个包的大小不一样。很少会有协议是以bit或者byte为单位来进行数据交换的。以以太网为例, 每个包的大小至少是64byte。这个包中要包括源地址、 目的地址、 包的类型、 整个包的CRC校验数据等。原创 2025-03-19 23:58:39 · 56 阅读 · 0 评论 -
【UVM基础】UVM 树形组织结构
在树根之后会生长出枝叶 , 长出枝叶的过程需要在build_phase中手动实现。只有uvm_component才能作为树的结点, 像my_transaction这种使用uvm_object_utils宏实现的类是不能作为UVM树的结点的。通过parent的形式, UVM建立起了树形的组织结构。在这种树形的组织结构中, 由run_test创建的实例是树根, 并且树根的名字是固定的, 为。在一个实际应用的UVM验证平台中, 通常来说, 树根是一个基于uvm_test派生的类。原创 2025-03-19 23:58:08 · 33 阅读 · 0 评论 -
【UVM基础】UVM 的 build_phase 执行顺序
在UVM的树形结构中, build_phase的执行遵照从树根到树叶的顺序, 即先执行my_env的build_phase, 再执行my_driver的build_phase。 当把整棵树的build_phase都执行完毕后, 再执行后面的phase。原创 2025-03-19 23:57:37 · 52 阅读 · 0 评论 -
【UVM基础】Master Agent中(DUT输入端)设置一个monitor必要性解释
由于transaction是由driver产生并输出到DUT的端口上, 所以driver可以直接将其交给后面的reference model,如下图所示框图。:是否有必要在DUT的输入口设置一个monitor?:有必要,但不强制。原创 2025-03-19 23:56:33 · 27 阅读 · 0 评论 -
【UVM基础】uvm_agent 中的 is_active 变量释义
那么什么是UVM_PASSIVE模式呢?以本章的DUT为例,这里最令人困惑的可能是build_phase中。在uvm_agent中,原创 2025-03-19 23:56:02 · 41 阅读 · 0 评论 -
【UVM基础】是否只能在build_phase中执行实例化动作的探究(以及为什么建议在UVM中,先配置再实例化)
( is_active的默认值是UVM_ACTIVE) ,这与预想差距甚远。在my_env的build_phase( 或者new函数) 中,向i_agt和o_agt的is_active赋值,UVM是在build_phase中做实例化工作, 这里的实例化指的是uvm_component及其派生类变量的实例化,除了在build_phase中执行实例化的动作,其实还可以在new函数中执行实例化的动作。如果是uvm_object的实例化, 则可以在任何phase完成, 当然也包括build_phase了。原创 2025-03-19 23:55:30 · 23 阅读 · 0 评论 -
【UVM基础】UVM 的 connect_phase 执行顺序
—先执行driver和monitor的connect_phase, 再执行agent的connect_phase, 最后执行env的connect_phase。与build_phase及main_phase类似, connect_phase也是UVM内建的一个phase,原创 2025-03-19 23:54:49 · 54 阅读 · 0 评论 -
【UVM基础】TLM常用数据接发送与数据接收实例
在UVM中, 通常使用TLM( Transaction Level Modeling) 实现component之间transaction级别的通信。本节将以下图的UVM树形结构为例,示范 UVM transaction级别通信的数据接发送(uvm_analysis_port)与数据接收(uvm_blocking_get_port)。数据流向是:my_model是从my_agent的my_monitor中得到my_transaction, 经过处理后,my_model把my_transaction传递给my_原创 2025-03-19 23:54:17 · 43 阅读 · 0 评论 -
【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 · 91 阅读 · 0 评论 -
【UVM基础】uvm_driver 成员变量 req 释义
相比之前,不需再声明。原创 2025-03-19 23:49:24 · 51 阅读 · 0 评论 -
【UVM基础】sequence 与 sequencer 理解
2) 如果仲裁队列中没有发送请求, 但是driver向sequencer申请新的transaction, 那么sequencer将会处于等待sequence的状态,一直到有sequence递交发送请求, sequencer马上同意这个请求, sequence产生transaction并交给sequencer, 最终driver获得这个transaction。的, 它尝试着询问sequencer是否有新的transaction, 如果有, 则得到此transaction, 否则就直接返回。原创 2025-03-18 23:37:05 · 43 阅读 · 0 评论 -
【UVM基础】两种启动 sequence 的方式
所谓显式启动:即在sequence中直接调用。所谓隐式启动:即在sequence中调用。函数,然后在env中调用。函数,在env中调用。原创 2025-03-18 23:36:10 · 34 阅读 · 0 评论 -
【UVM基础】`uvm_info (“TRACE“, $sformatf(“%m“), UVM_HIGH);
【UVM基础】`uvm_info (“TRACE“, $sformatf(“%m“), UVM_HIGH);原创 2025-03-18 23:35:22 · 73 阅读 · 0 评论 -
【UVM基础】Makefile 中的 SEED 值设置
【UVM基础】Makefile 中的 SEED 值设置原创 2025-03-18 23:34:48 · 49 阅读 · 0 评论 -
【UVM基础】常用的三个phase作用:build_phase/connect_phase/run_phase
run_phase:9个phase中只有它是个task,其他phase都是都是function。function不能有时间信息,只有task才能阻塞,才能有延时信息。模拟时序给DUT,一定是task!故所有数据的处理,都是放在task中。task可以调用function、task;function只能调用function!connect_phase:TLM 端口连接,实现数据通信。build_phase:实例化组件,即创建对象。原创 2025-03-18 23:34:16 · 31 阅读 · 0 评论 -
【UVM基础】uvm_config_db的set与get函数快速上手指南
之所以可以如此, 可以这样理解: 张三给李四寄了一封信, 信上写了李四的名字, 这样李四可以收到信。但是呢, 由于保密的需要, 张三只是在信上写了“四”这一个字, 只要张三跟李四事先约定好了, 那么李四一看到上面写着“四”的信就会收下来。set函数的参数可以使用这种灵活的方式设置, 同样的, get函数的参数也可以。既然set函数的第一个和第二个参数联合起来组成路径, 那么在某个测试用例的build_phase中可以通过如下的方式设置。机制的set函数设置参数时, set函数的第一个参数也可为。原创 2025-03-18 23:33:35 · 121 阅读 · 0 评论 -
【UVM基础】phase中的一些重要特性
phase特性原创 2025-03-18 23:32:50 · 31 阅读 · 0 评论 -
【UVM基础】+uvm_set_verbosity 使用介绍
将的verbosity级别都设置为了UVM_NONE。将。允许用户在模拟的特定阶段(和“运行”阶段的时间)操纵特定组件的详细程度。id参数可以是所有id的ALL,也可以是特定的消息id。出于性能考虑,id。非“运行”阶段的设置按命令行中执行。“运行”阶段(时间)的设置排序,然后按照相同时间的设置执行。原创 2025-03-18 23:31:32 · 72 阅读 · 0 评论 -
【UVM基础】uvm_resource_db 使用介绍
类为资源工具提供了一个方便的接口。在许多情况下,创建和设置资源或获取资源等基本操作可能需要使用或中的接口执行多行代码。中的便利层将许多操作简化为一行代码。如果在运行时指定了命令行选项,则显示所有资源DB访问(读和写)。原创 2025-03-18 23:30:47 · 75 阅读 · 0 评论 -
【UVM基础】前门访问(FRONTDOOR)与后门访问(BACKDOOR)的基本概念
前门访问(FRONTDOOR)与后门访问(BACKDOOR)是两种寄存器的访问方式。原创 2025-03-18 23:25:39 · 44 阅读 · 0 评论 -
【UVM基础】uvm_do 做了哪些事情?(面试常问)
【代码】【SystemVerilog基础】virtual interface 实用总结。原创 2025-03-17 22:37:45 · 78 阅读 · 0 评论