--
-- Copyright (c) 1999-2000 Tony Givargis.  Permission to copy is granted
-- provided that this header remains intact.  This software is provided
-- with no warranties.
--
-- Version : 2.8
--

-------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use WORK.I8051_LIB.all;

-------------------------------------------------------------------------------

--
-- rst (active hi) : when asserted, the registers are set to default values
-- clk (rising edge) : clock signal - all ram i/o is synchronous
-- addr : this is the address of ram/reg being requested
-- in_data : this is the data being writen into the ram/reg
-- out_data : this is the data being read from the ram/reg
-- rd (active lo) : asserted to signal a ram/reg read
-- wr (active lo) : asserted to signal a ram/reg write
--
entity I8051_XRM is

    generic(storage_size : INTEGER := 2048);

    port(rst      : in  STD_LOGIC;
         clk      : in  STD_LOGIC;
         addr     : in  UNSIGNED (15 downto 0);
         in_data  : in  UNSIGNED (7 downto 0);
         out_data : out UNSIGNED (7 downto 0);
         rd       : in  STD_LOGIC;
         wr       : in  STD_LOGIC);
end I8051_XRM;

-------------------------------------------------------------------------------

architecture BHV of I8051_XRM is

    type XRM_TYPE is array (0 to storage_size-1) of UNSIGNED (7 downto 0);
    
    signal xrm : XRM_TYPE;

begin

    process(rst, clk)
    begin

        if( rst = '1' ) then

            for i in 0 to storage_size-1 loop

                xrm(i) <= CD_8;
            end loop;

            out_data <= CD_8;
            
        elsif( clk'event and clk = '1' ) then

            if( rd = '1' and conv_integer(addr) < storage_size ) then

                out_data <= xrm(conv_integer(addr));
            elsif( wr = '1' and conv_integer(addr) < storage_size ) then

               xrm(conv_integer(addr)) <= in_data; 
            end if;
        end if;
    end process;
end BHV;

-------------------------------------------------------------------------------

-- end of file --

<div align="center"><br /><script type="text/javascript"><!--
google_ad_client = "pub-7293844627074885";
//468x60, Created at 07. 11. 25
google_ad_slot = "8619794253";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />&nbsp;</div>