---------------------------------------------------------------------------------- -- Company: Cal Poly San Luis Obispo -- Engineer: Chase Timmins / Shivani Ganti -- -- Create Date: 11/28/2017 04:49:07 PM -- Design Name: -- Module Name: Start_Counter - Behavioral -- Project Name: Pong_Game -- Description: -- -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx leaf cells in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Start_Counter is Port (Clk : in STD_LOGIC; CEN : in STD_LOGIC; RST : in STD_LOGIC; WA : out STD_LOGIC_VECTOR (10 DOWNTO 0); WD : out STD_LOGIC_VECTOR (7 DOWNTO 0)); end Start_Counter; architecture Behavioral of Start_Counter is signal Arb_Count : std_logic_vector (10 downto 0); begin -- Counting: Simple counting process that acts as the control input for the mux counting: process (Clk,RST) variable col : unsigned (5 downto 0) := "000000"; variable row : unsigned (4 downto 0) := "00000"; begin if (rising_edge(Clk)) then if (CEN = '1') then if ((col = "101000") and (not (row = "11110"))) then col := "000000"; row := row + 1; elsif ((col = "101000") and (row = "11110")) then col := "000000"; row := "00000"; else col := col + 1; end if; end if; -- This conversion is used in order to obtain the correct address Arb_Count <= std_logic_vector(to_unsigned(to_integer(col) + to_integer(row)*64,Arb_Count'length)); end if; end process; -- Multiplexer: Outputs addresses and color data to the VGA Driver multiplexer: process (Arb_Count) begin case (Arb_Count) is when "00011000001" => WA <= Arb_Count; WD <= X"FF"; when "00011000010" => WA <= Arb_Count; WD <= X"FF"; when "00011000011" => WA <= Arb_Count; WD <= X"FF"; when "00011000100" => WA <= Arb_Count; WD <= X"FF"; when "00011000101" => WA <= Arb_Count; WD <= X"FF"; when "00011000110" => WA <= Arb_Count; WD <= X"FF"; when "00011000111" => WA <= Arb_Count; WD <= X"FF"; when "00011001100" => WA <= Arb_Count; WD <= X"FF"; when "00011001101" => WA <= Arb_Count; WD <= X"FF"; when "00011001110" => WA <= Arb_Count; WD <= X"FF"; when "00011001111" => WA <= Arb_Count; WD <= X"FF"; when "00011010000" => WA <= Arb_Count; WD <= X"FF"; when "00011010001" => WA <= Arb_Count; WD <= X"FF"; when "00011010101" => WA <= Arb_Count; WD <= X"FF"; when "00011010110" => WA <= Arb_Count; WD <= X"FF"; when "00011011011" => WA <= Arb_Count; WD <= X"FF"; when "00011011100" => WA <= Arb_Count; WD <= X"FF"; when "00011100000" => WA <= Arb_Count; WD <= X"FF"; when "00011100001" => WA <= Arb_Count; WD <= X"FF"; when "00011100010" => WA <= Arb_Count; WD <= X"FF"; when "00011100011" => WA <= Arb_Count; WD <= X"FF"; when "00011100100" => WA <= Arb_Count; WD <= X"FF"; when "00011100101" => WA <= Arb_Count; WD <= X"FF"; when "00011100110" => WA <= Arb_Count; WD <= X"FF"; when "00100000001" => WA <= Arb_Count; WD <= X"FF"; when "00100000010" => WA <= Arb_Count; WD <= X"FF"; when "00100000011" => WA <= Arb_Count; WD <= X"FF"; when "00100000100" => WA <= Arb_Count; WD <= X"FF"; when "00100000101" => WA <= Arb_Count; WD <= X"FF"; when "00100000110" => WA <= Arb_Count; WD <= X"FF"; when "00100000111" => WA <= Arb_Count; WD <= X"FF"; when "00100001000" => WA <= Arb_Count; WD <= X"FF"; when "00100001011" => WA <= Arb_Count; WD <= X"FF"; when "00100001100" => WA <= Arb_Count; WD <= X"FF"; when "00100001101" => WA <= Arb_Count; WD <= X"FF"; when "00100001110" => WA <= Arb_Count; WD <= X"FF"; when "00100001111" => WA <= Arb_Count; WD <= X"FF"; when "00100010000" => WA <= Arb_Count; WD <= X"FF"; when "00100010001" => WA <= Arb_Count; WD <= X"FF"; when "00100010010" => WA <= Arb_Count; WD <= X"FF"; when "00100010101" => WA <= Arb_Count; WD <= X"FF"; when "00100010110" => WA <= Arb_Count; WD <= X"FF"; when "00100010111" => WA <= Arb_Count; WD <= X"FF"; when "00100011011" => WA <= Arb_Count; WD <= X"FF"; when "00100011100" => WA <= Arb_Count; WD <= X"FF"; when "00100011111" => WA <= Arb_Count; WD <= X"FF"; when "00100100000" => WA <= Arb_Count; WD <= X"FF"; when "00100100001" => WA <= Arb_Count; WD <= X"FF"; when "00100100010" => WA <= Arb_Count; WD <= X"FF"; when "00100100011" => WA <= Arb_Count; WD <= X"FF"; when "00100100100" => WA <= Arb_Count; WD <= X"FF"; when "00100100101" => WA <= Arb_Count; WD <= X"FF"; when "00100100110" => WA <= Arb_Count; WD <= X"FF"; when "00101000001" => WA <= Arb_Count; WD <= X"FF"; when "00101000010" => WA <= Arb_Count; WD <= X"FF"; when "00101000111" => WA <= Arb_Count; WD <= X"FF"; when "00101001000" => WA <= Arb_Count; WD <= X"FF"; when "00101001011" => WA <= Arb_Count; WD <= X"FF"; when "00101001100" => WA <= Arb_Count; WD <= X"FF"; when "00101010001" => WA <= Arb_Count; WD <= X"FF"; when "00101010010" => WA <= Arb_Count; WD <= X"FF"; when "00101010101" => WA <= Arb_Count; WD <= X"FF"; when "00101010110" => WA <= Arb_Count; WD <= X"FF"; when "00101010111" => WA <= Arb_Count; WD <= X"FF"; when "00101011011" => WA <= Arb_Count; WD <= X"FF"; when "00101011100" => WA <= Arb_Count; WD <= X"FF"; when "00101011111" => WA <= Arb_Count; WD <= X"FF"; when "00101100000" => WA <= Arb_Count; WD <= X"FF"; when "00110000001" => WA <= Arb_Count; WD <= X"FF"; when "00110000010" => WA <= Arb_Count; WD <= X"FF"; when "00110000111" => WA <= Arb_Count; WD <= X"FF"; when "00110001000" => WA <= Arb_Count; WD <= X"FF"; when "00110001011" => WA <= Arb_Count; WD <= X"FF"; when "00110001100" => WA <= Arb_Count; WD <= X"FF"; when "00110010001" => WA <= Arb_Count; WD <= X"FF"; when "00110010010" => WA <= Arb_Count; WD <= X"FF"; when "00110010101" => WA <= Arb_Count; WD <= X"FF"; when "00110010110" => WA <= Arb_Count; WD <= X"FF"; when "00110010111" => WA <= Arb_Count; WD <= X"FF"; when "00110011011" => WA <= Arb_Count; WD <= X"FF"; when "00110011100" => WA <= Arb_Count; WD <= X"FF"; when "00110011111" => WA <= Arb_Count; WD <= X"FF"; when "00110100000" => WA <= Arb_Count; WD <= X"FF"; when "00111000001" => WA <= Arb_Count; WD <= X"FF"; when "00111000010" => WA <= Arb_Count; WD <= X"FF"; when "00111000111" => WA <= Arb_Count; WD <= X"FF"; when "00111001000" => WA <= Arb_Count; WD <= X"FF"; when "00111001011" => WA <= Arb_Count; WD <= X"FF"; when "00111001100" => WA <= Arb_Count; WD <= X"FF"; when "00111010001" => WA <= Arb_Count; WD <= X"FF"; when "00111010010" => WA <= Arb_Count; WD <= X"FF"; when "00111010101" => WA <= Arb_Count; WD <= X"FF"; when "00111010110" => WA <= Arb_Count; WD <= X"FF"; when "00111010111" => WA <= Arb_Count; WD <= X"FF"; when "00111011000" => WA <= Arb_Count; WD <= X"FF"; when "00111011011" => WA <= Arb_Count; WD <= X"FF"; when "00111011100" => WA <= Arb_Count; WD <= X"FF"; when "00111011111" => WA <= Arb_Count; WD <= X"FF"; when "00111100000" => WA <= Arb_Count; WD <= X"FF"; when "01000000001" => WA <= Arb_Count; WD <= X"FF"; when "01000000010" => WA <= Arb_Count; WD <= X"FF"; when "01000000011" => WA <= Arb_Count; WD <= X"FF"; when "01000000100" => WA <= Arb_Count; WD <= X"FF"; when "01000000101" => WA <= Arb_Count; WD <= X"FF"; when "01000000110" => WA <= Arb_Count; WD <= X"FF"; when "01000000111" => WA <= Arb_Count; WD <= X"FF"; when "01000001000" => WA <= Arb_Count; WD <= X"FF"; when "01000001011" => WA <= Arb_Count; WD <= X"FF"; when "01000001100" => WA <= Arb_Count; WD <= X"FF"; when "01000010001" => WA <= Arb_Count; WD <= X"FF"; when "01000010010" => WA <= Arb_Count; WD <= X"FF"; when "01000010101" => WA <= Arb_Count; WD <= X"FF"; when "01000010110" => WA <= Arb_Count; WD <= X"FF"; when "01000010111" => WA <= Arb_Count; WD <= X"FF"; when "01000011000" => WA <= Arb_Count; WD <= X"FF"; when "01000011011" => WA <= Arb_Count; WD <= X"FF"; when "01000011100" => WA <= Arb_Count; WD <= X"FF"; when "01000011111" => WA <= Arb_Count; WD <= X"FF"; when "01000100000" => WA <= Arb_Count; WD <= X"FF"; when "01001000001" => WA <= Arb_Count; WD <= X"FF"; when "01001000010" => WA <= Arb_Count; WD <= X"FF"; when "01001000011" => WA <= Arb_Count; WD <= X"FF"; when "01001000100" => WA <= Arb_Count; WD <= X"FF"; when "01001000101" => WA <= Arb_Count; WD <= X"FF"; when "01001000110" => WA <= Arb_Count; WD <= X"FF"; when "01001000111" => WA <= Arb_Count; WD <= X"FF"; when "01001001011" => WA <= Arb_Count; WD <= X"FF"; when "01001001100" => WA <= Arb_Count; WD <= X"FF"; when "01001010001" => WA <= Arb_Count; WD <= X"FF"; when "01001010010" => WA <= Arb_Count; WD <= X"FF"; when "01001010101" => WA <= Arb_Count; WD <= X"FF"; when "01001010110" => WA <= Arb_Count; WD <= X"FF"; when "01001011000" => WA <= Arb_Count; WD <= X"FF"; when "01001011011" => WA <= Arb_Count; WD <= X"FF"; when "01001011100" => WA <= Arb_Count; WD <= X"FF"; when "01001011111" => WA <= Arb_Count; WD <= X"FF"; when "01001100000" => WA <= Arb_Count; WD <= X"FF"; when "01010000001" => WA <= Arb_Count; WD <= X"FF"; when "01010000010" => WA <= Arb_Count; WD <= X"FF"; when "01010001011" => WA <= Arb_Count; WD <= X"FF"; when "01010001100" => WA <= Arb_Count; WD <= X"FF"; when "01010010001" => WA <= Arb_Count; WD <= X"FF"; when "01010010010" => WA <= Arb_Count; WD <= X"FF"; when "01010010101" => WA <= Arb_Count; WD <= X"FF"; when "01010010110" => WA <= Arb_Count; WD <= X"FF"; when "01010011000" => WA <= Arb_Count; WD <= X"FF"; when "01010011001" => WA <= Arb_Count; WD <= X"FF"; when "01010011011" => WA <= Arb_Count; WD <= X"FF"; when "01010011100" => WA <= Arb_Count; WD <= X"FF"; when "01010011111" => WA <= Arb_Count; WD <= X"FF"; when "01010100000" => WA <= Arb_Count; WD <= X"FF"; when "01011000001" => WA <= Arb_Count; WD <= X"FF"; when "01011000010" => WA <= Arb_Count; WD <= X"FF"; when "01011001011" => WA <= Arb_Count; WD <= X"FF"; when "01011001100" => WA <= Arb_Count; WD <= X"FF"; when "01011010001" => WA <= Arb_Count; WD <= X"FF"; when "01011010010" => WA <= Arb_Count; WD <= X"FF"; when "01011010101" => WA <= Arb_Count; WD <= X"FF"; when "01011010110" => WA <= Arb_Count; WD <= X"FF"; when "01011011000" => WA <= Arb_Count; WD <= X"FF"; when "01011011001" => WA <= Arb_Count; WD <= X"FF"; when "01011011011" => WA <= Arb_Count; WD <= X"FF"; when "01011011100" => WA <= Arb_Count; WD <= X"FF"; when "01011011111" => WA <= Arb_Count; WD <= X"FF"; when "01011100000" => WA <= Arb_Count; WD <= X"FF"; when "01011100011" => WA <= Arb_Count; WD <= X"FF"; when "01011100100" => WA <= Arb_Count; WD <= X"FF"; when "01011100101" => WA <= Arb_Count; WD <= X"FF"; when "01011100110" => WA <= Arb_Count; WD <= X"FF"; when "01100000001" => WA <= Arb_Count; WD <= X"FF"; when "01100000010" => WA <= Arb_Count; WD <= X"FF"; when "01100001011" => WA <= Arb_Count; WD <= X"FF"; when "01100001100" => WA <= Arb_Count; WD <= X"FF"; when "01100010001" => WA <= Arb_Count; WD <= X"FF"; when "01100010010" => WA <= Arb_Count; WD <= X"FF"; when "01100010101" => WA <= Arb_Count; WD <= X"FF"; when "01100010110" => WA <= Arb_Count; WD <= X"FF"; when "01100011001" => WA <= Arb_Count; WD <= X"FF"; when "01100011010" => WA <= Arb_Count; WD <= X"FF"; when "01100011011" => WA <= Arb_Count; WD <= X"FF"; when "01100011100" => WA <= Arb_Count; WD <= X"FF"; when "01100011111" => WA <= Arb_Count; WD <= X"FF"; when "01100100000" => WA <= Arb_Count; WD <= X"FF"; when "01100100011" => WA <= Arb_Count; WD <= X"FF"; when "01100100100" => WA <= Arb_Count; WD <= X"FF"; when "01100100101" => WA <= Arb_Count; WD <= X"FF"; when "01100100110" => WA <= Arb_Count; WD <= X"FF"; when "01101000001" => WA <= Arb_Count; WD <= X"FF"; when "01101000010" => WA <= Arb_Count; WD <= X"FF"; when "01101001011" => WA <= Arb_Count; WD <= X"FF"; when "01101001100" => WA <= Arb_Count; WD <= X"FF"; when "01101010001" => WA <= Arb_Count; WD <= X"FF"; when "01101010010" => WA <= Arb_Count; WD <= X"FF"; when "01101010101" => WA <= Arb_Count; WD <= X"FF"; when "01101010110" => WA <= Arb_Count; WD <= X"FF"; when "01101011001" => WA <= Arb_Count; WD <= X"FF"; when "01101011010" => WA <= Arb_Count; WD <= X"FF"; when "01101011011" => WA <= Arb_Count; WD <= X"FF"; when "01101011100" => WA <= Arb_Count; WD <= X"FF"; when "01101011111" => WA <= Arb_Count; WD <= X"FF"; when "01101100000" => WA <= Arb_Count; WD <= X"FF"; when "01101100101" => WA <= Arb_Count; WD <= X"FF"; when "01101100110" => WA <= Arb_Count; WD <= X"FF"; when "01110000001" => WA <= Arb_Count; WD <= X"FF"; when "01110000010" => WA <= Arb_Count; WD <= X"FF"; when "01110001011" => WA <= Arb_Count; WD <= X"FF"; when "01110001100" => WA <= Arb_Count; WD <= X"FF"; when "01110010001" => WA <= Arb_Count; WD <= X"FF"; when "01110010010" => WA <= Arb_Count; WD <= X"FF"; when "01110010101" => WA <= Arb_Count; WD <= X"FF"; when "01110010110" => WA <= Arb_Count; WD <= X"FF"; when "01110011010" => WA <= Arb_Count; WD <= X"FF"; when "01110011011" => WA <= Arb_Count; WD <= X"FF"; when "01110011100" => WA <= Arb_Count; WD <= X"FF"; when "01110011111" => WA <= Arb_Count; WD <= X"FF"; when "01110100000" => WA <= Arb_Count; WD <= X"FF"; when "01110100101" => WA <= Arb_Count; WD <= X"FF"; when "01110100110" => WA <= Arb_Count; WD <= X"FF"; when "01111000001" => WA <= Arb_Count; WD <= X"FF"; when "01111000010" => WA <= Arb_Count; WD <= X"FF"; when "01111001011" => WA <= Arb_Count; WD <= X"FF"; when "01111001100" => WA <= Arb_Count; WD <= X"FF"; when "01111010001" => WA <= Arb_Count; WD <= X"FF"; when "01111010010" => WA <= Arb_Count; WD <= X"FF"; when "01111010101" => WA <= Arb_Count; WD <= X"FF"; when "01111010110" => WA <= Arb_Count; WD <= X"FF"; when "01111011010" => WA <= Arb_Count; WD <= X"FF"; when "01111011011" => WA <= Arb_Count; WD <= X"FF"; when "01111011100" => WA <= Arb_Count; WD <= X"FF"; when "01111011111" => WA <= Arb_Count; WD <= X"FF"; when "01111100000" => WA <= Arb_Count; WD <= X"FF"; when "01111100101" => WA <= Arb_Count; WD <= X"FF"; when "01111100110" => WA <= Arb_Count; WD <= X"FF"; when "10000000001" => WA <= Arb_Count; WD <= X"FF"; when "10000000010" => WA <= Arb_Count; WD <= X"FF"; when "10000001011" => WA <= Arb_Count; WD <= X"FF"; when "10000001100" => WA <= Arb_Count; WD <= X"FF"; when "10000001101" => WA <= Arb_Count; WD <= X"FF"; when "10000001110" => WA <= Arb_Count; WD <= X"FF"; when "10000001111" => WA <= Arb_Count; WD <= X"FF"; when "10000010000" => WA <= Arb_Count; WD <= X"FF"; when "10000010001" => WA <= Arb_Count; WD <= X"FF"; when "10000010010" => WA <= Arb_Count; WD <= X"FF"; when "10000010101" => WA <= Arb_Count; WD <= X"FF"; when "10000010110" => WA <= Arb_Count; WD <= X"FF"; when "10000011010" => WA <= Arb_Count; WD <= X"FF"; when "10000011011" => WA <= Arb_Count; WD <= X"FF"; when "10000011100" => WA <= Arb_Count; WD <= X"FF"; when "10000011111" => WA <= Arb_Count; WD <= X"FF"; when "10000100000" => WA <= Arb_Count; WD <= X"FF"; when "10000100001" => WA <= Arb_Count; WD <= X"FF"; when "10000100010" => WA <= Arb_Count; WD <= X"FF"; when "10000100011" => WA <= Arb_Count; WD <= X"FF"; when "10000100100" => WA <= Arb_Count; WD <= X"FF"; when "10000100101" => WA <= Arb_Count; WD <= X"FF"; when "10000100110" => WA <= Arb_Count; WD <= X"FF"; when "10001000001" => WA <= Arb_Count; WD <= X"FF"; when "10001000010" => WA <= Arb_Count; WD <= X"FF"; when "10001001100" => WA <= Arb_Count; WD <= X"FF"; when "10001001101" => WA <= Arb_Count; WD <= X"FF"; when "10001001110" => WA <= Arb_Count; WD <= X"FF"; when "10001001111" => WA <= Arb_Count; WD <= X"FF"; when "10001010000" => WA <= Arb_Count; WD <= X"FF"; when "10001010001" => WA <= Arb_Count; WD <= X"FF"; when "10001010101" => WA <= Arb_Count; WD <= X"FF"; when "10001010110" => WA <= Arb_Count; WD <= X"FF"; when "10001011011" => WA <= Arb_Count; WD <= X"FF"; when "10001011100" => WA <= Arb_Count; WD <= X"FF"; when "10001100000" => WA <= Arb_Count; WD <= X"FF"; when "10001100001" => WA <= Arb_Count; WD <= X"FF"; when "10001100010" => WA <= Arb_Count; WD <= X"FF"; when "10001100011" => WA <= Arb_Count; WD <= X"FF"; when "10001100100" => WA <= Arb_Count; WD <= X"FF"; when "10001100101" => WA <= Arb_Count; WD <= X"FF"; when others => WA <= Arb_Count; WD <= X"00"; end case; end process; end Behavioral;