2014-10-07 153 views
0

例如,我有一個組件(例如一個具有128個輸入和1個輸出的多路複用器)。我想要實例化這個組件。所以我需要爲這128個輸入端口映射。我的問題是:有沒有更簡單的方法來做128端口的映射,而不是寫128條語句?
非常感謝!端口映射如果端口很多

假設我們有這個組件:

component MUX_1bit is 
port( 

    data0  : IN STD_LOGIC ; 
    data1  : IN STD_LOGIC ; 
    ...... 
    data127  : IN STD_LOGIC ; 
    select  : IN STD_LOGIC_VECTOR (6 DOWNTO 0); 
    result  : OUT STD_LOGIC); 
end component; 

現在,如果我要實例化,

myMUX : MUX_1bit port map( 
    data0 => signal0, 
    data1 => signal1, 
    .................. 
); 

有沒有更簡單的方法,而不是重複128倍?

+0

std_logic_vector:實際 實現更容易,因爲result可以像多路複用器可以生成? – godel9 2014-10-07 02:31:35

+0

我編輯了我的問題,使其更清楚。我的問題是,128個端口手動輸入太多。非常感謝! – mhz 2014-10-07 03:32:02

回答

1

使用STD_LOGIC_VECTOR作爲類型data代替,從而:

component MUX_1bit is 
    port(
    data : in STD_LOGIC_VECTOR(127 downto 0); 
    sel : IN STD_LOGIC_VECTOR (6 DOWNTO 0); 
    result : OUT STD_LOGIC); 
end component; 

注意select是一個保留字VHDL,所以這種改變成上述sel

對於使用組分,然後VHDL具有柔性,所以單個比特或 範圍或所有可用於數據,如:

myMUX_1 : MUX_1bit port map(
    data => dut_data, 
    sel => dut_sel, 
    result => dut_result); 

myMUX_2 : MUX_1bit port map(
    data(0)    => dut_data(0), 
    data(1)    => dut_data(1), 
    data(2)    => dut_data(2), 
    data(7 downto 3)  => "10101", 
    data(124 downto 8) => (others => '0'), 
    data(127 downto 125) => dut_data(127 downto 125), 
    sel     => dut_sel, 
    result    => dut_result); 

具有數據作爲STD_LOGIC_VECTOR也會使

result <= data(to_integer(unsigned(sel))); 
+0

謝謝你幫我編輯和解決我的問題!如果我們將每個輸入/輸出寬度從std_logic(1bit)擴展到std_logic_vector(7 downto 0),那麼我可以將數據定義爲自定義類型「std_logic_vector(7 downto 0)」數組。之後,我們仍然有類似result <= data(to_integer(unsigned(sel)))。我對嗎? – mhz 2014-10-07 05:51:24

+0

如果你把'data'作爲'std_logic_vector(7 downto 0)'的數組'',那麼你仍然可以通過'data(to_integer(unsigned(sel)))'來選擇。 – 2014-10-07 06:48:39

+0

我現在明白了。非常感謝! – mhz 2014-10-07 07:15:52