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;