zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/-9-8/p/7479528.html
Copyright © 2011-2022 走看看