2010-09-04 17 views
6

自從我第一個VHDL課程開始,我一直在撓頭,並決定在這裏發佈我的問題。爲什麼在實例化其他體系結構之前需要重新聲明VHDL組件?

鑑於我有一個聲明的實體(也是它的一個體繫結構)並且想在另一個體繫結構中實例化它,爲什麼我似乎必須在實例化之前重新聲明這個包含體系結構中的「實體」(組件)它?

編譯器是否足夠聰明,僅僅通過它的名字來匹配一個實例到它的架構呢?哪裏需要組件聲明?

回答

10

您可以直接實例化的組件,如果需要的話:

MyInstantiatedEntity : entity work.MyEntity_E 
    generic map (
     config   => whatever) 
    port map (
     clk    => signal1, 
     clk_vid   => signal2, 
     ... 

創建組件聲明讓你改變什麼獲取通過配置規範或類似綁定到實例額外的能力。

+0

我明白了,謝謝! – 2010-09-05 07:26:35

+1

您可以將體系結構指定爲: label:entity work.MyEntity_E(RTL)generic map ... – Hendrik 2011-09-02 17:50:42

2

回到我在學校時完成VHDL任務後,我需要將所有代碼都放在一個文件中,所以我不記得是否可以爲每個模塊編寫一個文件,以及它是如何編寫的已完成。這就是說,如果您使用它的方式與定義原型,結構,類以及C或C++中的內容相同,您將不得不聲明您在定義行爲時使用的實體。這裏的區別在於,你沒有爲VHDL中的這個「重新聲明」定義頭文件的奢侈(至少我不認爲有相當的)。所以我必須這樣做是完全合理的。請注意,當C很常見並且編譯器不像今天那樣「足夠聰明」時,VHDL就出來了。

一個VHDL大師對此可能有一個確定的答案,但這是我的理解。

+0

我認爲這可能是一個有趣的閱讀,[如何在VHDL模塊中包含頭文件](http://www.edaboard.com/thread169224.html)(這裏沒有辦法)。可能是相關的,但我不知道你將如何應用它。您可以通過這種方式定義您的「標題」。 – 2010-09-04 08:30:01

+0

啊,這很有道理。感謝你的回答! – 2010-09-04 08:36:02

+1

一個包有點像頭文件 - 你可以把組件放在它們中,所以你只需要聲明它們一次。但是,如Charles所建議的那樣,直接實例化就是要走的路,除非你有充分的理由不要(例如黑盒組件,需要使用配置)。 – 2010-09-06 10:22:15

相關問題