Micronova ( http://micro-nova.com/mercury ) から Spartan 3A 開発ボードを購入しましたが、その SRAM とのインターフェイスに問題があります。
このボードには、Cypress SRAM と共有される 30 個の GPIO ピンと、それらを切り替えるための 2 つのピンがあります。
明らかに、2 つの VHDL モジュール (1 つは SRAM の制御用、もう 1 つは GPIO の駆動用) を同じピンに接続すると、合成時に「複数のドライバー エラー」が発生します。
そこで、この問題を解決するために、どちらのモジュールを操作するかを選択するために、両方のモジュールを別の変数に接続する中間コントローラーとして 3 番目のモジュールを作成しました。
これは出力にはうまく機能しますが、入力の読み取りに関しては、実際の値とは関係なく、常に 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 は駆動モジュールの選択用、その他はモジュールの入力と出力です。