【System Verilog】package用法

  1. 功能:package(包)提供了共享parameter、data、type、task、function、sequence、assertion以及checker声明的机制
  2. 使用范围:在module、program、interface中引用package
  3. 使用限制:
    • 不允许出现reg,wire信号

    • 不允许出现hierarchy引用item(例如tb.dut…)

    • 不允许包含module、interface

    • 不允许访问定义在unit编译单元里的item(即定义在全局空间的类型在package内无法访问,但interface编译后在package内的class里是可以识别的)

    • 注:module/interface区别于package,可以看见unit编译单元定义的全局item;所以全局import uvm_pkg:xxx*后在module和interface里就不需要在import了,但是在package里还需要再import uvm_pkg:xxx

  4. 使用方法:
    • 泛式引用:import xxx_pkg::*
    • 指定引用:import xxx_pkg::item
    • 二级引用:export xxx_pkg::*
  5. 作用域:
    • 如果是泛式引用,则会先在本身的module等内寻找,找不到才会去pkg内寻找;即module等可以定义和pkg相同的item
    • 如果是指定引用,则该类型直接在module等内部调用,此时在module等中不应该出现和pkg内相同名字的类型定义
    • import xxx_pkg::*如果在module 外import,则为全局性的,编译后会放在$unit编译单元中;如果在module 内import,则作用域仅在该module内
    • import操作使得类型可见的域只是调用该import时当前的域(eg:在package a_pkg中import了package b_pkg::type_b,那么在module1中import a_pkg::*时,无法引用到type_b,可通过在a_pkg内export b_pkg::type_b二次定义解决)
    • 注:即使在unit空间中import也不能跨域调用(eg:在module外import a_pkg,a_pkg中引用了b_pkg,那么module中是看不到b_pkg的)
  6. 使用建议:
    • 不在unit空间进行任何声明,所有共享的声明都要在 package中。需要时,可以将package导入到unit中

    • std是sv内部自定义的package(eg:std::method)

  7. import和include的区别:
    • `include是一个预处理语句,`include在import之前执行
    • `include将文件中所有文本原样插入包含的文件中
    • import不会复制文本内容。但是import可将package中内容引入import语句所在的作用域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值