Q31:哪些继承于component,哪些继承于object?
除了 driver、monitor、agent、scoreboard、env、test 之外全部继承于 uvm_object。
Q32:get_next_item()和 try_next_item()有什么区别?
- get_next_item() 是一个阻塞调用,直到存在可供驱动的 sequence item 为止,并返回指向 sequence item 的指针。
- try_next_item()是非阻塞调用,如果没有可供驱动的 sequence item,则返回空指针。
Q33:断言 and 和 intersect 区别。
- and:指的是两个序列具有相同的起始点,终点可以不同。
- Intersect 指的是两个序列具有相同的起始点和终点。
- Or 指的是两个序列只要满足一个就可以。
- Throughout 指的是满足前面要求才能执行后面的序列。
Q34: break、continue、return 的含义。return 之后,function里剩下的语句会执行吗?
- break语句:结束整个循环。
- continue语句:立即结束本次循环,继续执行下一次循环。
- return 语句:会终止函数的执行并返回函数的值(如果有返回值的话)。
- return 之后, function 里剩下的语句不能执行,其是终止函数的执行,并返回函数的值。
Q35:触发器和锁存器的区别。
触发器:时钟触发,同步控制。受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。
锁存器:由电平触发,非同步控制。在使能信号有效时锁存器相当于通路,在使能信号无效时锁存器保持输出状态。
锁存器对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;触发器则不易产生毛刺。
Q36:手画一个UVM验证平台。
Q37:怎么编写测试用例?
主要是编写 sequence,然后在 body 里面根据测试功能要求写相应的激励,然后再通过 reference model 和 scoreboard 判断功能是否实现。
Q38:如果有很多测试用例,如何让它们自动执行?
可以写脚本让它们自动执行,例如 makefile。
Q39:断言$past 的用法?
如:写 abcd 四个信号在时钟沿处监测,当 cd 同时为 1 时,在时钟的前两个周期要 ab 同时为 1 的断言。
Q40. 如何关闭约束?
- 通过 constraint_mode(0) 关闭默认范围的约束块,constraint_mode(1) 是打开约束。
- 可以用 soft 关键字修饰特定的约束语句,这样既可以让变量在一般的情况下取默认值,也可以直接给变量赋默认值范围外的取值。