这几天,看来前4章,颇有收获,第四章还有一点没有看完,关于config database的部分。
前3章的example在OVM2.1版本下使用cadence IUS8.20-s20版本,完全可以编译运行,第3章第6个例子书本上没有讲解,不过看source code很容易理解。
第四章的第一个例子就编译错误。经过检查,发现cadence IUS不支持直接对queue进行赋值,必须使用push_front()调用,修改了 .\04_OVM_mechanics\utils\traverse.svh文件,将以下语句:
q = { node };
lq = { 0 };
修改成
q.push_front( node );
lq.push_front(0);
重新编译运行, IUS下就可以正确抛出结果了。
这几天的收获:
1. 最关键的class就是ovm_component, 此class已经他的子孙class产生的instances都会自动记录一个hierarchy层次结构,内建一个最top的root, 就是ovm_top. 所有的ovm_component instance都可以追溯到ovm_top.
2. TLM的思想使用了port和export的概念,利用了组合和继承的方式完成了put_port/put_export; get_port/get_export的连接,第三章的简单实例,对我帮助很大。
本身,我对systemverilog还不是很熟悉,工作中还是用verilog,但是有过C++的一点点基础,学习他难度并不大,就是需要practise. 之前听说Vera是借鉴java语言,而system verilog是借鉴Vera, 所以systemverilog对OOP的语言扩充更多的是借鉴java. 比如关键字extend, 不能多重继承,使用Interface等,感觉和java几乎一样。不过我对java不是很熟悉,也不用为了学习systemverilog去研究java. 需要了解的是systemverilog中对object的创建,静态变量,和临时变量分别用什么方式区分。后续几天顺便研究一下。
继续看第四章关于configuration database这部分,暂时没有完全理解他的好处。