随机值怎么排除禁区:拒绝采样、可行集合与耗尽
$urandom_range 只提供范围,不接受一个“排除这几个值”的附加参数...
动态数组切片与重排:固定形状、显式复制和对象浅共享
把运行期 start、length 放进数组 slice,报错后以为动态数组就不...
new 了句柄数组,还没 new 元素:多实例构造与共享配置
items=new[N] 之后立刻访问 items[0].field 仍然 nu...
always_ff 多驱动报错:先修状态所有权,再看工具开关
always_ff 报变量还被其他进程赋值,直接关闭“可抑制错误”可能让代码继续...
assert #0 与 assert final:延迟检查不是普通过程 #0
组合逻辑在同一时间槽里经过多个中间值,普通即时断言可能在尚未稳定的位置报告失败...
$system 调脚本:返回码、路径与可复现的外部依赖
把文件名或变量放进 $system 字符串,外部脚本不一定会按 SV 变量含义理...
字符串与数值怎么转:格式化、解析和原始字节
string'(123) 与 $sformatf("%0d",123) 不是同一...
pre/post_randomize 怎么用:准备、失败路径与派生值
checksum 放在 pre_randomize 里计算,会用到上一轮数据;p...
对象成员怎么级联随机化:rand 句柄、构造与联合约束
外层对象 randomize 后,内部配置对象的字段没有改变。先检查那是不是一个...
断言为什么与波形不一致:采样值、NBA 与动作块当前值
断言报错时打印出的 data 明明正确,可能是动作块读到了更新后的当前值,而性质...
“必须先发生 A”怎么验:历史标志、复位世代与同拍语义
信号必须先到过状态 A,才允许进入状态 B。这个需求不是简单比较当前 A/B,而...
[*]、[->]、[=]:重复次数相同,结束点可以不同
“看到三次 ack”可以表示连续三拍、允许中间空拍,或者第三次之后还允许继续拖延...
callback 放在哪里:可替换行为、注册顺序与对象所有权
想给 driver 加错误注入,继承重写和 callback 都能扩展行为,但它...
仲裁器公平性怎么验:合法 grant 不等于不会饿死
每拍 grant 都 one-hot,仍可能永远不给某个请求者服务。互斥只证明没...
参数化 interface 怎么对齐:端口、modport 与虚接口类型
同名 interface 的两个实例,一个数据宽度 32,另一个宽度 64,在...
const 固定的是什么:变量、句柄与展开常量
给对象句柄加 const,不代表它指向的整个对象都变成不可修改;给运行期变量加...
$fread 读的是字节:ASCII 数字与二进制 payload 分开
文件中写着字符“12”,fread 得到的不是数值 12,而是字符 1 和 2...
readmemh 与 writememh:文本格式、索引和加载完成条件
mem 文件里写了一段 SV 声明,readmemh 却没有初始化目标。它读取的...
DPI-C 接口怎么定:签名、四态值和仿真时间边界
SV 文件编译通过,链接时却找不到 C 函数,或 C 函数拿到的数据完全不对。D...
first_match 选的是最早结束:范围前件与并列匹配
一个范围延时前件可能在多个拍匹配,每次成功都可能带来后件义务。first_mat...
randc 的周期边界:对象状态、解空间变化与数组元素
第一次随机出 0、1、2 后改变范围,下一次是否必然给出新加入的 3?不能把 r...
soft 约束不是概率偏好:默认值、冲突与优先规则
soft length==8 不表示“更容易取 8”。它表达可被放弃的默认规则...
ignore_bins 与 illegal_bins:覆盖模型不能包办检查器
两个声明都会影响覆盖统计,却表达不同意图:ignore 表示这一范围不纳入覆盖目...
毛刺怎么检查:逐拍采样与边沿间隔不是同一件事
时钟沿上看信号始终稳定,不能证明两个采样沿之间没有出现窄脉冲。先确定需要检查的是...
local 与 protected:限制的是访问位置,不是对象是否存在
派生类看不到基类的 local 成员,不代表基类那部分状态从对象中消失。可见性控...
数组赋值里的单引号:pattern、拼接与 default 填充
'{...} 与 {...} 只差一个单引号,前者可以按目标类型构造聚合值,后者...
#0 为什么等不到 NBA:时间槽、输出与显式同步
两个 initial 都在 time 0,给其中一个加 #0 后“好像稳定了”...
参数化 struct 与函数:把泛型放进正确的容器
想让一个 struct 的 data 宽度随调用变化,或给 function 自...
前向声明与 package export:可见类型不等于完整定义
两个类互相持有句柄,或包 B 想把包 A 的类型转交给包 C,经常遇到“类型存在...
三目与移位的四态陷阱:X 合并、符号扩展和表达式宽度
sel 为 X 时,if 和 ?: 可能给出不同结果;右移负数时,>> 与 >>...
断言放在哪里:module、checker、program 与 class 的边界
类里能写即时断言,不代表可以把完整的静态并发性质声明直接搬进方法。先区分过程执行...
one-hot 怎么查才完整:恰好一个、最多一个与 X/Z
$onehot、$onehot0 和 $rose 都经常出现在状态检查里,但它们...
enum 转换怎么校验:静态 cast 不等于合法编码检查
从总线读到一个整数,直接 cast 成 enum 后就拿来 case 分支,非法...
virtual 方法如何分发:覆盖、隐藏与构造函数
基类句柄指向派生对象,调用方法后却执行了基类版本。句柄能保存派生对象,并不自动使...
int、integer 与尺寸 cast:态数、符号和截断分别看
int 是 32 位两态有符号整数,integer 是 32 位四态有符号整数...
约束里的 if 与 ->:没有执行顺序,也没有下一拍
把过程 if 改写成约束 if 后,发现求解器还能反推条件变量。这不是代码倒着执...
struct 与 union:字段顺序、共享位图和未知态
struct 用来同时保存多个字段,union 用来用不同视图解释同一份存储。两...
real 转整数与随机实数:舍入、截断和离散网格
real 强转 int 与 $rtoi 在小数处理上不同,随机实数也不能默认像普...
wire、logic 与 always_comb:数据类型不等于驱动种类
“logic 取代 wire 和 reg”只说对了一半。logic 是四态数据类...
AXI 4KB 边界怎么算:最后一个字节、对齐和表达式位宽
用 addr[11:0]+len < 4096 判断 burst 是否越界,漏掉...
input、inout、ref:什么时候能实时看到外部变化
一个 task 等待期间,调用方修改了变量,task 却仍看见旧值。inout...
void cast 该用在哪里:丢弃返回值不等于处理失败
为了消除“忽略返回值”警告,把所有调用都包上 void',代码安静了,随机化失败...
iff 为什么关不掉覆盖率分母:构造与采样的两条时间线
某配置下永远不采一组 bins,覆盖率却始终不到 100%。iff 控制本次是否...
dist 与 solve before:合法解相同,抽样分布可以不同
随机化结果全部合法,却总是出现长包,很少出现短包。约束定义了允许哪些组合,但未必...
数组查询与打印:max 返回队列,%p 也不是协议格式
想找数组最大值,直接把 max() 结果赋给一个标量;想打印十六进制,却发现 %...
queue 怎么删才不漏:容器层次、索引移动与共享对象
遍历 queue 时删除匹配元素,结果相邻的两项只删掉一项。删除会让后续索引前移...
随机种子怎么复现:线程 RNG、对象 RNG 与调用顺序
命令行种子相同,改了一个 debug 线程后数据序列却变化。随机复现依赖的不只有...
sum() 为什么溢出:with 表达式先扩位,再做归约
数组每个元素都满足范围,sum 约束却生成了奇怪结果。常见原因是归约结果按元素或...
SVA 延时想用变量:静态展开、局部计数与过程 checker
写 req |-> ##delay ack,delay 来自运行期配置,工具报错...
function 与 task:零耗时不等于零副作用
函数算完后想等一拍再返回,或者 task 希望返回一份结果,都不需要靠奇怪的语法...
数组打包与流操作:位数相等,顺序也可能反了
unpacked 字节数组转换成一个 packed 向量,不能只检查结果宽度。数...
generate 层次为什么不能用 int 下标:实例与变量数组
generate 创建了 lane[0]、lane[1] 等作用域,运行期却不能...
cross 覆盖怎么裁剪:组合粒度、ignore_bins 与分母
只关心两个字段的一小部分组合,直接定义一个命名 cross bin 后发现覆盖率...
逐位 toggle 覆盖:看过 0 和 1,不等于看过双向翻转
32 位总线采到过全零和全一,并不一定满足每个场景要求的翻转覆盖。先明确想统计电...
inout 怎么驱动:net 决议、Z 释放与开漏上拉
class 里拿到了 virtual interface,却不能直接对 wire...
$past 与 $rose:历史值、采样沿和向量最低位
想验证一拍延迟复制,写成 $rose(a) |-> $past(b) 只检查了两...
文件读取怎么避免死循环:先读行,再解析返回值
while(!$feof(fd)) 后直接 fscanf,容易在格式错误时不前进...
assert、assume、cover:义务、环境边界与空真通过
回归没有 assertion failure,不代表关键行为已经发生。前件一直不...
断言怎么单独关闭:使能、disable iff 与运行中尝试
只想暂时关闭一条检查,却用全局断言开关让其他检查一起消失。断言控制应先分清:阻止...
queue、mailbox、semaphore:存数据、传消息与借许可
三个并发组件之间想传事务,直接共享 queue 是否足够?先确定需要的是集合操作...
static 与 automatic:方法归属、局部存储和单例不是一回事
static function、task automatic 和 static...
循环启动并行任务:automatic 副本放在哪里才有效
for 循环启动四个线程,却四次都打印最终循环值。这通常不是随机调度坏了,而是多...
disable fork 为什么误杀:父子进程、隔离层与超时清理
join_any 后接 disable fork 是常见超时模板,但若调用进程早...
等电平还是等事件:wait、边沿与分号到底控制什么
“等 ready 后继续”可能有两种意思:ready 当前为高即可继续,或者必须...
可变切片怎么写:位置可变、宽度常量与掩码边界
循环里写 data[i8+7:i8] 报常量表达式错误,不代表不能按字节访问。先...
宏为什么拼不出实例名:词元、条件编译与展开阶段
想在循环里把 lane 编号拼进宏名,结果得到的是字母 i,而不是数字。原因是预...
UVM 日志的时间单位:显示格式、精度与 API 时间值
日志里 @1000 到底是 ns 还是 ps?先分清时间本身、当前作用域的时间单...
总线 transaction 放哪些字段:业务意图、协议属性与时序策略
把 DUT 接口换成 AHB 或 AXI,是否只改 driver 就够了?取决于...
后门写入又恢复:路径存在,不代表命中真实存储
后门写完立刻读回正确,过一会儿前门读却变回旧值。此时“后门自读自写相等”不能证明...
rand_mode 与 constraint_mode:固定字段为何仍会随机失败
给 addr 赋了固定值,再调用 randomize(),它会不会被覆盖?答案取...
IP、VIP 与 SoC 验证:复用资产之后还要验证什么
IP 在模块级验证充分,集成到 SoC 后仍可能出现地址、时钟、复位、安全或一致...
alias 不是双向 assign:net 等价与驱动决议
想给一个信号起短名字,用 assign、let、packed struct 或...
SV 多重继承怎么替代:interface class 与组合
一个 UVM 类既想复用现有组件基类,又想暴露另一套抽象方法,是否能 exten...
仿真脚本跑在哪里:shell、Makefile 与 Tcl 的边界
在仿真器控制台里输入 make,或把 shell 脚本交给 do 执行,报错常常...
RO 寄存器怎么验:只读性、状态来源与后门注入
对只读寄存器 backdoor 写了一个值,随后前门读回原值,未必说明 RAL...
scoreboard 收尾:phase_ready_to_end 与有界排空
激励 sequence 已经结束,scoreboard 里却还有未比较的数据。此...
SEQREQZMB:等待 grant 的线程为什么被杀了
SEQREQZMB 提示 sequence 从仲裁队列被移除时,常见根因是请求线...
sequence 钩子怎么选:pre_start、pre_body 与 super.body
sequence 明明实现了 body(),运行时却出现 “Body defin...
packed struct 的 UVM 自动化:整块比特与字段语义分开
transaction 内有一个 packed struct,想让 copy、c...
随机动态数组报 resize 超限:先限规模,再查求解与打包
几千字节 payload 随机化失败,日志提示 illegal resize,未...
日志只开一部分:宏过滤、report context 与对象继承链
调试某一条 sequence 时,全局开 UVM_FULL 往往带来大量无关信息...
RAL 的 read 与 mirror:取数、检查和预测不是同一个开关
想读寄存器时,该用 read() 还是 mirror()?两者都可能访问 DUT...
TLM 的 port、export、imp:调用从哪里开始,在哪里实现
TLM 连接代码里三种端点看起来很像,但它们承担的是调用、透传和实现三个角色。尤...
UVM 接 VHDL:wrapper、混合语言 bind 与后门能力分开验
DUT 换成 VHDL 后,原来能用的 SV bind、内部路径和后门访问可能分...
两条 sequence 并行:仲裁交错、原子区间与 driver 吞吐
两条 sequence 用 fork 同时 start 到同一个 sequenc...
BUILDERR 怎么查:构建错误汇总与 quit count 是两回事
日志最后一行是 “stopping due to build errors”,很...
scoreboard 与 subscriber:类名不决定检查能力
uvm_scoreboard 和 uvm_subscriber 都能接收 mon...
event pool 怎么用:共享名字、触发竞态与事件丢失
两个组件只想约定“初始化完成”这样一个同步点,使用全局事件池能减少句柄传递。但名...
接口数组传给 config_db:静态下标、注册屏障与逐路配置
同一个 driver 类创建了很多实例,仿真却只有一路信号在动。常见原因是所有...
get 与 get_next_item:握手结束和总线完成要分开
driver 想预取下一笔事务时,经常把多个线程都接到同一个 seq_item_...
响应队列溢出:先找消费者,再谈增大深度
“Response queue overflow”通常说明响应已经产生并送到了...
日志想带方法名:对象全名、词法作用域与 %m
get_full_name 返回组件层次,get_type_name 返回对象类...
宏展开后语法错:续行符、begin/end 与调用位置
错误指在 default: 或 endcase,真正的问题可能在上一个宏定义:多...
warm/cold reset 怎么验:复位域、保留状态与 RAL kind
warm reset 不一定只复位一个 IP,cold reset 也不是所有状...
按名字访问寄存器字段:查找范围、缓存与判空
脚本给出“control_3.mode”,不能直接写 reg.(字符串) 访问类...
多路 monitor 接 scoreboard:imp 后缀、来源与类型契约
两个 monitor 接到同一个 write,scoreboard 怎么知道数据...
active/passive 怎么配置:组件构建与运行期使能分开
把 is_active 改成 UVM_PASSIVE,不代表已创建的 drive...
按用例预加载 memory:选文件、静态访问与完成确认
UVM test 要按场景选择 hex 文件,但 DUT memory 在静态...
payload 队列怎么设值:packed 转换、foreach 与 local::
packet 的 payload 是 bit 队列,想把一个字节放进去,直接约束...
Python 如何控制 UVM:命令桥、仿真线程与时间语义
Python 负责寄存器脚本和数据处理,已有 UVM VIP 负责总线激励,两边...
同一寄存器的多个地址视图:共享 reg,不共享子 map
同一个 IP 被两个处理器通过不同地址窗口访问,是否应该把同一张子 map 加进...
跨多笔生成唯一地址:randc、历史表与空间耗尽
数组内 unique 约束保证一次随机化里的元素不同,但不自动记住前面几百笔已经...
一次仿真接续多个场景:test、sequence 与覆盖归因
想让场景 B 从场景 A 留下的寄存器和内存状态继续运行,通常应在同一个 tes...
参考模型是什么:可执行规格、独立预期与模型自检
reference model 不是把 RTL 换一种语言重写一遍。它的价值在于...
UVM 超时怎么收尾:全局熔断、诊断与 objection 清理
超时后想一次性 drop 所有 objection,再进入 report_pha...
set_config_object 迁移:数据库类型、克隆与共享句柄
旧代码 set_config_object 能用,接收方换成 uvm_confi...
driver 与 BFM:复用 task 模型时如何隔离静态路径
已有一套能驱动总线的 task BFM,接入 UVM 时不必把它重写成全部方法学...
AXI3 与 AXI4:长 burst、写交织、锁与 QoS
AXI4 不是把 AXI3 的 burst 数字改大就结束了。移植 VIP 或检...
从 APB 到 AHB:地址/数据重叠与等待周期验证
APB agent 跑通后,不能只改信号名就变成 AHB agent。AHB 的...
用断言测时钟频率:相邻沿时间差、精度与停钟
检查 10–100MHz 的时钟,应该测相邻上升沿的时间差,而不是在同一个采样沿...
数值日志怎么对齐:%0h、字段宽度与字符串补空格
想把 8'h08 打成不带前导零的“8”,同时占两列、后面留一个空格。这其实是两...
virtual sequence 与 virtual sequencer:哪个是必需的
virtual sequence 和 virtual sequencer 经常被...
二维数组波形看不到:记录、可见性与 GUI 过滤分开查
普通信号都能看见,DUT 的二维数组或 memory 却没有出现在波形窗口。先分...
uvm_test_top 不是源码变量:组件句柄与静态层次的区别
日志中明明有 uvm_test_top.env.sb,为什么直接在代码里写这个名...
UVC、VIP 与 agent:复用边界到底在哪里
交付一个带 driver、monitor、sequencer 的 agent,就...
run_test 与 UVM_TESTNAME:类型选择、优先级与实例名
top 中写了 run_test("smoke_test"),日志却说正在运行...
Iteration limit reached:零延时环路与构建污染怎么查
仿真时间停在同一个数值,事件迭代不断增加,最后触发 Iteration limi...
旧 uvm_sequence_utils 怎么迁:工厂、类型句柄与执行分开
遗留 sequence 里只有一行 uvm_sequence_utils,把它换...
UVM 文档怎么生成:注释、接口契约与解析验证
验证环境有大量类和方法,自动生成一套 HTML,并不代表别人已经能够使用它。真正...
打印 transaction:sprint、do_print 与 verbosity
obj.print 能把 transaction 打出来,但压力测试中每笔都输出...
DPI 空函数指针:SV 编译通过,为什么一运行就 fatal
仿真器能够加载设计,却在 UVM 初始化时报告 Null foreign fun...
验证计划与测试计划:验什么、怎么验与需求追溯
verification plan、test plan、coverage mod...
SystemVerilog class 里的 task 怎么驱动信号:automatic、ref 与非阻塞赋值
想在 driver 里写一个通用 task:把要驱动的信号作为参数传进去,tas...
UVM default_sequence:没有 get、没有 start,sequence 怎么跑起来
在 test 里只写了一行 uvm_config_db::set,没有任何地方调...
UVM RAL predict 被忽略:busy 状态、返回值与读清零字段
寄存器 A 有一个状态位:写寄存器 B 时被硬件置位,读 A 时被硬件清零。为了...
UVM RAL 存储建模:uvm_mem 的参数与 add_mem 基地址
寄存器模型不只描述寄存器,也可以描述存储空间。照着示例搭模型时,常会遇到看不懂的...
object 实例 override 不生效:create 上下文与工厂诊断
同样的实例覆盖规则,agent 能替换,配置 object 却总是原类型。先比较...
RAL 覆盖率一直为零:构建、使能、采样与镜像时机
寄存器模型已经有 covergroup,波形也有读写,覆盖率却一直是零。这里至少...
信号每 50 拍变化一次:stable、changed 与精确周期
“50 拍后值变了”“50 拍内至少变一次”和“恰好每 50 拍变化一次”,是三...
函数返回动态数组:typedef、位宽、端序与复制语义
把一组 256 位 word 拆成字节流,函数的返回类型怎么声明?语法上用 ty...
关联数组报 XMRE:索引类型、first/next 与空元素
代码在关联数组 first() 的位置报 Cross-module refere...
OVM 到 UVM:改名前缀之外,还要迁哪些契约
把 ovm_ 全部替换成 uvm_,工程能编译,就算迁移完成了吗?这通常只解决了...
下拉电阻怎么验:weak 驱动、Z 释放与 net 决议
验证输入引脚的可控下拉,不能在 class 中写 pin = weak1。wea...
SystemVerilog 约束写在哪里才生效:归属、继承与同名覆盖
事务类里 a1、a2、a3 各有一个分布约束,env 负责创建并随机化这个对象...
UVM uvm_do 系列宏:with、on 与展开顺序
uvm_do、uvm_do_with、uvm_do_on、uvm_do_on_w...
config_db 里到底有什么:dump、trace 与使用审计
set 明明执行了,get 却失败;或者 get 成功,拿到的值不是预期。遇到这...
uvm_sequence_item 与 uvm_transaction:数据之外的路由信息
自定义事务类应该继承 uvm_object、uvm_transaction,还是...
断言失败如何计入 UVM_ERROR:动作块与采样值
波形和仿真器日志已经显示 assertion failed,UVM Report...
uvm_hdl_force 与原生 force:字符串路径和表达式跟随
同一个内部信号,静态 force 能生效,换成 uvm_hdl_force 却失...
sequence 怎么 start:显式编排、发送握手与 req 复用
sequence 的 start、item 的 start_item,以及 uv...
谁的 objection 没 drop:trace、来源计数与等待链
仿真时钟继续运行,所有激励看起来都发完了,测试却不结束。先确认当前卡在哪个阶段...
cast、clone 与 copy:类型转换不等于对象快照
scoreboard 把 transaction 存进队列,过一会儿发现队列里的...
RAL 访问卡住:reg2bus 之后,item 为什么没到 driver
RAL 前几笔访问正常,随后某次 read 一直不返回。adapter.reg2...
covergroup.sample 到底采了什么:旧值、X 与零命中
coverpoint 已经为 b=0 建了 bin,回归跑完却没有命中。先别调...
UVM 时钟怎么产生:interface 生成波形与 wait/if 零延时陷阱
想把时钟生成做成一个可配置、可复用的组件:周期、占空比、抖动可调,仿真中还能随时...
SystemVerilog $cast 什么时候成功:继承链与实际对象类型
在 VIP 的事务类之上派生出自己的类,新增字段,再通过 analysis 通道...
SystemVerilog clocking block:#1step、#0 与采样一致性
clocking block 改了一个 skew,比较结果就差了一拍;monit...
UVM in_order_comparator 怎么工作:顺序比较与句柄复用陷阱
UVM 自带的 uvm_in_order_comparator 用起来很简单:期...
forever 为什么会停:join_none、objection 与 phase 终止
run_phase 的 forever 阻塞在 FIFO.get 上,没有 br...
SVA 第二次边沿后检查 stable:匹配范围与持续时间
想在 a 的第二次下降沿检查 dist_value 稳定,却在第一次下降沿就失败...
功能覆盖率放哪里:采样语义、独立 collector 与跨接口关联
monitor、scoreboard、subscriber 都能拿到 trans...
TMAFTC 报在 uvm_registry:顺着工厂宏查构造参数
编译器报 Too many arguments to function/task...
APB 读回 0:在完成沿采样,而不是随手多等一拍
APB 波形上 PRDATA 明明正确,scoreboard 收到的却是 0 或...
UVM 事务录制:stream、字段与仿真器后端怎么排查
波形里能看见总线信号,却看不到 UVM transaction;或者能看见事务条...
reset 时 stop_sequences:注册范围、在途 item 与重启
叶子 sequencer 已经处理完一个 item,虚拟 sequence 也回...
UVM driver 和 monitor 要不要连接:独立观测与 passive agent
搭好 agent 里的 driver、sequencer、monitor 之后...
scoreboard 比较两路数据:不要串行 get,分清参考模型与配对
scoreboard 里放两个 analysis FIFO,一个收写事务、一个收...
UVM RAL 后门访问:peek/poke、HDL 路径与仿真器权限
寄存器模型的后门访问不经过总线,直接通过 HDL 路径读写 DUT 内部的寄存器...
uvm_reg_hw_reset_seq 报复位值不匹配:set_reset 与跳过标志
运行内置的 uvm_reg_hw_reset_seq 检查复位值时,某个寄存器报...
UVM report_phase 判定 PASS/FAIL:为什么失败时它不执行
在 report_phase 里统计 error 数量、打印 TEST PASS...
能在 monitor 里读寄存器吗:get、read、peek 的区别
中断 monitor 想知道中断有没有被屏蔽,于是在 monitor 的循环里调...
UVM sequence 之间怎么加延时:时序属于 driver
DUT 收到一个触发后要处理很长时间(例如几十万个时钟周期),testbench...
UVM 按 ID 降级报告:规则优先级与作用范围
VIP 报出一个已确认可以接受的协议告警,但它被标成 UVM_ERROR,导致整...
covergroup 多实例:内嵌声明、独立类型与采样方式
一个 coverage collector 同时统计 TX 和 RX,想把类中声...
import 了 uvm_pkg,为什么还要 include uvm_macros.svh
uvm_driver 能识别,但 ` uvm_info ` 或 uvm_comp...
UVM 看门狗:区分正常空闲、没有进展与测试完成
回归挂住时,最浪费时间的情况是:仿真时钟还在跑,接口也有零星跳变,但测试永远不结...
driver 报 seq_item_port 方法找不到:先查端口类型
在 driver 中调用 get_next_item(),工具却提示方法不存在或...
多总线 RAL:子 map、根 map 与 sequencer 绑定
每个寄存器子块都绑定了自己的 sequencer 和 adapter,寄存器访问...
monitor 如何反馈给 sequence:passive 观测与事务同步
系统级测试里,B 接口只是 passive 观测,却要根据 B 收到的事务在 A...
memory 地址错位怎么验:别名、完全对调与前后门交叉
向地址 0x20 写数据,再从 0x20 读回,结果完全一致,就能证明地址译码正...
bind interface:静态探针、端口连接与 virtual interface
想从 UVM monitor 观察 DUT 子模块内部信号,又不想修改 RTL...
run_test 后为什么不打印拓扑:执行流与组件树时机
在 top 的 initial 中先 run_test(),下一行再 print...
UVM 新手平台不工作:复位、write 位置、采样相位与日志顺序
第一次自己搭完整的 UVM 平台,最常见的感受是“什么都写了,但就是不工作”:s...
SystemVerilog 阻塞与非阻塞:driver 和 monitor 为什么不同
“driver 里用非阻塞赋值驱动信号,monitor 里用阻塞赋值采样”是 U...
UVM 多个 agent 还是多个 sequence:按物理接口决定
想从多个来源同时给 DUT 发激励时,很多人的第一反应是“多建几个 agent”...
把其他方法学的 VIP 接入 UVM:包装、转换与 phase 协调
项目里常常有用其他方法学(例如 VMM 或早期 OVM)写成的 VIP,又没有时...
UVM 报类型不可见:package 与 import 的作用域
编译时报 “Token 'uvm_component' should be a...
UVM 环境里怎么记录波形:为什么不该在 test 里 dump
想在 UVM test 里调用 $dumpvars(1, top.dut.cor...
UVM 编译报错:package、import 与 include 怎么排查
“找不到 package”和“extends uvm_driver 处出现 un...
config_db 传数组和队列:类型、快照与共享句柄
test 中准备了一个命令队列,希望下发给 agent,却在 uvm_confi...
RAL 第一次读回 0:沿返回链路排查镜像问题
寄存器写入正常,波形上的读数据也正确,RAL 的第一次 read() 却返回 0...
UVM 参数能运行时修改吗:特化类型与工厂选择
希望用 cfg.width 决定 my_driver#(cfg.width) 的...
UVM 空句柄排查:从报错表达式找到第一个 null
Null object access 不是一种只要“补个 new”就能解决的错误...
super.build_phase 必须写吗:继承调用与配置行为
重写 build_phase 时,常见模板第一行都是 super.build_p...
UVM 字符串匹配:正则、glob 与返回值的三个坑
用 uvm_re_match() 判断名字是否匹配,却发现条件分支总是反着走;或...
sequence 要不要拿 virtual interface:职责与 reactive 建模
“sequence 需要等 DUT 请求,再生成响应,要不要把 vif 传进去?...
UVM phase jumping:先把并行流程与复位恢复分清
两个 agent 的 main 流程长短不同,希望各自做完后进入自己的收尾,是否...
UVM config_db 实战:vif 传递、配置对象与常见翻车
会背 uvm_config_db 的 API,不等于能用对。新环境里最常见的报错...
UVM override 之后为什么访问不到派生类成员
用 set_type_override_by_type 把基类 sequence...
UVM 参数化组件与工厂:param_utils 与多实例配置
参数化组件在 UVM 里很常见,例如按位宽参数化的 agent。但围绕它有两个高...
从命令行传参数:宏、parameter 与 plusarg 的生效阶段
“编译一次,启动仿真时从命令行改位宽”是很常见的愿望。但 parameter、p...
乱序 DUT 的验证:driver 流水线与 scoreboard 配对
当 DUT 允许乱序完成(out-of-order completion),例如...
UVM 两个 agent 之间怎么通信:FIFO、reactive sequence 与 uvm_event
典型场景:agent1 从 DUT 收到一个包之后,agent2 要根据这个包的...
UVM 上层如何约束下层 sequence:空句柄错误与三种正确做法
在 virtual sequence 里写 uvm_do_on_with(sub...
UVM 遇到 UVM_ERROR 就停:quit count、action 与 catcher
回归测试里,一旦出现 UVM_ERROR,后面的仿真往往已经没有意义,继续跑只是...
UVM get_response:响应通路、set_id_info 与常见死锁
get_response(rsp) 是 sequence 侧获取事务执行结果的方...
UVM analysis 链路与 tlm_analysis_fifo:为什么 write 没被调用
monitor 把事务发给 scoreboard,scoreboard 内部再按...
在 Questa / ModelSim 上跑 UVM:编译流程与常见报错
第一次在仿真器上把 UVM 跑起来,最常见的问题不是 UVM 本身,而是工具链...
UVM RAL:reg2bus 与 bus2reg 的调用时机和次数
写自定义 adapter 时,经常会观察到:明明只做了一次 reg.write(...
数组元素互不相同:unique 约束与 shuffle 怎么选
「让数组里的元素互不相同」是约束随机最常见的题型之一。它看起来只有一种写法,实际...
UVM config_db 与 resource_db:底层、优先级与选型
uvm_config_db 和 uvm_resource_db 的 set /...
UVM p_sequencer 与 m_sequencer:区别与 sequence 取配置
在 sequence 里能看到两个 sequencer 句柄:m_sequenc...
SystemVerilog @event 与 wait(triggered):竞态与同步
等待一个事件有两种常见写法:@(e) 和 wait(e.triggered)。一...
异步 FIFO 验证:agent 划分、悲观标志与检查分工
异步 FIFO 的读写两侧工作在不同时钟域,验证时最常见的三个问题是:用一个 a...
UVM 中 force DUT 内部信号:语义与规范结构
故障注入、错误处理路径覆盖、跳过冗长的初始化,都可能需要在 UVM 环境里改变...
UVM class 访问 DUT 信号:为什么报错、该怎么做
在 UVM test 里直接写 top.u_dut.sig 访问 DUT 信号...
UVM object 与 component:生命周期才是核心区别
uvm_object 和 uvm_component 的区别是 UVM 入门的第...
UVM 报 not registered with factory:排查清单
运行 test 时报“Cannot create a component of...
UVM build_phase 调用顺序:哪些有保证、哪些没有
“build_phase 是谁调用的?为什么 build 是 top-down...
UVM 仿真怎么结束:objection、drain time 与排查
“UVM 仿真为什么不结束”是调试中最耗时间的问题之一。常见的错误做法是到处 r...
UVM 怎么停掉正在运行的 sequence
一个常见场景:test 里并行运行两条 sequence,一条是持续产生背景流量...
CMN:节点、一致性与验证思路
CMN 面试的重点,是把请求如何找到 Home、Home 如何确定最新数据、系统...
UVM RAL:预测机制与镜像不匹配排查
RAL mismatch 的排查入口,是把 DUT 实际值、desired va...
低功耗:UPF 与 UVM 协同验证
低功耗验证要回答三个问题:电源架构和边界策略是否完整,掉电与恢复过程是否符合规格...
DV Python Scripting 面试题(3 题)
DV 岗位的 Python 面试题大多围绕「读日志、做统计、出报告」。这里三道题...
SystemVerilog 约束随机化面试题整理(25 题)
面试里约束随机化题目变化很多,但底层就是几类套路:控制取值范围、控制数组元素之间...
11 道 UVM / RTL 编码面试题(含参考答案)
11 道偏实战的 UVM / RTL 编码题,覆盖 factory、scoreb...
48 个面试中可复用的 RTL / TB 代码模版
面试手撕代码时,最常被要求写的 RTL 小模块和 TB 骨架都在这里:48 个可...
暂时没有找到文章
试试其他关键词,或看看全部知识分享。
