sv命令空間 package


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM