【发布时间】:2013-09-01 15:11:37
【问题描述】:
我从 Micronova (http://micro-nova.com/mercury) 购买了一块 Spartan 3A 开发板,但在连接其 SRAM 时遇到了一些问题。
该板有 30 个与赛普拉斯 SRAM 共享的 GPIO 引脚和两个用于在它们之间切换的引脚。
显然,将两个 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用于选择驱动模块,其余为模块的输入和输出。
【问题讨论】: