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

architecture rtl of antic_tb is

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

signal reset_n : std_logic;
signal clk_a : std_logic;

signal cpu_addr : std_logic_vector(15 downto 0);
signal cpu_data_in : std_logic_vector(7 downto 0);
signal cpu_wr_en : std_logic;
signal memory_ready_antic : std_logic;
signal memory_ready_cpu : std_logic;
signal memory_data_in : std_logic_vector(7 downto 0);
signal antic_enable_179 : std_logic;
signal enable_179_memwait : std_logic;
signal cpu_shared_enable : std_logic;
signal an : std_logic_vector(2 downto 0);
signal cc_out_orig : std_logic;
signal cc_out_used : std_logic;
signal cc_out_used_doubled : std_logic;
signal fetch : std_logic;
signal fetch_address : std_logic_vector(15 downto 0);
signal refresh : std_logic;
signal hcount : std_logic_vector(7 downto 0);

begin
p_clk_gen_a : process
begin
clk_a <= '1';
wait for CLK_A_PERIOD/2;
clk_a <= '0';
wait for CLK_A_PERIOD - (CLK_A_PERIOD/2 );
end process;

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

-- signal cpu_addr : std_logic_vector(15 downto 0);
-- signal cpu_data_in : std_logic_vector(7 downto 0);
-- signal cpu_wr_en : std_logic;
-- signal memory_ready_antic : std_logic;
-- memory_ready_antic <= '0';
-- signal memory_ready_cpu : std_logic;
memory_ready_cpu <= cpu_shared_enable and not(fetch) and not(refresh);
-- signal memory_data_in : std_logic_vector(7 downto 0);
-- memory_data_in <= (others=>'0');
-- signal an : std_logic_vector(2 downto 0);
-- signal cc_out_orig : std_logic;
-- signal cc_out_used : std_logic;
-- signal cc_out_used_doubled : std_logic;
-- signal fetch : std_logic;
-- signal fetch_address : std_logic_vector(!5 downto 0);

process_setup_antic : process
begin
cpu_wr_en <= '0';

wait for 1100ns;

wait until cpu_shared_enable = '1';
cpu_wr_en <= '1';
cpu_addr<= x"d402";
cpu_data_in <= x"00";
wait until cpu_shared_enable = '0';
cpu_wr_en <= '0';

wait until cpu_shared_enable = '1';
cpu_wr_en <= '1';
cpu_addr<= x"d403";
cpu_data_in <= x"06";
wait until cpu_shared_enable = '0';
cpu_wr_en <= '0';

wait until cpu_shared_enable = '1';
cpu_wr_en <= '1';
cpu_addr <= x"d400";
cpu_data_in <= x"62";
wait until cpu_shared_enable = '0';
cpu_wr_en <= '0';

wait until cpu_shared_enable = '1';
wait for clk_a_period*7;
cpu_wr_en <= '1';
cpu_addr <= x"d40a";
cpu_data_in <= x"11";
wait for clk_a_period*1;
cpu_wr_en <= '0';

wait for 100000000us;

end process;

process_antic_dl_data : process
variable fetch_pos : integer;
type MEM is array(0 to 1000) of std_logic_vector(7 downto 0);
variable fetch_data : MEM;
begin
-- fetch_data(0) := x"42";
-- fetch_data(1) := x"11";
-- fetch_data(2) := x"22";
-- fetch_data(3) := x"33";
-- fetch_data(4) := x"44";
-- fetch_data(5) := x"55";
-- fetch_data(6) := x"00";
-- fetch_data(7) := x"07";
-- fetch_data(8) := x"92"; -- char1
-- fetch_data(9) := x"34"; -- char2
-- fetch_data(10) := x"ff"; -- char1 data
-- fetch_data(11) := x"d6"; -- char3
-- fetch_data(12) := x"00"; -- char2 data
-- fetch_data(13) := x"78"; -- char4
-- fetch_data(14) := x"ff"; -- char3 data
-- fetch_data(15):= x"12"; -- char5
-- fetch_data(16):= x"00"; -- char4 data
-- fetch_data(17):= x"12"; -- char6
-- fetch_data(18):= x"a5"; -- char5 data
-- fetch_data(19):= x"12"; -- char7
-- fetch_data(20):= x"a5"; -- char6 data
-- fetch_data(21):= x"12"; -- char8

-- fetch_data(0) := x"42";
-- fetch_data(1) := x"00";
-- fetch_data(2) := x"07";
-- fetch_data(3) := x"92"; -- char1
-- fetch_data(4) := x"34"; -- char2
-- fetch_data(5) := x"ff"; -- char1 data
-- fetch_data(6) := x"d6"; -- char3
-- fetch_data(7) := x"00"; -- char2 data
-- fetch_data(8) := x"78"; -- char4
-- fetch_data(9) := x"ff"; -- char3 data
-- fetch_data(10):= x"12"; -- char5
-- fetch_data(11):= x"00"; -- char4 data
-- fetch_data(12):= x"12"; -- char6
-- fetch_data(13):= x"a5"; -- char5 data
-- fetch_data(14):= x"12"; -- char7
-- fetch_data(15):= x"a5"; -- char6 data
-- fetch_data(16):= x"12"; -- char8

fetch_data(0) := x"42";
fetch_data(1) := x"00";
fetch_data(2) := x"07";
fetch_data(3) := x"ff"; -- char1
fetch_data(4) := x"55"; -- char2
fetch_data(5) := x"ff"; -- char1 data
fetch_data(6) := x"ff"; -- char3
fetch_data(7) := x"ff"; -- char2 data
fetch_data(8) := x"ff"; -- char4
fetch_data(9) := x"ff"; -- char3 data
fetch_data(10):= x"ff"; -- char5
fetch_data(11):= x"ff"; -- char4 data
fetch_data(12):= x"ff"; -- char6
fetch_data(13):= x"ff"; -- char5 data
fetch_data(14):= x"ff"; -- char7
fetch_data(15):= x"ff"; -- char6 data
fetch_data(16):= x"ff"; -- char8

fetch_pos := 0;

memory_ready_antic <= '0';
memory_data_in <= (others=>'0');
loop
wait until fetch='1';
--wait for fetch_delay(fetch_pos);
--wait for clk_a_period*9;
wait for clk_a_period*3;
memory_data_in <= fetch_data(fetch_pos);
memory_ready_antic <= '1';
wait until fetch = '0';
memory_ready_antic <= '0';
memory_data_in <= (others=>'0');

fetch_pos := fetch_pos +1;
end loop;
end process;
enables : entity work.shared_enable
GENERIC MAP(cycle_length => 16)
PORT MAP(CLK => CLK_a,
RESET_N => RESET_N,
MEMORY_READY_CPU => MEMORY_READY_CPU,
MEMORY_READY_ANTIC => MEMORY_READY_ANTIC,
ANTIC_REFRESH => refresh,
PAUSE_6502 => '0',
THROTTLE_COUNT_6502 => "000001",
ANTIC_ENABLE_179 => ANTIC_ENABLE_179,
oldcpu_enable => ENABLE_179_MEMWAIT,
CPU_ENABLE_OUT => CPU_SHARED_ENABLE);

antic1: entity work.antic
generic map
(
cycle_length => 16
)
port map
(
CLK => clk_a,
ADDR => cpu_addr(3 downto 0),
CPU_DATA_IN => cpu_data_in, -- for writes
WR_EN => cpu_wr_en,
RESET_N => reset_n,
MEMORY_READY_ANTIC => memory_ready_antic,
MEMORY_READY_CPU => memory_ready_cpu,
MEMORY_DATA_IN => memory_data_in, -- for fetches
ANTIC_ENABLE_179 => antic_enable_179,
PAL => '1',
lightpen => '0',
-- CPU interface
DATA_OUT => open,
NMI_N_OUT => open,
ANTIC_READY => open,
-- GTIA interface
AN => an,
COLOUR_CLOCK_ORIGINAL_OUT => cc_out_orig,
COLOUR_CLOCK_OUT => cc_out_used,
HIGHRES_COLOUR_CLOCK_OUT => cc_out_used_doubled,
-- DMA fetch
dma_fetch_out => fetch,
dma_address_out => fetch_address,
-- refresh
refresh_out =>refresh,
-- for debugging
dma_clock_out => open,
hcount_out => hcount,
vcount_out => open
);

end rtl;

    (1-1/1)