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 sallymax_tb is
end;

architecture rtl of sallymax_tb is

constant CLK_BUS_PERIOD : time := 1 us / (1.79);
constant CLK_FAST_PERIOD : time := 1 us / (1.79*32);

signal reset_n : std_logic;
signal clk_phi0 : std_logic;
signal clk_fast : std_logic;

signal clk_routed : std_logic;

signal bus_addr : std_logic_vector(15 downto 0);
signal bus_data : std_logic_vector(7 downto 0);
signal bus_data_out : std_logic_vector(7 downto 0);
signal bus_drive : std_logic;
signal bus_rw : std_logic;

signal bus_phi1 : std_logic;
signal bus_phi2 : std_logic;

signal slave_request : std_logic;
signal slave_addr : std_logic_vector(15 downto 0);
signal slave_data_in : std_logic_vector(7 downto 0);
signal slave_data_out : std_logic_vector(7 downto 0);
signal slave_rw_n : std_logic;
signal slave_cs : std_logic;

signal halt_n : std_logic;

begin
p_clk_gen_b : process
begin
clk_phi0 <= '1';
wait for CLK_BUS_PERIOD/2;
clk_phi0 <= '0';
wait for CLK_BUS_PERIOD - (CLK_BUS_PERIOD/2 );
end process;

p_clk_gen_f : 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;

thebigone: entity work.sallymax
port map
(
PHI0 => clk_phi0,
RST_N => reset_n,
CLK_OUT => CLK_ROUTED,
CLK_SLOW => CLK_ROUTED,


A => BUS_ADDR,
D => BUS_DATA,
W_N => BUS_RW,

RDY => '1',
HALT_N => halt_n,
NMI_N => '1',
IRQ_N => '1',
S0 => '1',

phi2 => bus_phi2,
phi1 => bus_phi1
);

busadapt : entity work.slave_timing_6502
port map
(
CLK => clk_fast,
RESET_N => reset_n,
PHI2 => bus_phi2,
bus_addr => bus_addr,
bus_data => bus_data,
bus_cs => '1',
bus_rw_n => bus_rw,

bus_data_out => bus_data_out,
bus_drive => bus_drive,

BUS_REQUEST => slave_request,
ADDR_IN => slave_addr,
DATA_IN => slave_data_in,
RW_N => slave_rw_n,
CS => slave_cs,

ENABLE_CYCLE => open,

DATA_OUT => slave_data_out
);

bus_data <= bus_data_out when bus_drive='1' else (others=>'Z');

process
begin
halt_n <= '1';
wait until reset_n='1';

wait until slave_request='1';
slave_data_out <= x"00";
wait until slave_request='0';

wait until slave_request='1';
slave_data_out <= x"e0";
wait until slave_request='0';

wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';

wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';
wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';

wait until slave_request='1';
slave_data_out <= x"ea";
wait until slave_request='0';

wait until bus_phi2='1';
wait until bus_phi2='0';
wait for 200ns;
halt_n <= '0';

wait for 20us;
end process;

end rtl;

(3-3/4)