0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemVerilog中的package和`include有什么不同?

芯片验证工程师 来源:芯片验证工程师 作者:芯片验证工程师 2022-11-14 10:53 次阅读

肯定很多人会问为什么有的地方使用package,有的地方使用`include,二者是不是等价的呢?

答案是NO,二者并不等价,原因就要涉及System Verilog命名空间了。

假设你有2个class “A”和“B” ,如下:

class A;
 int i;
 endclass : A
 
 class B;
 int i;
endclass : B

SystemVerilog会认为这两个class是不同的类型,原因是它们的名称不同,即使这两个class的内容是一模一样的。

因为Systemverilog中名称还表示着各种定义声明的命名空间。

所以,当你在一个package 中声明一个class,那么这个package的名称就隐式地成为class名称的前缀。

package P:

 package P;
 class A;
 int i;
 endclass : A
 A a1;
 endpackage : P

package Q:

package Q;
 class A;
 int i;
 endclass : A
 A a1;
endpackage : Q

所以,此时会有2个class A定义(P::A和Q::A), 并且P::a1 和Q::a1的类型并不兼容。

如果将将上述代码使用`include改写成:

class A;
 int i;
 endclass : A

 package P;
 `include "A.sv"
 A a1;
 endpackage : P
 
 package Q;
 `include "A.sv"
 A a1;
 endpackage : Q

因为`include只是简单的复制粘贴,所以P::a1和Q::a1仍然是不兼容的数据类型。若修改成下述形式:

package P;
 class A;
 int i;
 endclass : A
 endpackage : P
 
 package R;
 import P::A;
 A a1;
 endpackage : R
 
 package S;
 import P::A;
 A a1;
 endpackage : S

此时只有一个地方存在class “A” 的定义(package “P”),然后我们在package R和package S中import package A,此时在package R和package S中看到的class A就是同一个数据类型了。

这也是`include和package的主要区别。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1355

    浏览量

    110836
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    37214
  • Package
    +关注

    关注

    0

    文章

    26

    浏览量

    10608

原文标题:SystemVerilog中的package和`include有什么不同?

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SystemVerilog的Virtual Methods

    SystemVerilog多态能够工作的前提是父类的方法被声明为virtual的。
    发表于 11-28 11:12 766次阅读

    SystemVerilog的“const”类属性

    SystemVerilog可以将类属性声明为常量,即“只读”。目的就是希望,别人可以读但是不能修改它的值。
    发表于 11-29 10:25 2219次阅读

    看一下SystemVerilogpackage的使用方法与注意事项

    谈到package,用过VHDL的工程师并不陌生。实际上,SystemVerilogpackage正是从VHDL引入的,以进一步增强其在系统级的描述能力。
    的头像 发表于 10-07 11:33 3001次阅读
    看一下<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b><b class='flag-5'>package</b>的使用方法与注意事项

    SystemVerilog的联合(union)介绍

    SystemVerilog ,联合只是信号,可通过不同名称和纵横比来加以引用。
    的头像 发表于 10-08 15:45 1588次阅读
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的联合(union)介绍

    请问Systemverilog如何使用VHDL的package?

    现在需要使用system verilog写代码,但是想复用之前VHDL的package,里面有写的现成的function等,请问如何调用呢。总是报错说找不到_pkg
    发表于 03-12 15:37

    SystemVerilog哪些标准?

    SystemVerilog哪些标准?
    发表于 06-21 08:09

    SystemVerilog for Design(Secon

    Chapter 1: Introduction to SystemVerilogChapter 2: SystemVerilog Declaration SpacesExample 2-1: A
    发表于 07-22 14:45 0次下载

    openwrt下面创建package之Makefile模版

    ( eep )的。编译后的的内容会出现的这个系统。编译自己的package, 把下面M akefile 的eep 换成自己目录名字即可
    发表于 09-17 11:01 0次下载
    openwrt下面创建<b class='flag-5'>package</b>之Makefile模版

    SystemVerilog可以嵌套的数据结构

    SystemVerilog除了数组、队列和关联数组等数据结构,这些数据结构还可以嵌套。
    的头像 发表于 11-03 09:59 1733次阅读

    SystemVerilogpackage

    SystemVerilog packages提供了对于许多不同数据类型的封装,包括变量、task、function、assertion等等,以至于可以在多个module中共享。
    的头像 发表于 11-07 09:44 1352次阅读

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 2654次阅读

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄赋值和对象复制的概念是区别的。
    的头像 发表于 11-21 10:32 1000次阅读

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗语)是一个多个进程之间同步的机制之一,这里需要同步的原因是这多个进程共享某些资源。
    的头像 发表于 12-12 09:50 3519次阅读

    Systemverilog的Driving Strength讲解

    systemverilog,net用于对电路连线进行建模,driving strength(驱动强度)可以让net变量值的建模更加精确。
    的头像 发表于 06-14 15:50 1767次阅读
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength讲解

    SystemVerilog在硬件设计部分哪些优势

    Language,硬件描述语言),而SystemVerilog则是HDVL(Hardware Design and Verification Language,硬件设计与验证语言)。由此可见,SystemVerilog也是可以用于硬件设计的,也是
    的头像 发表于 10-19 11:19 1480次阅读
    <b class='flag-5'>SystemVerilog</b>在硬件设计部分<b class='flag-5'>有</b>哪些优势