SV中的module,interface,program,checker,都提供declaration空間,內部定義都local當前的那個scope,相互之間的building block不影響,不識別。
package也可以提供一個declaration的空間,可以被其他的building block共享,Package declaration可以被import到其他的building block中,或者package中。
(package中不能再包含module,interface,program,checker等帶有declare屬性的聲明)
package Compkg;
endpackage
package的使用:
1) pkg中的類,function的引用,通過class操作符,"::",通過import關鍵字,可以在當前scope中,直接引用pkg中的類型聲明和變量。
import有兩種方式,隱式的全部引用,import pkg::*,顯示的引用,import pkg::type_c。
2) enum的引用,enum literal的聲明需要單獨import,typedef { True = 0, False = 1} e_type; True與False需要顯示引用或者::*引用。
3) pkg的import只是在當前scope中有效,外邊的scope是看不到的,下層block的local var可以在聲明相同的變量。
package p;
int x;
endpackage
module top;
import p::*
if(1) begin:b
initial x = 1; //當前使用的是p::x變量
int x;
initial x = 1; //當前使用的是top.b.x變量
end
int x; //err,同一個scope中與pkg p::x變量名相同,此時import pkg q::x,同樣報錯。
endmodule
所以pkg的import一般放在module模塊內的首行,應該盡量避免放在unit scope中,沒有意思。
4) export,主要應用在pkg的級聯中,目標是pkg3可以通過import pkg2看到pkg1中的聲明;
export *::*,並不能全部隱式的export出去。只是export pkg2中使用到的。
package p1; package p2; package
int x,y; import p1::*; import p2::*;
export p1::x; int c = x; //其中的x等同於package p1中的x。
endpackage endpackage endpackage
SV中的config,在一個design中區分同一個module名。比較復雜的一個應用
config cfg1;
design rtllib.top;
default liblist rtllib;
instance top.a2 liblist gatelib;
endconfig
也可以用來set不同的paramter config
config cfg1;
design rtllib.top;
instance top use #(.WIDTH(32));
instance top.a1 use #(.W(top.WIDTH));
endconfig
SV中定義的compile,是對SV代碼的編譯過程,主要檢查語法錯誤,結果可能會保存在一個中間格式中,或者直接進行elaborate
elabration,是將所以的instance bind到top上的一個過程,主要包括expanding instance,computing paramter value,resolving hier names,net connection。
compile的顯示調用空間是$unit,design top的顯示調用空間是$root。$unit與$root本質上是一樣的,之前的叫法是$root
VCS對uvm有一個內嵌式的支持,uvm的庫被放在$VCS_HOME/etc/uvm-1.2中,可以在VCS編譯過程中,顯示指明-ntb_opts uvm-1.2 options來使用uvm。
vcs -sverilog -ntb_opts uvm-1.2 (vlogan不支持直接ntb_opts)
-top 指定snapshot的頂層
-kdb 可以整合vcs的DB到verdi的db,直接通過verdi -ssf novas.fsdb打開verdi的工程
-lca 表示使用vcs的用戶限制的功能
VCS中dump fsdb的波形,之前需要添加novas.tab和pli.a的文件路徑,-P $VERDI_LIB/novas.tab $VERDI_LIB/pli.a
現在
1)設置$NOVAS_HOME的值,
2)在code中調用$fsdbDumpvars的task,
3)vcs編譯中增加-debug_access+r的權限
或者直接增加-fsdb
使用verdi進行gui調試,-verdi或者-gui=verdi選項
后啟動verdi命令:
verdi -ssf <fsdb_file> verdi -simflow -dbdir <path> -top <top_name>