Project

General

Profile

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY internalromram IS
PORT(
clock : IN STD_LOGIC; --system clock
reset_n : IN STD_LOGIC; --asynchronous reset

ROM_ADDR : in STD_LOGIC_VECTOR(21 downto 0);
ROM_REQUEST_COMPLETE : out STD_LOGIC;
ROM_REQUEST : in std_logic;
ROM_DATA : out std_logic_vector(7 downto 0);
RAM_ADDR : in STD_LOGIC_VECTOR(18 downto 0);
RAM_WR_ENABLE : in std_logic;
RAM_DATA_IN : in STD_LOGIC_VECTOR(7 downto 0);
RAM_REQUEST_COMPLETE : out STD_LOGIC;
RAM_REQUEST : in std_logic;
RAM_DATA : out std_logic_vector(7 downto 0)
);
END internalromram;

architecture vhdl of internalromram is
component ramint IS
PORT
(
address : IN STD_LOGIC_VECTOR (12 DOWNTO 0);
clock : IN STD_LOGIC := '1';
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END component;

component rom16 IS
PORT
(
address : IN STD_LOGIC_VECTOR (13 DOWNTO 0);
clock : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END component;

component basic IS
PORT
(
address : IN STD_LOGIC_VECTOR (12 DOWNTO 0);
clock : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END component;

signal rom_request_reg : std_logic;
signal ram_request_reg : std_logic;
signal ROM16_DATA : std_logic_vector(7 downto 0);
signal BASIC_DATA : std_logic_vector(7 downto 0);
signal RAM_WR_ENABLE_REAL : std_logic;
signal IRAM_DATA : std_logic_vector(7 downto 0);

begin
process(clock,reset_n)
begin
if (reset_n ='0') then
rom_request_reg <= '0';
ram_request_reg <= '0';
elsif (clock'event and clock='1') then
rom_request_reg <= rom_request;
ram_request_reg <= ram_request;
end if;
end process;

rom_request_complete <= rom_request_reg;
--C000 = basic.
--0000-07FF = low
--0800-27ff high
process(rom16_data,basic_data, rom_addr(15 downto 0))
begin
ROM_DATA <= ROM16_DATA;
if (rom_addr(15)='1') then
ROM_DATA <= BASIC_DATA;
end if;
end process;
--ROM_DATA <= ROMLO_DATA when rom_addr(15 downto 12)=X"D" else ROMHI_DATA;
--ROM_DATA <= ROMHI_DATA;
-- basic1 : basic
-- PORT MAP(clock => clock,
-- address => rom_addr(12 downto 0),
-- q => BASIC_data
-- );
--
-- rom16a : rom16
-- PORT MAP(clock => clock,
-- address => rom_addr(13 downto 0),
-- q => ROM16_data
-- );
--
-- ramint1 : ramint
-- PORT MAP(clock => clock,
-- address => ram_addr(12 downto 0),
-- data => ram_data_in(7 downto 0),
-- wren => RAM_WR_ENABLE_REAL,
-- q => iram_data
-- );
ram_request_complete <= ram_request_reg;
RAM_DATA <= IRAM_DATA when ram_addr(15 downto 13)= "000" else X"FF";
RAM_WR_ENABLE_REAL <= RAM_WR_ENABLE when ram_addr(15 downto 13)="000" else '0'; -- ban writes over 8k when using int ram - HACK
end vhdl;
(53-53/125)