-- Scott Sirowy -- February 7th, 2007 -- Screen buffer for sample game BRAM demo -- Screen supports only 64x48 resolution with 3-bit color library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity screen is Port ( clock : in std_logic; reset : in std_logic; address : in std_logic_vector(11 downto 0); data : out std_logic_vector(3 downto 0) ); end screen; architecture Behavioral of screen is component RAMB16_S4_S4 is generic( INIT_00 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_01 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_02 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_03 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_04 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_05 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_06 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_07 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_08 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_09 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0A : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0B : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0C : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0D : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0E : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_0F : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_10 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_11 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_12 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_13 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_14 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_15 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_16 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_17 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_18 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_19 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1A : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1B : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1C : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1D : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1E : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_1F : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_20 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_21 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_22 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_23 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_24 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_25 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_26 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_27 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_28 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_29 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2A : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2B : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2C : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2D : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2E : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_2F : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_30 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_31 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_32 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_33 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_34 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_35 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_36 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_37 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_38 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_39 : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3A : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3B : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3C : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3D : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3E : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000"; INIT_3F : BIT_VECTOR := X"0000000000000000000000000000000000000000000000000000000000000000" ); port( WEA : in std_logic; ENA : in std_logic; SSRA : in std_logic; CLKA : in std_logic; ADDRA: in std_logic_vector(11 downto 0); DIA : in std_logic_vector(3 downto 0); DOA : out std_logic_vector(3 downto 0); WEB : in std_logic; ENB : in std_logic; SSRB : in std_logic; CLKB : in std_logic; ADDRB: in std_logic_vector(11 downto 0); DIB : in std_logic_vector(3 downto 0); DOB : out std_logic_vector(3 downto 0) ); end component; signal dummy : std_logic_vector( 3 downto 0); begin ----------------------------------------------------------------------------------------------------------------------------- --if we wanted to initialize the memory to a value, this is where we would do it. The important thing to remember --when reading the memory in this format is it is read from right to left, and then top to bottom. For instance, --the 0th address in this memory is actually the last "0" in the INIT_00 line... FULL_SCREEN: RAMB16_S4_S4 generic map( INIT_00 => X"6666666666667777777777777766666666666666666666666666663333333333", INIT_01 => X"6666666666666677777777776666666666666666666666666666666333333333", INIT_02 => X"6666666666666666677766666666666666666666666666666666666633333333", INIT_03 => X"6666666666666666666666666666666666666666666666666666666663333333", INIT_04 => X"6666666666666666666666666666666666666666666666666666666666333333", INIT_05 => X"6666666666666666666666666666666666666666666666666666666666633333", INIT_06 => X"6666666666666666666666666666666666666666666666666666666666666333", INIT_07 => X"6666666666666666666666666666666666666666666666666666666666666633", INIT_08 => X"6666666667777777666666666666666666666666666666666666666666666663", INIT_09 => X"6666666677777777776666666666666666666666666666666666666666666666", INIT_0A => X"6666666777777777777666666666666666666666666666666666666666666666", INIT_0B => X"6666666677777777776666666666666666666666666666666666666666666666", INIT_0C => X"6666666667777777766666666666666666666666666666666666666666666666", INIT_0D => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_0E => X"6666666666666666666666666666666666666777777766666666666666666666", INIT_0F => X"6666666666666666666666666666666666667777777777776666666666666666", INIT_10 => X"6666666666666666666666666666666666677777777777777766666666666666", INIT_11 => X"6666666666666666666666666666666666666777777777777766666666666666", INIT_12 => X"6666666666666666666666666666666666666667777777666666666666666666", INIT_13 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_14 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_15 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_16 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_17 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_18 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_19 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1A => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1B => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1C => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1D => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1E => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_1F => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_20 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_21 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_22 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_23 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_24 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_25 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_26 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_27 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_28 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_29 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2A => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2B => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2C => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2D => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2E => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_2F => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_30 => X"6666666666666666666666666666666666666666666666666666666666666666", INIT_31 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_32 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_33 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_34 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_35 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_36 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_37 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_38 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_39 => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_3A => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_3B => X"2222222222222222222222222222222222222222222222222222222222222222", INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") port map ( WEA => '0', -- I never need to write to A, just read from it ENA => '1', -- Always enable A for reading SSRA => '0', -- set to 0 CLKA => clock, -- take the clock coming from the top level ADDRA => address, -- address comes in from rgb_reader DIA => "0111", DOA => data, WEB => '0', -- in this case we will not use port B, but ideally you would use this for writing to memory ENB => '0', SSRB => reset, CLKB => clock, ADDRB => address, DIB => "0000", DOB => dummy ); ----------------------------------------------------------------------------------------------------------------------------- end Behavioral;