lab0
- 查看class中实例:
方法一:打开local窗口,会显示实例名和**@类名(实例类型)@创建该类型对象的次数**。要在创建对象实例后设置断点,不让仿真结束,不然就看不到了。
方法二:view→class browser→class instances(会打开一个class instances窗口)→transcript窗口,仿真语句后加上“ -classdebug”,回车→sim窗口点击实例所在类便会在class instances窗口显示。也要设断点。
- 查看对象的继承树结构:
view→class browser→class instances→class tree→sim(会打开一个class tree窗口)
- `include和import的区别:
`include将文件中所有文本原样插入包含的文件中。这是一个预处理语句,
`include在import之前执行。他的主要作用就是在package中平铺其他文件,从而在编译时能够将多个文件中定义的类置于这个包中,形成一种逻辑上的包含关系。
import不会复制文本内容。但是import可package中内容引入import语句所在的作用域,以帮助编译器能够识别被引用的类,并共享数据。
在我们的TB中,include通常分为以下几类:
1)package内的include文件:在package内,前面是import library,比如“import uvm_pkg:😗”,紧接着即使include文件,通常会把本目录下相关的文件都include进来,比如virtual sequence文件,testcase文件。
2)package外的include文件:这种用法在我们现在的环境中使用不多,目前最常用的是include interface文件,比如,在xxx_env_pkg文件的最开头,include “xxx_if.sv”
3)为了文件管理方法,将部分code写到一个单独的文件中,然后在主文件中直接include进来,相当于将多个文件合并成一个文件。比如,一个subsys要用到很多API,而这些API共有A, B,C三类,分别由3个人完成,则可以写成api_a.sv, api_b.sv, api_c.sv,在l0_basic_vseq.sv中,将这三个文件include进来。
- uvm_test_inst中:
run -all后,uvm会将所有打印消息按照它们的**“重要程度”和“id”**打印信息总结报告。
这里代码中有4个【UVM_TOP】,总结报告中却只有3个:因为run_phase中drop_objection执行之后,没有其他的phase进行raise_objection,故运行便到此结束,没有执行第4个含有【UVM_TOP】的打印信息。
raise_objection要在任何延时语句之前声明;且与drop_objection成对使用。因为进入到一个phase中时,首先先检查有没有“举手”,若该phase中没有“举手”,那么会直接运行下一个phase,如果没有其他phase,那么仿真会结束。