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

architecture rtl of anticmax_tb is

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

constant CLK_FAST_BUS_PERIOD : time := 1 us / (1.79*2);

signal reset_n : std_logic;
signal clk_cart : 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_PHI2: std_logic;
signal BUS_CS_N: std_logic;
signal BUS_RW: std_logic;

-- 6502 bus other side
signal enable_179_early : std_logic;
signal cart_request : std_logic;
signal pbi_addr_out : std_logic_vector(15 downto 0);
signal cart_data_write : std_logic_vector(7 downto 0);
signal pbi_write_enable : std_logic;
signal CS_N : std_logic;
signal cart_data_read : std_logic_vector(7 downto 0);
signal cart_complete : std_logic;

signal bus_data_in : std_logic_vector(7 downto 0);
signal bus_data_out : std_logic_vector(7 downto 0);
signal bus_data_oe : std_logic;
signal bus_addr_out : std_logic_vector(15 downto 0);
signal bus_addr_oe : std_logic;
signal bus_write_n : std_logic;
signal bus_control_oe : std_logic;
signal bus_cs_n_out : std_logic;

signal iox_sda : std_logic;
signal iox_scl : std_logic;

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

p_clk_gen_c : process
begin
clk_fast <= '1';
wait for CLK_FAST_BUS_PERIOD/2;
clk_fast <= '0';
wait for CLK_FAST_BUS_PERIOD - (CLK_FAST_BUS_PERIOD/2 );
end process;

reset_n <= '0', '1' after 1000ns;

process_enable : process
begin
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '1'; -- HERE!
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';


wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';


wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';


wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';
wait until clk_cart'event and clk_cart = '1';
enable_179_early <= '0';

end process;

process_setup_sram : process
begin
cart_request <= '0';
pbi_addr_out <= (others=>'0');
cart_data_write <= (others=>'0');
pbi_write_enable <= '0';

wait for 6000ns;

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '1';
pbi_addr_out <= x"D000";
cart_data_write <= x"fe";
pbi_write_enable <= '1';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '1';
pbi_write_enable <= '0';

wait until enable_179_early'event and enable_179_early = '1';
pbi_addr_out <= x"D001";

wait until enable_179_early'event and enable_179_early = '1';
--cart_data_write <= x"ec";
cart_data_write <= x"ef";
pbi_write_enable <= '1';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '1';
pbi_addr_out <= x"D008";
cart_data_write <= x"40";
pbi_write_enable <= '1';

wait until enable_179_early'event and enable_179_early = '1';
pbi_write_enable <= '0';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '1';
pbi_addr_out <= x"D00a";

wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';
wait until enable_179_early'event and enable_179_early = '1';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '0';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '1';
pbi_addr_out <= x"D00f";
cart_data_write <= x"03";
pbi_write_enable <= '1';

wait until enable_179_early'event and enable_179_early = '1';
cart_request <= '0';
pbi_write_enable <= '0';

wait for 100000000us;

end process;

thebigone: entity work.anticmax
port map
(
PHI2 => BUS_PHI2,
RST => not(reset_n),
CLK_OUT => CLK_ROUTED,
CLK_SLOW => CLK_ROUTED,


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

AN => open,
HALT_N =>open,

FO0 => clk_fast, -- TODO, phase vs phi2?
LP_N => '1',
RNMI_N => '1',
NC => (others=>'0')
);

bus_adaptor : ENTITY work.timing6502
GENERIC MAP
(
CYCLE_LENGTH => 32,
CONTROl_BITS => 1
)
PORT MAP
(
CLK => clk_cart,
RESET_N => reset_n,
-- FPGA side
ENABLE_179_EARLY =>enable_179_early,
REQUEST => cart_request,
ADDR_IN => pbi_addr_out,
DATA_IN => cart_data_write,
WRITE_IN => pbi_write_enable,
CONTROL_N_IN(0) => CS_N,
DATA_OUT => cart_data_read,
COMPLETE => cart_complete,
-- 6502 side
BUS_DATA_IN => BUS_DATA,
BUS_PHI1 => open,
BUS_PHI2 => BUS_PHI2,
BUS_SUBCYCLE => open,
BUS_ADDR_OUT => bus_addr_out,
BUS_ADDR_OE => bus_addr_oe,
BUS_DATA_OUT => bus_data_out,
BUS_DATA_OE => bus_data_oe,
BUS_WRITE_N => BUS_RW,
BUS_CONTROL_OE => BUS_CONTROL_OE,
BUS_CONTROL_N(0) => BUS_CS_N_OUT
);
BUS_ADDR <= bus_addr_out(15 downto 0) when bus_addr_oe='1' else (others=>'Z');
BUS_DATA <= bus_data_out when bus_data_oe='1' else (others=>'Z');
CS_N <= '0' when pbi_addr_out(15 downto 8)= x"D0" else '1';
BUS_CS_N <= BUS_CS_N_OUT when BUS_CONTROL_OE='1' else 'Z';

end rtl;

(1-1/4)