Initial commit

This commit is contained in:
matthias
2009-01-15 19:17:56 +00:00
commit a5dbc23f5e
104 changed files with 29057 additions and 0 deletions

128
memory.vhd Executable file
View File

@@ -0,0 +1,128 @@
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 15:22:46 12/30/2008
-- Design Name:
-- Module Name: memory - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity memory is
Port (
-- interface to Z80 bus
DATA_I : in STD_LOGIC_VECTOR (7 downto 0);
DATA_O : out STD_LOGIC_VECTOR (7 downto 0);
ADDR_I : in STD_LOGIC_VECTOR (15 downto 0);
RD_N : in STD_LOGIC;
WR_N : in STD_LOGIC;
MREQ_N : in STD_LOGIC;
CLK : in STD_LOGIC;
CLKEN : in STD_LOGIC;
-- interface to video generator
VID_DATA_O : out STD_LOGIC_VECTOR(7 downto 0);
VID_ADDR_I : in STD_LOGIC_VECTOR(9 downto 0);
VID_CLK : in STD_LOGIC);
end memory;
architecture Behavioral of memory is
component monitorrom IS
port ( clka: IN std_logic;
addra: IN std_logic_VECTOR(10 downto 0);
douta: OUT std_logic_VECTOR(7 downto 0);
ena: in std_logic);
END component;
component basic_rom
port (
clka : IN std_logic;
addra : IN std_logic_VECTOR(12 downto 0);
douta : OUT std_logic_VECTOR(7 downto 0);
ena : in std_logic);
end component;
component ram2kx8 IS
port ( clka: IN std_logic;
dina: IN std_logic_VECTOR(7 downto 0);
addra: IN std_logic_VECTOR(10 downto 0);
wea: IN std_logic_VECTOR(0 downto 0);
douta: OUT std_logic_VECTOR(7 downto 0);
ena: in std_logic;
clkb: IN std_logic;
dinb: IN std_logic_VECTOR(7 downto 0);
addrb: IN std_logic_VECTOR(10 downto 0);
web: IN std_logic_VECTOR(0 downto 0);
doutb: OUT std_logic_VECTOR(7 downto 0));
END component;
signal monitorrom_data, basicrom_data, ram2kx8_1_dout, ram2kx8_2_dout, ram2kx8_1_doutb: std_logic_vector(7 downto 0);
signal ram2kx8_1_addrb : std_logic_vector(10 downto 0);
signal ram2kx8_1_we, ram2kx8_2_we: std_logic_vector(0 downto 0);
begin
monitorrom_inst: monitorrom port map( clka => CLK,
addra => ADDR_I(10 downto 0),
douta => monitorrom_data,
ena => CLKEN);
basicrom_inst : basic_rom port map (
clka => CLK,
addra => ADDR_I(12 downto 0),
douta => basicrom_data,
ena => CLKEN);
ram2kx8_1_we(0) <= '1' when (WR_N = '0') and (ADDR_I(15 downto 11) = "00001") and (MREQ_N = '0') else '0';
ram2kx8_2_we(0) <= '1' when (WR_N = '0') and (ADDR_I(15 downto 11) = "00010") and (MREQ_N = '0') else '0';
ram2kx8_1_addrb <= '0' & VID_ADDR_I;
ram2kx8_inst_1: ram2kx8 port map( clka => CLK,
dina => DATA_I,
addra => ADDR_I(10 downto 0),
wea => ram2kx8_1_we,
douta => ram2kx8_1_dout,
ena => CLKEN,
clkb => VID_CLK,
dinb => "00000000",
addrb => ram2kx8_1_addrb,
web => "0",
doutb => ram2kx8_1_doutb);
ram2kx8_inst_2: ram2kx8 port map( clka => CLK,
dina => DATA_I,
addra => ADDR_I(10 downto 0),
wea => ram2kx8_2_we,
douta => ram2kx8_2_dout,
ena => CLKEN,
clkb => VID_CLK,
dinb => "00000000",
addrb => "00000000000",
web => "0",
doutb => open);
DATA_O <= monitorrom_data when ADDR_I(15 downto 11) = "00000" else
ram2kx8_1_dout when ADDR_I(15 downto 11) = "00001" else
ram2kx8_2_dout when ADDR_I(15 downto 11) = "00010" else
basicrom_data when ADDR_I(15 downto 13) = "111" else
"XXXXXXXX";
VID_DATA_O <= ram2kx8_1_doutb;
end Behavioral;