• 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>

  • 相关阅读:
    从OkHttp的源码来看 HTTP
    从Retrofit的源码来看 HTTP
    登录授权、TCP/IP、HTTPS
    编码、加密、Hash
    java获取当前系统时间
    mybatis自动生成
    rabbitMQ权限相关命令
    在Spring Boot中使用Spring Security实现权限控制
    学习sharding-jdbc 分库分表扩展框架
    Jenkins的关闭、重启
  • 原文地址:https://www.cnblogs.com/-9-8/p/7479528.html
Copyright © 2020-2023  润新知