不错的问题:学好验证的基本功,首先弄清楚以下几个问题!
1.SystemVerilog 有什么特点对验证有用 ?
2.你知道SV是怎么实现随机的嘛?(从随机的产生原理考虑)
3.mailbox 和queue 的区别,mailbox和VMM中的channel相比各自的优缺点是什么?
4.module进程和fork join进程的区别
5.testcase 和testbench 有什么差别和关系 (用较专业的语言回答)
在我们只顾学习技能的同时可能忽略了最基本的知识要点~我们不仅要会用,还要明白其中的原理。就以上几个基本问题啊,知道答案的同仁们都各抒己见,相互探讨,共同学习!希望看该帖的都能留言,既能挣钱又能学东西~
错误之处望高人指教,共同学习!
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。
mailbox和VMM中的channel相比各自的优缺点是什么?
这个问题谁给回答一下!
好好学习:
呵呵,长见识了!我不是做验证的,听几位交流,还是觉得不错啊@
惭愧,都没有听过
谢谢楼上的兄弟!
非常感谢楼上的朋友哦。
xiexie
不错 学习了
谢谢二楼的了
我也是,很多没有听过,郁闷。
对验证接触很少,不过看了大家的讨论,还是很有帮助
很不错啊,回头分析了VMM 的源码,再来这儿发飙;)
好贴 再顶 顶
謝謝,長了見識了.
学习了!
恩,将要学习验证,好好学习了
总觉得觉得SV很难学,对怎么学没有什么思路,学起来很乱,请大侠指点指点,谢谢
学语言不要从学他的语法入手,应该下载些用该语言写好的代码,然后运行,通过分析代码实现的功能来接触这门语言,遇到不会的语法,在对应有目的的去查,关键在用中学习,只语法搞得通懂,不会用到验证中,也是没用的~个人浅见,一家之言,只做参考!呵呵~
还没有做过验证方面的工作,不过验证最好是设计者与验证工作者合二为一,要不然话费时间太多
The VMM channel has several advantages over the SystemVerilog mailbox:
• Unlike mailboxes, channels are strongly typed which helps prevent coding errors.
• Channels allow flow control, so the put() method will block if the channel is full.
• A channel can have both high-water and low water marks to fine tune the interactions
between the producer and consumer. The get() method removes the transaction from
the end of the channel, while peek() give you a handle to it without removal. Both
block if the channel is empty.
• The output of a channel can be replicated using the tee() method
和verilog相比,随机向量和更多的数据结构是使我感觉到有必要用systemverilog的最大因素。
学习了!
好难哦~
学习,感谢!
比较不错的总结哦,特别是fork-join三个说的非常到位
佩服 小编chenghaibo !