2016-02-24 53 views
-2

我想創建一個實現「主要」功能的結構VHDL文件。 「頂級」文件是設計的,運行代碼的程序將會是prog。假設fulladd_pack包含fulladd組件,我如何「鏈接」這兩個VHDL文件?結構vhdl:創建「主要功能」

*我也沒有得到主要的參數,爲了這個工作。

-- design.vhdl 
library ieee; 
use ieee.std_logic_1164.all; 
use work.fulladd_pack.all; 

ENTITY design IS 
    port(Cin  : IN STD_LOGIC; 
      X,Y  : IN STD_LOGIC_VECTOR(15 DOWNTO 0); 
      S  : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); 
      Cout, Over : OUT STD_LOGIC); 
END design; 

ARCHITECTURE struct OF design IS 
SIGNAL C,temp : STD_LOGIC_VECTOR(1 TO 15); 
BEGIN 
      main: prog PORT MAP(Cin,X,Y,S,C,Cin); 
END struct; 

-- prog.vhdl 
library ieee; 
use ieee.std_logic_1164.all; 
use work.fulladd_pack.all; 

ENTITY prog IS 
    port(Cin  : IN STD_LOGIC; 
      X,Y  : IN STD_LOGIC_VECTOR(15 DOWNTO 0); 
      S  : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); 
      Cout, Over : OUT STD_LOGIC); 
END prog; 

ARCHITECTURE struct OF prog IS 
SIGNAL C,temp : STD_LOGIC_VECTOR(1 TO 15); 
BEGIN 
      instance0: fulladd PORT MAP(Cin,X,Y,S,C,Cin); 
      output: fulladd PORT MAP(Cin,X,Y,S,C,Cin); 


END struct; 
+0

您的代碼不是[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve),缺少包聲明,將輸入信號分配給輸出的語義錯誤(其中是Over使用的信號?)。設計看起來不像使用fulladd_pack,除非在prog中有一個組件聲明(否則缺失)。在兩個full_add實例化中,S,Cout和Over上存在驅動器衝突,並行連接。 c沒有被使用,因此沒有使用temp。鏈接是詳細闡述,在所有的分析(編譯)之後。什麼VHDL工具? – user1155120

+0

我認爲「鏈接」是指在'design'的體系結構中實例化實體'prog'。你是對的。但是,「C」和「temp」的信號是什麼?爲什麼不只是將'design'的輸入/輸出信號傳遞給實例'main'?爲了得到'prog'的幫助,你必須從包中發佈'fulladd'的組件聲明,或者只是將一些(隨機)值分配給輸出,這樣'prog'就可以被編譯。 –

+0

生病編輯我的問題並解釋我想要做什麼 –

回答

0

你已經錯過了這一點。作爲一種「編程語言」,VHDL模擬併發性,數據流和時間流逝。一個模型由大量元素('過程')和數據('信號')在它們之間流動組成。模擬器中內置的內核處理併發和時間流。

在「頂層」,您編寫了一個測試臺,用於實例化模型,並應用刺激(通過驅動輸入到模型的信號)。刺激強制模型周圍的數據。這繼續下去,直到你停止提供刺激,在這一點上,別的(應該)停止。

所以,沒有主要的。編寫測試臺。 「鏈接」是模擬器中的一個內部概念;算了吧。只需一起模擬你的源文件。