2012-08-27 50 views
0

嘗試將組件連接到VHDL中父層次結構的兩個輸出端口時遇到問題。由於物理連接只能通過「端口映射」語句完成,因此無法將本地信號連接到多個輸出端口。下面是一個例子:如何從VHDL內部架構寫入兩個輸出端口?

enter image description here

上述電路的描述應不便。像這樣:

entity HIER is 
port (
    IN1 : in bit; 
    OUT1, OUT2 : out bit); 
end hier; 

architecture HIER_IMPL of HIER is 
    component BUF is 
     port (a : in bit; o : out bit); 
    end component; 
begin 
    BUF1 : BUF port map (a => IN1, o => OUT1, o => OUT2); 
end HIER_IMPL; 

然而,輸出端口「O」既OUT1和它在VHDL禁止OUT2將無法正常工作的雙重分配。

+0

如果只有一個OUT端口並將OUT連接到OUT1和OUT2連接的兩個端口,會不會更好? – simon

回答

7

是否有一個原因,你不能創建一個內部信號,並使用該信號來驅動這樣的兩個輸出端口?

entity HIER is 
port (
    IN1 : in bit; 
    OUT1, OUT2 : out bit); 
end hier; 

architecture HIER_IMPL of HIER is 
    signal temp : bit; 
    component BUF is 
     port (a : in bit; o : out bit); 
    end component; 
begin 
    BUF1 : BUF port map (a => IN1, o => temp); 
    OUT1 <= temp; 
    OUT2 <= temp; 

end HIER_IMPL; 

如果這是不可能的,那麼這個怎麼樣?

entity HIER is 
port (
    IN1 : in bit; 
    OUT1, OUT2 : out bit); 
end hier; 

architecture HIER_IMPL of HIER is 
    component BUF is 
     port (a : in bit; o : out bit); 
    end component; 
begin 
    BUF1 : BUF port map (a => IN1, o => OUT1); 
    BUF2 : BUF port map (a => IN1, o => OUT2); 
end HIER_IMPL; 
+2

第一段代碼應該工作得很好。一個只需要一個信號來連接兩個以上的IO。 –

+0

謝謝!我的意圖是無需任務的解決方案。看起來不可能不分配任務。第二種選擇是不可接受的,因爲它涉及兩個緩衝區。 – mkostya

+0

@mkostya請接受這個答案,如果它解決了你的問題。 – Josh