0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

work庫在VHDL中的特殊用法

FPGA之家 ? 來源:FPGA之家 ? 2023-08-19 09:34 ? 次閱讀

VHDL 的一個強大功能是用庫來組織 RTL 的不同部分。通過使用庫,不同的設(shè)計人員可以做這個工程中自己負(fù)責(zé)的那部分工作,而不必?fù)?dān)心會在命名方面與其他設(shè)計師發(fā)生沖突。在例化期間,這可以通過手動指定要使用的庫或者通過配置語句來完成。

例如,已經(jīng)在一個名為“my_lib1”的庫中創(chuàng)建并編譯了一個名為“bottom”的實體。

編譯到任何庫中的頂層可以輕松地通過直接實體例化來引用底層:

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

通過采用上面的編碼方式,需要哪個版本的底層就顯而易見了。“my_lib1”庫中的版本是正確無誤的版本。

一個常見的誤解與何時使用名為“work”的庫有關(guān)。許多設(shè)計師將“work”用作庫,假設(shè)它與其他庫一樣,是一個物理庫。但情況并非如此。名為“work”的庫在 VHDL 中的用法比較特殊。

它不是一個物理庫,實際上它指的是“當(dāng)前庫”。

當(dāng)一個文件被編譯到一個特定的庫中,然后被告知從“work”中獲取邏輯時,它不會在名為“work”的物理庫查找,而是會在例化的文件被編譯到的庫中查找。這一點可以通過幾個例子來展示。

實例 #1

在此示例中,有三個文件,top.vhd、bottom1.vhd 和 bottom2.vhd。 Top.vhd 是設(shè)計中的頂層,例化了一個名為“bottom”的實體。底層的兩個文件都有一個名為“bottom”的實體。在 bottom1.vhd 中,有一個輸出是由一個通過反相器過驅(qū)動的的輸出。在 bottom2.vhd,中,輸出直接由輸入驅(qū)動。

060ac244-3e29-11ee-ac96-dac502259ad0.jpg

頂層被編譯到名為 y_lib1、bottom1.vhd 的庫中(也在 my_lib1 庫中),而且,bottom2.vhd 在名為 my_lib2 的庫里。

在頂層,例化看起來類似于以下內(nèi)容:

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

查看詳細視圖,該示意圖如下所示:

0622c3e4-3e29-11ee-ac96-dac502259ad0.png

這正是我們期待看到的結(jié)果。更重要的是,當(dāng)使用相同的建立運行仿真時,波形圖如下例所示:

0637bea2-3e29-11ee-ac96-dac502259ad0.png

接下來,如果 top.vhd 文件的庫從 my_lib1 轉(zhuǎn)換到 my_lib2,則對詳細視圖所做的更改如下所示:

065379b2-3e29-11ee-ac96-dac502259ad0.png

并且,仿真波形圖也會發(fā)生變化:

066d3c9e-3e29-11ee-ac96-dac502259ad0.png

這正是我們預(yù)期的結(jié)果。因為 top.vhd 文件在 my_lib2 中,并且在實體例化中使用了“work”,所以它將從 my_lib2 中獲取底層。

示例 #2

此示例將顯示假設(shè)“work”是物理庫所帶來的危險。這是與示例#1 類似的測試。在此示例中,top.vhd 和 bottom1.vhd 將被編譯到“my_lib1”庫中,bottom2.vhd 將被編譯到名為“work”的庫中。

0680a63a-3e29-11ee-ac96-dac502259ad0.jpg

與前面的示例一樣,頂層例化底部,如下所示:

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

這個設(shè)計的詳細視圖類似于以下示例:

069a7d62-3e29-11ee-ac96-dac502259ad0.png

仿真如下所示:

06ae5c92-3e29-11ee-ac96-dac502259ad0.png

因此,即使 bottom2.vhd 已被編譯為一個名為“work”的物理庫,并且頂層由“work”庫例化了底部,但該工具仍然會使用 bottom1.vhd 中與top.vhd 編譯到同一個庫中的行為。

Vivado 默認(rèn)庫:

默認(rèn)情況下,將 VHDL 文件輸入 Vivado 工程時,該工具會將這些文件放入一個名為“xil_defaultlib”的庫中。這樣做的原因是讓只使用庫的用戶能夠輕松地將舊的工程移植到 VHDL 中,同時還能幫助設(shè)置有更多組合結(jié)構(gòu)的用戶以恰當(dāng)?shù)姆绞皆?Vivado 中對他們的工程進行設(shè)置。

結(jié)論:

選擇 VHDL 文件的庫名時應(yīng)小心。雖然名為“work”的庫是許多工程公用的庫名,但該工具處理這個庫名的方式與處理其他庫名的方式略有不同。如果將頂層文件編譯到不同的庫中并引用“work”,那么它就不會從名為“work”的物理庫中獲取行為。如果這不是所期望的,就可能會導(dǎo)致混亂的行為。

我的建議是永遠不要使用“work”庫。相反,在例化較低層時,始終應(yīng)指定要使用的庫。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 反相器
    +關(guān)注

    關(guān)注

    6

    文章

    309

    瀏覽量

    43143
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    816

    瀏覽量

    128018
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59625
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    647

    瀏覽量

    32743
  • Work
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8996

原文標(biāo)題:如何使用 VHDL 中的 “work” 庫

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    主流的微前端的實現(xiàn)原理及其用法

    本文對微前端的概念和場景進行科普,介紹一些主流的微前端的實現(xiàn)及其用法,并講解部分這些的原理和實踐知識。
    的頭像 發(fā)表于 10-10 14:24 ?2726次閱讀

    SQLxRust語言中的基礎(chǔ)用法和進階用法

    SQLx是一個Rust語言的異步SQL執(zhí)行庫,它支持多種數(shù)據(jù),包括MySQL、PostgreSQL、SQLite等。本教程將以MySQL數(shù)據(jù)為例,介紹SQLxRust語言中的基礎(chǔ)用法
    的頭像 發(fā)表于 09-19 14:32 ?4844次閱讀

    如何生產(chǎn)VHDL文件

    我創(chuàng)建了一個VHDL的程序包 mypak,我想把它編譯到一個新mylib,這樣我就可以我的以后就可以如下例子調(diào)用它library my_lib;use my_lib.my_lib.all;現(xiàn)在
    發(fā)表于 09-26 12:08

    怎么Vivado 2015.3創(chuàng)建一個

    'work'找不到包'tap'[Synth 8-1031]未聲明tap_state [Common 17-69]命令失敗:合成失敗 - 請查看控制臺或運行日志文件以獲取詳細信息因此,我正在搜索相關(guān)
    發(fā)表于 04-15 12:38

    可以將塊設(shè)計添加到嗎?

    嗨,是否有可能將塊設(shè)計添加到工作,我可以使用“entity work.bs_name”對其進行實例化?我可以使用vhdl組件,使用i
    發(fā)表于 04-18 07:00

    ARM匯編語言跳轉(zhuǎn)指令的特殊用法還有嗎

    關(guān)于 ARM匯編語言跳轉(zhuǎn)指令的特殊用法。有如下兩條跳轉(zhuǎn)指令: beq lablefbeq lableb其中 lable 為某段程序的標(biāo)號,beq lablef 表示向前跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號
    發(fā)表于 10-31 15:30

    模擬開關(guān)特殊用法

    模擬開關(guān)特殊用法 模擬開關(guān)在數(shù)據(jù)采集系統(tǒng)通常被用作為模擬傳輸器,和A/D轉(zhuǎn)換器配合使用以實現(xiàn)多通道的模擬信號輸入;控制通常被用作為模擬
    發(fā)表于 08-14 22:28 ?34次下載

    簡要說明如何使用“work

    因此,即使 bottom2.vhd 已被編譯為一個名為“work”的物理,并且頂層由“work例化了底部,但該工具仍然會使用 bottom1.vhd
    的頭像 發(fā)表于 07-25 15:33 ?3760次閱讀
    簡要說明如何使用“<b class='flag-5'>work</b>” <b class='flag-5'>庫</b>

    如何得當(dāng)使用C語言的特殊用法

    C語言有很多特殊用法,如果這些特殊用法使用得當(dāng),會是你的代碼變得更加有健壯,更加容易維護。 比如我們使用STM32
    的頭像 發(fā)表于 09-27 10:41 ?1885次閱讀
    如何得當(dāng)使用C語言的<b class='flag-5'>特殊</b>的<b class='flag-5'>用法</b>

    如何在VHDL設(shè)計中使用模塊

    實際設(shè)計通常包括常用的電路塊,如加法器、減法器、乘法器、解碼器、計數(shù)器和移位器。Altera以模塊的形式提供了這些塊的有效實現(xiàn),這些模塊可以VHDL設(shè)計
    發(fā)表于 01-22 15:34 ?13次下載
    如何在<b class='flag-5'>VHDL</b>設(shè)計中使用<b class='flag-5'>庫</b>模塊

    你不可不知的STC單片機特殊用法的IO

    IO的特殊用法是什么鬼?簡單說就是因為STC單片機的IO有好多都帶有復(fù)用功能,單片機上電復(fù)位后,這些復(fù)用功能引腳的默認(rèn)狀態(tài)有一些特殊的規(guī)定或處理辦法,若你不知曉,很有可能出現(xiàn)災(zāi)難性的
    發(fā)表于 02-10 11:19 ?3次下載
    你不可不知的STC單片機<b class='flag-5'>中</b><b class='flag-5'>特殊</b><b class='flag-5'>用法</b>的IO

    詳解C語言中特殊用法

    C語言有很多特殊用法,如果這些特殊用法使用得當(dāng),會是你的代碼變得更加有健壯,更加容易維護。
    的頭像 發(fā)表于 07-15 08:57 ?1372次閱讀

    如何使用ModelSimVHDL實現(xiàn)RAM

    本教程,我們將探索如何使用 ModelSim VHDL 實現(xiàn) RAM。
    發(fā)表于 07-29 16:34 ?2525次閱讀
    如何使用ModelSim<b class='flag-5'>在</b><b class='flag-5'>VHDL</b><b class='flag-5'>中</b>實現(xiàn)RAM

    數(shù)據(jù)orderby 和groupby用法

    數(shù)據(jù)是指將數(shù)據(jù)按照一定規(guī)則組織并存儲起來,以實現(xiàn)高效的數(shù)據(jù)管理和訪問。使用數(shù)據(jù)時,我們經(jīng)常需要對數(shù)據(jù)進行排序和分組。數(shù)據(jù)的ORDE
    的頭像 發(fā)表于 11-23 11:16 ?2216次閱讀

    splitpython用法

    splitpython用法 split()是Python中一個非常常用的字符串函數(shù),它能夠根據(jù)指定的分隔符將一個字符串分割成多個子字符串,并返回一個包含這些子字符串的列表。本文將詳細介紹
    的頭像 發(fā)表于 12-25 15:12 ?1890次閱讀