我已經從Micronova購買了一塊Spartan 3A開發板(http://micro-nova.com/mercury),並且我的接口與SRAM有一些問題。在VHDL中驅動與SRAM共享的GPIO引腳
該電路板有30個GPIO引腳與Cypress SRAM共享,兩個引腳在它們之間切換。
明顯地,將兩個VHDL模塊(一個用於控制SRAM,另一個用於驅動GPIO)連接到同一引腳會導致合成時出現「Multiple driver error」。
因此,爲了解決這個問題,我創建了第三個模塊作爲中間控制器,將兩個模塊與另一個變量連接起來,以便選擇一個操作。
這適用於輸出,但是當涉及到讀取輸入時,我始終得到1,與實際值無關。
我不知道哪個引腳將用作輸入,哪些用於輸出,因爲我想要一個獨立的模塊,我可以用於其他項目。
這是我走到這一步:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DMA2 is
Port (
IOphys : inout STD_LOGIC_VECTOR (29 downto 0);
IOin1 : out STD_LOGIC_VECTOR (29 downto 0);
IOin2 : out STD_LOGIC_VECTOR (29 downto 0);
IOout1 : in STD_LOGIC_VECTOR (29 downto 0);
IOout2 : in STD_LOGIC_VECTOR (29 downto 0);
SwitchEn2 : in STD_LOGIC
);
end DMA2;
architecture Behavioral of DMA2 is
begin
IOin2 <= IOphys;
IOin1 <= IOphys;
IOphys <= IOout2 when SwitchEn2 = '1' else IOout1;
end Behavioral;
IOphys在黑板上的物理引腳,SwitchEn2是選擇驅動模塊和其它的是輸入和模塊的輸出。