Project

General

Profile

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;

    (1-1/1)