2015-04-03 61 views
0

我正在學習VHDL並發現一些令人困惑的東西。假設你有以下實體:爲什麼在使用組件時端口被重新定義?

entity alu32 is 
    port(a, b  : in STD_LOGIC_VECTOR(31 downto 0); 
     alucontrol : in STD_LOGIC_VECTOR(2 downto 0); 
     result  : buffer STD_LOGIC_VECTOR(31 downto 0); 
     zero  : out STD_LOGIC); 
end alu32; 

當使用它作爲其他實體的架構的組成部分,它的定義是這樣的:

component alu32 
    port(
     a, b  : in STD_LOGIC_VECTOR(31 downto 0); 
     alucontrol : in STD_LOGIC_VECTOR(2 downto 0); 
     result  : buffer STD_LOGIC_VECTOR(31 downto 0); 
     zero  : out STD_LOGIC 
    ); 
end component; 

我的問題是,爲什麼我們重新定義端口?這似乎是一個毫無意義的練習,因爲它與實體聲明中的完全相同。爲什麼VHDL設計不允許你簡單地使用這樣的組件:

component alu32; 
+0

http://stackoverflow.com/questions/3641341/vhdl-components?rq=1 – mstbaum 2015-04-03 14:12:46

+0

可能的重複此外,至於爲什麼這樣設計的東西,請記住,該語言最初是在1987年標準化。計算機遠那麼強大一點。 – 2015-04-03 14:38:25

+0

另請參閱:http://electronics.stackexchange.com/questions/16692/vhdl-component-vs-entity – Josh 2015-04-03 14:53:19

回答

5

你可以,因爲VHDL-93。您可以實例使用

Alu_0: entity work.alu32 
port map (
    ... 
); 

在這個片段中,可以取代work您要實例化組件的VHDL庫,work總是的VHDL源駐留在當前庫。

爲什麼使用組件聲明?首先,他們所需要的就是你想要實例化的不是VHDL,比如Verilog,IP核和網表。其次,使用配置允許更改端口/實體綁定,但您需要組件聲明。

+0

我有點困惑。你所展示的是實體聲明?在架構內部使用組件聲明時如何更改?是否如我的例子中給出的那樣:'component alu32;'? – Nate 2015-04-03 17:42:15

+0

不,這是實例化(請注意使用*端口映射*)。這在'begin'關鍵字之後的結構中。不需要申報任何東西。 – 2015-04-03 17:44:41

3

基本上,語言設計師們一直在儘可能小心地向前看,這個世界......並非完全如此。

component聲明的想法是,它確切地定義了實例化它時的預期內容,因此使用這些組件的實體/體系結構是自洽的,並且可以在一定程度上作爲獨立任務進行編譯和測試它使用的組件 - 甚至可能在編寫這些組件之前。

比爾·林奇的評論是與此有關,而且容易忘了今天:當編譯所花的時間一千倍,這是一個很大的生產力贏得

後來,當你建立了整體設計,該組件中搜索在一個組件庫,以及找到完全匹配的實體(默認配置),或者通過configuration語句選擇特定組件。或者闡述失敗,將錯誤報告爲錯誤 - 沒有機會創建一個不太適合的部分的設計。該庫可以包含各種具有不同特性(用於不同目的(快速,小型,有/無浮點等))的「alu32」組件。這種情況發生在「精化」階段,與軟件中的鏈接階段大致相同,當(希望)找到正確的實體/主體時,並且檢查其端口與組件的端口。這是一個很自然的方式,可以看到設計人員在與「The TTL Data Book」一起成長的設計方面不斷髮展 - 這是TTL IC形式的物理構建模塊庫。

但是,在今天的一個典型用例中,我們並沒有在很大程度上使用組件庫,因此您示例中的「alu32」可能是同一項目中的另一個文件,編譯爲您的「工作」圖書館。

在這種情況下,Jonathan Drolet的回答中較短,較簡單的「直接實體實例化」(1993年引入)是正確的方法。下行?這意味着在語法檢查頂層設計之前,您必須編寫併成功編譯「alu32」實體(儘管您可以在稍後詳細闡述之前編寫體系結構)。

0

IEEE標準1076至2008年,6.8元器件聲明

A組分聲明聲明的是可以在組件的實例化語句中使用的虛擬設計實體的接口。組件配置或配置規範可用於將組件實例與駐留在庫中的設計實體相關聯。

3.4配置聲明

在某些情況下,然而,它可能是適當的離去組件實例的非特定的結合在給定塊和推遲這種規範,直到後來。

組件聲明就像是Function prototype。通用映射或端口映射方面是綁定指示的一部分。

從附件I:

結合:關聯設計實體的過程和任選的結構與部件的一個實例。可以在顯式或默認綁定指示中指定綁定。 (3.4,7.3.2,7.3.3,14.4.3.3,14.5.4)

作爲您想要考慮組件聲明的一個示例,其中內部塊具有相同的接口:

component sbox 
    port (
     B: in std_logic_vector (1 to 6); 
     S: out std_logic_vector (1 to 4) 
    ); 
end component; 

他們實際上是不同的,你使用一個以上的:

S1: sbox 
    port map (
     B => ExK(1 to 6), 
     S => PO(1 to 4) 
    ); 

S2: sbox 
    port map (
     B => ExK(7 to 12), 
     S => PO(5 to 8) 
    ); 

封閉的實體,否則相同(dslice)。

可以指定哪些實體用於闡述期間其中:

configuration behave_config of des is 
    for behave 
    for DSLICE0: dslice 
     use entity work.dslice(behave);   
     for behave 
      for S1: sbox 
       use entity work.sbox1(behave); 
      end for; 
      for S2: sbox 
       use entity work.sbox2(behave); 
      end for; 
     end for; 
    end for; 
    ... 

在該實例中的DES加密算法可通過替換盒內容和外部互連分化四個部分被描述爲硬件。

本設計模型演示了數字加密標準(FIPS Pub 46,單一DES)中的數字加密算法的硬件特性。你可以仔細看看這個鏈接 - vhdl_des.tar.gz

而對於不支持配置的綜合或仿真工具,替代方案是將包含實例化實體的塊單獨化,在這種情況下將設計描述的大小增加幾乎四倍,同時增加維護和不必要的複製的危險。

相關問題