library ieee; 
library analog_io;

use ieee.std_logic_1164.all;
use analog_io.comps_pkg.all; 
use analog_io.ks8695px_signals_pkg.all;
use analog_io.ks8695px_bfm_pkg.all;

entity ks8695px_tb is 
end ks8695px_tb; 
 
architecture ks8695px_tb_hdl of ks8695px_tb is 	
	constant cpu_clock_frequency_mhz 			: real := 25.0000; -- Mhz
	constant cpu_clock_period_ns   				: time := 1000 ns / cpu_clock_frequency_mhz;	
	
	constant mb_fpga_oscillator_frequency_mhz	: real := 80.0000; -- Mhz
	constant mb_fpga_oscillator_period_ns   	: time := 1000 ns / mb_fpga_oscillator_frequency_mhz;	
begin  

	
   --------------------------------------
   -- build up a basic free-running clock
   --------------------------------------

   ks8695px_clock_generator	: process (bfm_clock)
   begin
		bfm_clock <= not bfm_clock after (cpu_clock_period_ns / 2); 
   end process ks8695px_clock_generator;
   	
   
	mhz_80_oscillator : process(mb_fpga_clock_p, mb_fpga_clock_n)
	begin			   
		mb_fpga_clock_p <= not mb_fpga_clock_p after (mb_fpga_oscillator_period_ns / 2); 
		mb_fpga_clock_n <= not mb_fpga_clock_n after (mb_fpga_oscillator_period_ns / 2); 
	end process mhz_80_oscillator;	

   -----------------------------
   -- instantiate the test code
   -----------------------------

   tst: testcode;

   --------------------------
   -- connect up the IBC BFM
   --------------------------
   
   cpu: ks8695px_bfm
   port map ( 
      clock			=> bfm_clock,
      async_reset_n	=> async_reset_n,
      address_out	=> address,
      data_io		=> data_io,
	  cs_n_out		=> cs_n,
	  rd_n_out		=> rd_n,
	  wr_1_n_out	=> wr_1_n,	
	  wr_0_n_out	=> wr_0_n,
      rdy_n_in		=> stall_n
    ); 


   -------------------------------------------------------
   -- Connectup a basic response module which acts like a
   -- memory element for test and example purposes
   -------------------------------------------------------

 	dut: biosa
	port map (
		async_reset_n_ipad 	=> async_reset_n,
		fpga_clock_n_ipad 	=> mb_fpga_clock_n,
		fpga_clock_p_ipad	=> mb_fpga_clock_p,
		cs_n_ipad 			=> cs_n,
		rd_n_ipad 			=> rd_n,
		wr_1_n_ipad 		=> wr_1_n,  
		wr_0_n_ipad 		=> wr_0_n,
		address_ipads 		=> address,
		data_iopads	 		=> data_io,	 
		stall_n_opad        => stall_n,
		interrupt_n_opad	=> interrupt_n,
		spi_sdo_opad		=> spi_dio,
		spi_dio_ipad		=> spi_dio,
		spi_clock_opad		=> spi_clk,
		spi_cs_n_opad		=> spi_cs
	);  				 
   
end ks8695px_tb_hdl;  

