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

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

3天内不再提示

$unit声明空间

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-06-21 09:40 次阅读
$unit是一个危险的共享名称空间,充满危险。它的使用会导致设计难以编译和维护。
下列unit代表$unit
笔记

在将包添加到SystemVerilog标准之前,SV提供了一种不同的机制来创建多个模块共享的定义。这个机制是一个名为unit的伪全局名称空间,也称unit 编译单元或声明空间。声明空间之外的任何声明都在unit声明空间中。在下面的示例中,bool_t的定义在两个模块之外,因此在unit声明空间中。

bc813bc0-f0fa-11ec-ba43-dac502259ad0.png

unit声明空间可以包含与包相同类型的用户定义,并且具有相同的综合限制。然而,与包不同的是,unit声明空间可能导致设计代码难以维护,EDA也难以编译。使用unit的一些危险包括

以unit声明空间的定义可能分散在许多文件中,使代码维护和代码重用成为一场噩梦,当引用包中用户自定义类型、任务、函数或其他标识符名称时,相对容易找到和维护标识符名称的定义。总是有一个显式的包引用或包导入语句来显示在哪里可以找到定义。当在unit声明空间中定义了用户自定义类型、任务、函数或其他标识符时,该定义可以位于构成设计和验证测试台源代码的任何文件、任何目录、任何服务器中。定位、维护和重新定义是困难的。

当unit声明空间中的定义位于多个文件中时,必须按照特定的顺序编译这些文件。

SystemVerilog要求在引用定义之前对其进行编译。当unit声明分散在许多文件中时,按照正确的顺序编译所有文件可能会很困难,甚至是不可能的。

更改unit定义需要重新编译所有源代码文件。

对unit声明空间中定义的任何更改都需要重新编译构成设计和验证测试台的所有源代码,因为任何地方的任何文件都可以无需导入地使用该定义。许多软件工具不会强制要求重新编译所有文件,但如果不重新编译,设计模块最终可能使用过时的定义。

对于仿真和综合,unit声明空间可以是相同,但通常是不同的。

编译器的每次调用都会启动一个新的unit声明空间,该空间不共享其他unit声明空间中的声明。许多SystemVerilog仿真器一起编译多个文件。这些工具将看到一个unit空间。一个文件中的unit定义对于单个编译中的任何后续文件都是可见的。大多数SystemVerilog综合编译器和一些仿真器都支持单独的文件编译,每个文件都可以独立编译。这些工具将看到几个断开连接的unit声明空间。一个文件中的unit定义对任何其他文件都不可见。

很容易出现定义不同的重复标识符名称。

在SystemVerilog中,在同一名称空间中多次定义同一名称是非法的。如果一个文件在unit声明空间中定义了bool_t用户自定义类型,而另一个文件在unit声明空间中也定义了bool_t用户自定义类型,那么这两个文件永远不能一起编译,因为这两个定义最终会在相同的unit空间中结束。为了避免这种冲突,工程师必须使用’define 和 ’ifdef添加条件编译指令,以便只编译编译器遇到的第一个定义。

包可以导入到unit中,但其危害与直接在unit中定义的危害相同。此外,必须注意不要将同一个包多次导入同一unit声明空间,这是非法的。

避免像Bubonic plague一样使用$unit!相反,使用包来共享定义。
包避免了$unit的所有危害,包提供了一个易于维护和重用的受控声明空间。
最佳实践指南4-2

bc9883b6-f0fa-11ec-ba43-dac502259ad0.jpg

审核编辑 :李倩

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

    关注

    7

    文章

    2535

    浏览量

    46754
  • Verilog
    +关注

    关注

    28

    文章

    1328

    浏览量

    109502
  • 编译
    +关注

    关注

    0

    文章

    628

    浏览量

    32504

原文标题:SystemVerilog(十二)-$unit声明空间

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TÜV南德助蓝赛明发布LED路灯环境产品声明 为其颁发ZHAGA-D4I证书

    环境产品声明(Environmental Product Declaration,简称"EPD")及ZHAGA-D4I证书。TÜV 南德大中华区消费产品服务高级副总裁Ashley Chan及蓝赛明总经理
    的头像 发表于 05-22 15:57 252次阅读
    TÜV南德助蓝赛明发布LED路灯环境产品<b class='flag-5'>声明</b> 为其颁发ZHAGA-D4I证书

    TC397 QSPI unit2调用mcal同步接口后一直报失败的原因?

    QSPI unit2和unit0134 5 不一样,导致配置完mcal后,unit2 调用mcal同步接口后一直报失败,其他的unit都是没有问题的,不确定是不是mcal的问题。
    发表于 02-02 09:16

    双通道数模转换器| DAC2 Unit/Hat

    、控制系统和通信系统等领域都有广泛的应用。DAC2Unit/Hat本周上新的两款新品,DAC2Unit和DAC2Hat,就是基于I2C总线的数字信号转模拟信号转换器,
    的头像 发表于 01-13 08:29 296次阅读
    双通道数模转换器| DAC2 <b class='flag-5'>Unit</b>/Hat

    移远通信声明: 关于移远产品用途及安全合规性的澄清

    移远通信声明: 关于移远产品用途及安全合规性的澄清
    的头像 发表于 01-06 08:28 187次阅读
    移远通信<b class='flag-5'>声明</b>: 关于移远产品用途及安全合规性的澄清

    u盘空间变小怎么恢复空间

    u盘空间变小怎么恢复空间? U盘(USB闪存驱动器)作为一种便携式存储设备,广泛应用于数据传输与存储。然而,许多用户发现他们的U盘空间在使用一段时间后变小了,这对于存储大量文件的用户来说是一个严重
    的头像 发表于 12-11 15:31 967次阅读

    CAMS3 Unit以及ATOMIC CAN BASE介绍

    。CAMS3UnitCAMS3Unit是一款基于ESP32S3模组的精简摄像头单元,该摄像头搭载了8MPSRAM和16MFlash内存,为图像处理和存储提供了充足的空间,搭配200万像素的摄像头(
    的头像 发表于 12-09 08:29 380次阅读
    CAMS3 <b class='flag-5'>Unit</b>以及ATOMIC CAN BASE介绍

    变量的声明和定义有什么区别和联系

    变量的声明和定义是编程中的两个重要概念,它们在语法和语义上有一些区别和联系。在本文中,我将详细介绍变量的声明和定义之间的区别和联系。 首先,让我们从变量的定义开始。变量的定义是在程序中为变量分配
    的头像 发表于 12-07 16:14 588次阅读

    R0E530640MCU00 用户手册(E100 Emulator MCU Unit for M16C/64 组)

    R0E530640MCU00 用户手册 (E100 Emulator MCU Unit for M16C/64 组)
    发表于 11-10 18:30 0次下载
    R0E530640MCU00 用户手册(E100 Emulator MCU <b class='flag-5'>Unit</b> for M16C/64 组)

    HarmonyOS鸿蒙原生应用开发设计- 隐私声明

    HarmonyOS设计文档中,为大家提供了独特的隐私声明,开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可
    发表于 10-31 14:16

    iar中定义声明无法跳转怎么解决?

    有大佬知道iar中定义声明无法跳转怎么解决啊? 从百度上搜的那个不管用。我也不知道该怎么办了。
    发表于 10-25 08:05

    const声明的变量一定只能读吗?

    一直以为 const 声明的变量一定是只读的,并且也一定会存放在 FLASH 中,直到在 103 的 map 文件中看到了这个变量
    的头像 发表于 10-07 09:23 462次阅读
    const<b class='flag-5'>声明</b>的变量一定只能读吗?

    各种逻辑块中声明的变量或参数类型

    每类本地变量或参数,都有用各自关键字对标识的自己的声明子域。每个子域包含允许的详细的声明子域,子域可按任何顺序定位。
    的头像 发表于 08-17 11:00 378次阅读

    AI摄像头单元| UNIT-V M12上线

    左右滑动查看图片在现代科技的发展中,机器视觉的应用越来越广泛,而小型化的AI摄像头单元则成为了许多设备的必要组成部分。M5Stack的UNIT-V系列相机兼具高效性能和易用性,可以快速地实现各种机器
    的头像 发表于 07-31 23:51 663次阅读
    AI摄像头单元| <b class='flag-5'>UNIT</b>-V M12上线

    RH850/V850E2Main unit for IE850 Full-spec. Emulator QB-V850E2用户手册

    RH850/V850E2 Main unit for IE850 Full-spec. Emulator QB-V850E2 用户手册
    发表于 07-12 19:26 0次下载
    RH850/V850E2Main <b class='flag-5'>unit</b> for IE850 Full-spec. Emulator QB-V850E2用户手册

    RX23W 的目标板 CE Rev.2.00 符合性声明

    RX23W 的目标板 CE Rev.2.00 符合性声明
    发表于 07-04 18:54 0次下载
    RX23W 的目标板 CE Rev.2.00 符合性<b class='flag-5'>声明</b>