package
一
在每个library里边只能出现一个tb,冲掉。 所以可以新建一个library,命令vlog -sv class_inheritance.sv -work newlib来新建一个newlib。...
同名模块想区分,就是分别编译到不同library;library包含package,package也像一个单元,会默认编译到lib,默认编译到work(默认)的lib中。
pkg_a::packet_a; #域索引
package pkg_a;
class packet_a;
int p
endclass
typedef struct{
int data;
int command;
} struct_a;
int va = 1;
endpackage
package pkg_b;
class packet_b;
endclass
typedef struct{
int data;
int command;
} struct_b;
int vb = 1;
endpackage
module mod_a;
endmodule
module mod_b;
endmodule
module tb;
class packet_tb;
endclass
typedef struct{
int data;
int command;
} struct_tb;
class packet_a;
int tb_a;
endclass
class packet_b;
int tb_b;
pkg_a::packet_a; #域索引
二
package包!!!的概念,软件用得很多。
package是把相对应的,不管同名与否,相关的类型放到package里边为了复用。 模块/外部想要用变量/类型,可通过import/::索引符号来解决此问题。——软件,要懂的包。
可以定义在package的有类,结构体,方法。(模块,interface(if的使用更接近模块)也不能在package定义,在package里定义的类型是软件类型,是在软件里要使用到的类型,验证环境是拿软件来搭的,不管是SV还是UVM都是拿软件来搭的。 所以软件自然会用到类,只有对象在仿真一开始的时候就会例化,除了对象以外,其他都可以视为静态变量,句柄本身也可以是静态变量。 但是对象会要在仿真时候例化,但是向量,如int,字符串,数组等都可以是静态的。)
(验证环境理解软件的概念——软件是能在类里边能够声明的变量/类里边能够使用的类型;例如,在类里可以使用/例化类,可在类里例化一个新的类的对象;在类里也可声明结构体的变量;在类里也可以使用方法;在类里不能例化模块,interface不能在package里定义。)(interface既能用到验证环境里属于软件,即验证环境和硬件之间的媒介,还能做的是在硬件与硬件之间做接口。 所以interface就媒介来讲的话,处于软件和硬件之间,更贴近于硬件,定义interface和定义mlodule差不多。(模块可以例化模块,模块可以例化接口;但是接口可以例化接口,接口不能例化模块;接口if和模块mod只能单独定义,module里可以定义class类,但不能再定义module,各个module模块之间都是独立的,平铺的。 module里不能定义interface))
代码,手动敲,设断点。SV学好!!!UVM!!