基础知识题
01 mailbox 和queue之间有什么区别?
- queue(队列)是一个可变大小的、有序的元素集合,类似于自动增长和收缩的一维数组。队列可用于建模先进先出缓冲或者先进后出缓冲。
- mailbox (邮箱)是一种允许在进程之间交换消息的通信机制。数据在一个进程中发送给mailbox ,并由另一个进程接收。
02 如何使用mailbox数据结构来构建scoreboard?
在SV中,可以使用mailbox 从不同的组件获取数据并比较结果。
class Scoreboard;
mailbox drvr2sb;
mailbox rcvr2sb;
function new(mailbox drvr2sb,mailbox rcvr2sb);
this.drvr2sb = drvr2sb;
this.rcvr2sb = rcvr2sb;
endfunction:new
task start();
packet pkt_rcv,pkt_exp;
forever
begin
rcvr2sb.get(pkt_rcv);
$display(" %0d : Scorebooard : Scoreboard received a packet from receiver ",$time);
drvr2sb.get(pkt_exp);
if(pkt_rcv.compare(pkt_exp))
$display(" %0d : Scoreboardd :Packet Matched ",$time);
else
$root.error++;
end
endtask : start
endclass
03 链表比队列有什么优势?
队列有一定的顺序,很难在队列中插入数据,但是可以轻松地将数据插入到链表中的任何位置。
04 $cast有什么用?
使用“cast”可以将数据赋值给不同数据类型的变量。SystemVerilog 增加了两种类型的casting。静态cast和动态cast。
//Static casting
e.g. i = int '(10.0-0.1); // static cast convert real to integer
// Dynamic casting
function int $cast( singular dest_var, singular source_exp );
or
task $cast( singular dest_var, singular source_exp );
e.g. $cast( col, 2 + 3 );
情景设计题
01 如果设计工程师和验证工程师在Testbench BFM(总线功能模型)和RTL(DUT)中犯同样的错误怎么办?如何能够检测到错误呢?
1、代码检视和协议checker
2、在多个层次的验证环境中验证这个BFM。比如上下游模块级验证平台和系统级验证平台等等。这些验证环境都是由不同的人开发的,所以应该比较容易发现这个问题
3、当然了,最坏情况是由客户发现这个问题。如果客户发现不了呢,这可能就不是个问题了。
02 如果客户(FPGA测试、硅后测试或者量产后)出现了故障,如何调试?如何防止这个问题再次发生呢?
1、首先,应该根据故障的现象尝试在自己的验证环境中复现这个问题。
2、尝试获取客户的场景向量,这样就可以注入相同的测试向量来在验证环境中复现问题。
3、如果确认是芯片硬件的问题,需要进行修复。然后放置新的断言或测试用例来保证问题正确修复并且没有引入新的问题。这个用例需要添加到回归列表中,后面在设计修改时都要执行这个测试。
END
作者:验证哥布林
原文链接:
https://mp.weixin.qq.com/s/JJIKEQfShf05MwxFRjhd0g
https://mp.weixin.qq.com/s/1T_jhTdIROVkYSFdvzrqJQ
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏