学好验证的基本功

错误之处望高人指教,共同学习!

1.SystemVerilog 有什么特点对验证有用 ?  
        1.1 SV的event schedule机制:dut/design在active area执行,testbench/program在reactive area执行。这样能最大程度地避免design与testbench在sampling/driving data时产生的race。
        1.2 SV提供了新的data type、struct,使之更适用于写验证code,比如struct、enum、union等抽象data type,引入了class的机制支持重用和封装。
        1.3 SV的Coverage Driven Constrained Random Stimulus test方法能极大地提高验证效率
        1.4 SV的interface使dut/testbench之间透明传递信息更为方便
        1.5 SV的VMM,使得验证可以遵从统一的平台,使复杂验证环境变得容易、高效

2.你知道SV是怎么实现随机的嘛?(从随机的产生原理考虑)  
先定义一个rand 或randc变量(max 32bit),对其加以合理的constraint(比如range),在所属的class 实例化或者在适当的时机调用randomization,实现随机。

3.mailbox 和queue 的区别,mailbox和VMM中的channel相比各自的优缺点是什么?  
mailbox是个FIFO,先定义、后创建(new),才可使用。主要用于process间communication。例如:数据发送进程和数据接收进程之间。发送进程把data放入mailbox,等待接收进程将mailbox
中的data取走,之后发送进程再接着发送下一个data给mailbox。


4.module进程和fork join进程的区别
module进程里包含着数个顺序进程(用blocking语句间隔)、并行进程(nonblocking、initial 、always、或 fork join)。
fork join与module内fork join后面的进程的关系:
module

。。。

fork

proc1;
proc2;
proc3;

join // or join any ,join none

proc4;
。。。
endmodule

fork join:proc1~3全部执行完,才开始执行module的proc4;
fork join any:proc1~3中任一进程执行完,就开始执行module的proc4;proc1~3中未执行完的进程继续后台执行。
fork join none:proc1~3与module的proc4并行执行(同时开始执行)。

5.testcase 和testbench 有什么差别和关系 (用较专业的语言回答)
testbench是整体而言,testbench每测试dut/design一个item/feature就叫一个testcase。

你可能感兴趣的:(学好验证的基本功)