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

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

3天内不再提示

简要说明如何使用“work” 库

Xilinx赛灵思官微 来源:djl 作者:赛灵思 2019-07-25 15:33 次阅读

VHDL的一个强大功能是用库来组织RTL的不同部分。通过使用库,不同的设计人员可以做这个工程中自己负责的那部分工作,而不必担心会在命名方面与其他设计师发生冲突。在例化期间,这可以通过手动指定要使用的库或者通过配置语句来完成。

例如,已经在一个名为“my_lib1”的库中创建并编译了一个名为“bottom”的实体。

编译到任何库中的顶层可以轻松地通过直接实体例化来引用底层:

u0 : entity my_lib1.bottom port map (in1 => in1, out1 => out1);

通过采用上面的编码方式,需要哪个版本的底层就显而易见了。“my_lib1”库中的版本是正确无误的版本。

一个常见的误解与何时使用名为“work”的库有关。许多设计师将“work”用作库,假设它与其他库一样,是一个物理库。但情况并非如此。名为“work”的库在VHDL中的用法比较特殊。

它不是一个物理库,实际上它指的是“当前库”。

当一个文件被编译到一个特定的库中,然后被告知从“work”中获取逻辑时,它不会在名为“work”的物理库查找,而是会在例化的文件被编译到的库中查找。这一点可以通过几个例子来展示。

实例 #1

在此示例中,有三个文件,top.vhd、bottom1.vhd和bottom2.vhd。 Top.vhd是设计中的顶层,例化了一个名为“bottom”的实体。底层的两个文件都有一个名为“bottom”的实体。在bottom1.vhd中,有一个输出是由一个通过反相器过驱动的的输出。在bottom2.vhd,中,输出直接由输入驱动。

简要说明如何使用“work” 库

顶层被编译到名为y_lib1、bottom1.vhd的库中(也在my_lib1库中),而且,bottom2.vhd在名为my_lib2的库里。

在顶层,例化看起来类似于以下内容:

u0 : entity work.bottom port map (in1=> in1, out1 => out1);

查看详细视图,该示意图如下所示:

简要说明如何使用“work” 库

这正是我们期待看到的结果。更重要的是,当使用相同的建立运行仿真时,波形图如下例所示:

简要说明如何使用“work” 库

接下来,如果top.vhd文件的库从my_lib1转换到my_lib2,则对详细视图所做的更改如下所示:

简要说明如何使用“work” 库

并且,仿真波形图也会发生变化:

简要说明如何使用“work” 库

这正是我们预期的结果。因为top.vhd文件在my_lib2中,并且在实体例化中使用了“work”,所以它将从my_lib2中获取底层。

示例 #2

此示例将显示假设“work”是物理库所带来的危险。这是与示例#1类似的测试。在此示例中,top.vhd和bottom1.vhd将被编译到“my_lib1”库中,bottom2.vhd将被编译到名为“work”的库中。

简要说明如何使用“work” 库

与前面的示例一样,顶层例化底部,如下所示:

u0: entity work.bottom port map (in1 => in1, out1 => out1)

这个设计的详细视图类似于以下示例:

简要说明如何使用“work” 库

仿真如下所示:

简要说明如何使用“work” 库

因此,即使bottom2.vhd已被编译为一个名为“work”的物理库,并且顶层由“work”库例化了底部,但该工具仍然会使用bottom1.vhd中与top.vhd编译到同一个库中的行为。

Vivado默认库:

默认情况下,将VHDL文件输入Vivado工程时,该工具会将这些文件放入一个名为“xil_defaultlib”的库中。这样做的原因是让只使用库的用户能够轻松地将旧的工程移植到VHDL中,同时还能帮助设置有更多组合结构的用户以恰当的方式在Vivado中对他们的工程进行设置。

结论:

选择VHDL文件的库名时应小心。虽然名为“work”的库是许多工程公用的库名,但该工具处理这个库名的方式与处理其他库名的方式略有不同。如果将顶层文件编译到不同的库中并引用“work”,那么它就不会从名为“work”的物理库中获取行为。如果这不是所期望的,就可能会导致混乱的行为。

我的建议是永远不要使用“work”库。相反,在例化较低层时,始终应指定要使用的库。

这样做有点费事,但通常会给你想要的行为。

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

    关注

    50

    文章

    3873

    浏览量

    132171
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65111
收藏 人收藏

    评论

    相关推荐

    TI官方BLE Bridge串口转蓝牙源码+简要说明文档

    TI官方BLE Bridge串口转蓝牙源码+简要说明文档
    发表于 11-03 09:39

    请问参与竞标时应该做什么类型的简要说明

    参与竞标时,提示“请输入您能够完成任务的简要说明并且上传相应附件资料”,如贴主需要一个温控开关系统,“简要说明”是否为所需芯片,如何做出来等;附件又该是什么?现象?
    发表于 08-01 05:00

    熔丝位简要说明

    熔丝位简要说明熔丝位功能配置说明 熔丝低位CKDIV8时钟8分频0:时钟8分频 1:时钟不分频 CKOUT时钟输出0:系统时钟输出(PB0) 1:不输出 SUT1选择启动时间根据时钟源选择..
    发表于 07-21 07:29

    手机充电协议BC1.2简要说明

    手机充电协议BC1.2· 目前市面上各种手机充电器,在手机厂家宣传时也会提到自己的充电器,各种快充。可以说消费者也是各种蒙圈。为了让大家不至于蒙圈,此文只限于科普。BC1.2协议要介绍手机的充电必须要说明
    发表于 09-14 08:40

    Socket API简要说明

    Socket API简要说明:创建套接字 ( socket ) int socket(int domain, int type ,int protocol);参数描述domain协议族类型type
    发表于 01-11 07:26

    简要说明四线SPI接口应用中需要掌握的一些关键知识

    SPI,全称 Serial Peripheral Interface ,即 串行外设接口 的意思,其作为一种同步、全双工、主从模式通讯接口,广泛应用于各种片上微控制器与外设之间的通讯。本文简要说明
    发表于 01-21 14:37

    收银程序安装简要说明

    收银程序安装简要说明,感兴趣的可以看看。
    发表于 02-29 16:21 1次下载

    接口技术-USB驱动程序简要说明及应用例子

    接口技术-USB驱动程序简要说明及应用例子,有兴趣的同学可以下载学习
    发表于 04-25 18:24 0次下载

    交换机6000简要说明

    6000工业以太网交换机用户手册简要说明
    发表于 12-23 02:34 0次下载

    6000A-CQ1用户手册简要说明

    6000工业以太网交换机用户手册简要说明CQ1
    发表于 12-23 02:33 0次下载

    汉邦7000SDK V3.0.11.610开发软件简要说明

    汉邦7000SDK V3.0.11.610开发软件简要说明
    发表于 01-04 12:47 0次下载

    CreMedia7.2客户端简要说明文档

    CreMedia7.2客户端简要说明文档
    发表于 03-21 08:00 0次下载

    SL-DIY02-51单片机简要说明

    SL-DIY02-51单片机简要说明
    发表于 09-21 13:47 4次下载

    储能连接器制造工艺的简要说明

    储能连接器在生活中的很多地方都有使用。 汽车、电脑等电子设备都是储能连接器的必备选择。 很多人觉得储能连接器种类太多,制造工艺应该不一样。事实上,储能连接器的制造工艺基本相同,可分为冲压、电镀、注塑、组装四种制造工艺。以下是储能连接器生产商康瑞连接器厂家对储能连接器四种制造工艺的简要说明
    的头像 发表于 06-29 17:25 2223次阅读

    通过解剖一个边沿触发器简要说明setup和hold产生原因

    在后仿真过程中经常会遇到关于setup和hold violation的问题,但是关于setup和hold time的产生原因和由来很多人还比较朦胧,为此本文通过解剖一个边沿触发器简要说明setup和hold产生原因。
    的头像 发表于 07-04 09:32 817次阅读
    通过解剖一个边沿触发器<b class='flag-5'>简要说明</b>setup和hold产生原因