|
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.std_logic_unsigned.all;
|
|
use ieee.numeric_std.all;
|
|
use ieee.std_logic_textio.all;
|
|
|
|
library std_developerskit ; -- used for to_string
|
|
-- use std_developerskit.std_iopak.all;
|
|
|
|
entity sram_tb is
|
|
end;
|
|
|
|
architecture rtl of sram_tb is
|
|
|
|
constant CLK_PERIOD : time := 1 us / (14);
|
|
constant CLK_FAST_PERIOD : time := 1 us / (14*7);
|
|
|
|
signal reset_n : std_logic;
|
|
signal clk : std_logic;
|
|
signal clk_fast : std_logic;
|
|
|
|
signal EXT_SRAM_ADDR: std_logic_vector(19 downto 0);
|
|
signal EXT_SRAM_DATA: std_logic_vector(7 downto 0);
|
|
signal EXT_SRAM_CE: std_logic;
|
|
signal EXT_SRAM_OE: std_logic;
|
|
signal EXT_SRAM_WE: std_logic;
|
|
|
|
-- 65816 bus
|
|
signal veronica_address : std_logic_vector(23 downto 0);
|
|
signal veronica_read_data : std_logic_vector(7 downto 0);
|
|
signal veronica_write_data : std_logic_vector(7 downto 0);
|
|
signal veronica_w_n : std_logic;
|
|
signal veronica_config_w_n : std_logic;
|
|
|
|
-- 6502 bus
|
|
signal atari_bus_request : std_logic;
|
|
signal atari_address : std_logic_vector(12 downto 0);
|
|
signal atari_data_bus : std_logic_vector(7 downto 0);
|
|
signal atari_read_data : std_logic_vector(7 downto 0);
|
|
signal atari_write_data : std_logic_vector(7 downto 0);
|
|
signal atari_w_n : std_logic;
|
|
signal atari_config_w_n : std_logic;
|
|
signal atari_s4 : std_logic;
|
|
signal atari_s5 : std_logic;
|
|
signal atari_ctl : std_logic;
|
|
|
|
-- address decode
|
|
signal veronica_config_select : std_logic;
|
|
signal veronica_sram_select : std_logic;
|
|
signal veronica_sram_address: std_logic_vector(16 downto 0);
|
|
signal atari_config_select : std_logic;
|
|
signal atari_sram_select : std_logic;
|
|
signal atari_sram_address: std_logic_vector(16 downto 0);
|
|
|
|
-- veronica config
|
|
signal veronica_window_address : std_logic;
|
|
signal veronica_bank_half_select : std_logic;
|
|
signal veronica_config_data : std_logic_vector(7 downto 0);
|
|
|
|
-- atari config
|
|
signal atari_banka_enable : std_logic;
|
|
signal atari_bank8_enable : std_logic;
|
|
signal atari_bank_half_select : std_logic;
|
|
signal atari_config_data : std_logic_vector(7 downto 0);
|
|
|
|
-- common config
|
|
signal common_sem : std_logic;
|
|
signal common_bank_select : std_logic;
|
|
|
|
-- cart driving
|
|
signal cart_bus_data_out : std_logic_vector(7 downto 0);
|
|
signal cart_bus_drive : std_logic;
|
|
|
|
-- sram driving
|
|
signal sram_write_data : std_logic_vector(7 downto 0);
|
|
signal sram_drive_data : std_logic;
|
|
signal sram_read_data : std_logic_vector(7 downto 0);
|
|
|
|
begin
|
|
p_clk_gen_a : process
|
|
begin
|
|
clk <= '1';
|
|
wait for CLK_PERIOD/2;
|
|
clk <= '0';
|
|
wait for CLK_PERIOD - (CLK_PERIOD/2 );
|
|
end process;
|
|
|
|
p_clk_gen_b : process
|
|
begin
|
|
clk_fast <= '1';
|
|
wait for CLK_FAST_PERIOD/2;
|
|
clk_fast <= '0';
|
|
wait for CLK_FAST_PERIOD - (CLK_FAST_PERIOD/2 );
|
|
end process;
|
|
|
|
reset_n <= '0', '1' after 1000ns;
|
|
|
|
process_setup_sram : process
|
|
begin
|
|
atari_bus_request <= '0';
|
|
atari_sram_select <= '1';
|
|
atari_sram_address <= (others=>'0');
|
|
atari_w_n <= '1';
|
|
atari_write_data <= (others=>'0');
|
|
|
|
veronica_sram_address <= (others=>'0');
|
|
veronica_sram_select <= '1';
|
|
veronica_w_n <= '1';
|
|
veronica_write_data <= (others=>'0');
|
|
|
|
wait for 1100ns;
|
|
|
|
wait until clk'event and clk = '1';
|
|
atari_bus_request <= '1';
|
|
atari_w_n <= '0';
|
|
atari_sram_address<= '0'&x"D402";
|
|
atari_write_data <= x"56";
|
|
|
|
wait until clk'event and clk = '1';
|
|
atari_w_n <= '0';
|
|
atari_sram_address<= '0'&x"C313";
|
|
atari_write_data <= x"65";
|
|
|
|
wait until clk'event and clk = '1';
|
|
atari_w_n <= '0';
|
|
atari_sram_address<= '0'&x"D402";
|
|
atari_write_data <= x"56";
|
|
|
|
wait until clk'event and clk = '1';
|
|
atari_bus_request <= '0';
|
|
|
|
wait for 100000000us;
|
|
|
|
end process;
|
|
|
|
glue6: entity work.sram_mux
|
|
port map
|
|
(
|
|
clk => clk,
|
|
clk7x => clk_fast,
|
|
reset_n => reset_n,
|
|
|
|
sram_addr => EXT_SRAM_ADDR,
|
|
sram_data_out => sram_write_data,
|
|
sram_drive_data => sram_drive_data,
|
|
sram_we_n => EXT_SRAM_WE,
|
|
|
|
atari_bus_request => atari_bus_request,
|
|
atari_sram_select => atari_sram_select,
|
|
atari_address => atari_sram_address,
|
|
atari_w_n => atari_w_n,
|
|
atari_write_data => atari_write_data,
|
|
|
|
veronica_address => veronica_sram_address,
|
|
veronica_sram_select => veronica_sram_select,
|
|
veronica_w_n => veronica_w_n,
|
|
veronica_write_data => veronica_write_data
|
|
);
|
|
|
|
EXT_SRAM_DATA <= sram_write_data when sram_drive_data='1' else (others=>'Z');
|
|
EXT_SRAM_OE <= '0';
|
|
sram_read_data <= EXT_SRAM_DATA;
|
|
|
|
end rtl;
|
|
|