LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;

USE  IEEE.STD_LOGIC_ARITH.all;

USE  IEEE.STD_LOGIC_UNSIGNED.all;

 

entity ball is

   PORT(

      signal red,green,blue : OUT std_logic;

                  signal vert_sync_out : in std_logic;

                  signal pixel_row, pixel_column : in std_logic_vector(9 downto 0));

end ball;

 

architecture behavior of ball is

 

      signal reset, Ball_on, Direction : std_logic;

      signal Size                      : std_logic_vector(9 DOWNTO 0); 

      signal Ball_Y_motion             : std_logic_vector(9 DOWNTO 0);

      signal Ball_Y_pos, Ball_X_pos    : std_logic_vector(9 DOWNTO 0);

  

begin

 

      Size <= CONV_STD_LOGIC_VECTOR(8,10);

      Ball_X_pos <= CONV_STD_LOGIC_VECTOR(320,10);

 

      Red   <= '1';

      Green <= NOT Ball_on;

      Blue  <= NOT Ball_on;

 

      RGB_Display:

      Process (Ball_X_pos, Ball_Y_pos, pixel_column, pixel_row, Size)

      begin

                  IF ('0' & Ball_X_pos <= pixel_column + Size) AND

                  (Ball_X_pos + Size >= '0' & pixel_column) AND

                  ('0' & Ball_Y_pos <= pixel_row + Size) AND

                  (Ball_Y_pos + Size >= '0' & pixel_row ) THEN

                              Ball_on <= '1';

      ELSE

                  Ball_on <= '0';

                  END IF;

      end process RGB_Display;

 

      Move_Ball:

      process

      begin

      -- Move ball once every vertical sync

      WAIT UNTIL vert_sync_out'event and vert_sync_out = '1';

      -- Bounce off top or bottom of screen

      IF ('0' & Ball_Y_pos) >= CONV_STD_LOGIC_VECTOR(480,10) - Size THEN

                  Ball_Y_motion <= not CONV_STD_LOGIC_VECTOR(4,10);

      ELSIF Ball_Y_pos <= Size + Size THEN

                  Ball_Y_motion <= CONV_STD_LOGIC_VECTOR(4,10);

      END IF;

      -- Compute next ball Y position

                  Ball_Y_pos <= Ball_Y_pos + Ball_Y_motion;

      end process Move_Ball;

 

END behavior;