2014-01-21 40 views
1

我想分解兩個32位std_logic_vector信號(請參閱下面的代碼)。兩個輸入都是可變的。 當我編寫一個單獨的模塊並對其進行測試時,它是可以的,但是當我將它用作其他模塊的一部分時,它不能被模擬。模擬沒有錯誤,但它已停止並將我鏈接到此模塊。 順便說一下,我與賽靈思VHDL中的分區

library IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.NUMERIC_STD.ALL; 
entity DivEx is 
port(
    X : in STD_LOGIC_VECTOR(31 downto 0); 
    Y : in STD_LOGIC_VECTOR(31 downto 0); 
    R : out STD_LOGIC_VECTOR(31 downto 0) 
); 
end DivEx; 

architecture Behavioral of DivEx is 
begin 
R <= std_logic_vector(to_signed(to_integer(signed(X)/signed(Y)),32)); 
end Behavioral; 
+0

實際錯誤報告或消息? –

+0

它不會阻止模擬我認爲它與位數有關。 – EYx

+0

它可能沒有停止......再給它幾個小時!或者更合理地說,將X和Y都轉換爲整數,以便更快地模擬。 –

回答

1

VHDL工作沒有模塊。它們被稱爲已聲明組件或直接實例化實體或配置的組件實例。

有了這個測試平臺:

library ieee; 
use ieee.std_logic_1164.all; 

entity tb_divex is 
end entity; 

architecture foo of tb_divex is 
    signal x:  std_logic_vector(31 downto 0) :=x"000000FF"; 
    signal y:  std_logic_vector(31 downto 0) :=x"00000005"; 
    signal r:  std_logic_vector(31 downto 0); 
begin 

DUT: 
    entity work.divex 
     port map (
      x => x, 
      y => y, 
      r => r 
     ); 

STIMULUS: 
    process 
    begin 
     wait for 10 ns; -- so we can see these on a waveform display 
     y <= x"00000023"; 
     wait for 10 ns; 
     x <= x"00000123"; 
     y <= x"00000003"; 
     wait for 10 ns; 
     wait;  
    end process; 

end architecture; 

它採用了直接實例化的實體,我們得到:

tb_divex_ghdl.png

這表明直接實例您divex導致一些作品。

您從未迴應Brian Drummond的實際警告/錯誤消息請求,這也阻止某人確定您正在使用哪個供應商的工具。

沒有看到那些和你的測試臺或刺激應用方法,任何人回答都是殘疾人。

您可能正在通過組件聲明使用組件實例,在這種情況下,您可能沒有綁定組件。您可以使用組件聲明來分析VHDL設計規範,但除非實體先前已被分析到設計庫中,其內容通過上下文子句可見,否則可能不會將組件綁定到庫設計單元。

見IEEE標準1076-1993/-2008 12.4.3/14.5.4組件實例聲明:

實例化 組件聲明組件實例聲明的制定沒有影響,除非該組件實例 或者完全綁定到由實體聲明 定義的設計實體和架構主體,或者綁定到實體的這樣的設計配置。如果一個組件實例被如此綁定,那麼對應的組件實例化語句的詳細描述由代表組件 實例和(在該塊內)的隱含塊語句的詳細描述組成,該隱含塊語句表示該設計實體的隱含塊語句 組件實例綁定爲 。

一個組件實例使用默認綁定基於它的名字:

5.2.2/7.3.3默認綁定指示

在某些情況下,默認綁定指示將適用於 的沒有明確的約束指示。默認綁定 指示包含默認實體方面,以及 默認通用映射方面和默認端口映射方面,如 合適。

如果沒有可見的實體聲明具有相同的簡單名稱爲的 實例化的組件,則默認的實體方面是開放....

所以你divex組件可以是開放

在某些管理「項目」的工具中,可能會出現這種情況,因爲divex的設計文件未包含在「項目」中。有效地,它不會被分析到當前的工作庫中,並且當它已經被分析到一個庫(一個不同的工程的工作庫)中時,它不會被上下文語句看到,它根本就不存在。