我从 Micronova ( http://micro-nova.com/mercury ) 购买了一块 Spartan 3A 开发板,但在连接 SRAM 时遇到了一些问题。
该板有 30 个与赛普拉斯 SRAM 共享的 GPIO 引脚和两个用于在它们之间切换的引脚。
显然,将两个 VHDL 模块(一个用于控制 SRAM,另一个用于驱动 GPIO)连接到同一个引脚会导致合成时出现“多驱动错误”。
因此,为了解决这个问题,我创建了第三个模块作为中间控制器,它将两个模块与另一个变量连接起来,以选择要操作的模块。
这对输出很有效,但在读取输入时,我总是得到 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用于选择驱动模块,其他是模块的输入和输出。