library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--use ieee.std_logic_arith.all;

entity rm_memadd is port(
--enero 09     inc_add, acc_blk, as, ds0, ds1: in std_logic;
     inc_add, acc_blk, latch: in std_logic;
     add: in std_logic_vector(17 downto 0);
     madd: out std_logic_vector(17 downto 0)
     );
end rm_memadd;

architecture arch of rm_memadd is

--enero 09 signal va_aux, add_aux: std_logic_vector (17 downto 0);
--enero 09 signal va_cnt: std_logic_vector (12 downto 0);

--enero 09 signal latch,ds:std_logic;
--enero 09 signal add_latched: std_logic_vector(17 downto 0);
signal add_latched: std_logic_vector(9 downto 0);--enero 09 
signal counter_add: std_logic_vector(7 downto 0);

begin

--deaquí en adelante enero 09
madd <=  add_latched & counter_add when acc_blk='1' else add;

--latcheo la parte más significativa de las direcciones en modo bloque
process(latch)
begin
	if latch='0' then
		add_latched <= add(17 downto 8);
	else
		add_latched <= add_latched;
	end if;
end process;

--accesso modo bloque
process(inc_add,latch)
begin
	if latch='0' then  
		counter_add <= add(7 downto 0);
	elsif inc_add'event and inc_add='1' then
		counter_add <= counter_add+1;
	end if;
end process;

--ENERO 09
-- No hace falta latchear las direcciones en el caso de que no sea bloque, no sé para qué lo hago, total
--ya están latcheadas por el ahold, tanto si uso la rosvme vieja como la nueva
--con la vieja el peligro es que baje AS antes de que suba DS y no me entere y por tanto no 
--coja la nueva dirección del bus.
--Comento de aqui en adelante y lo vuelvo a hacer

--esto estaba comentado antes
--madd <= mem_pointer when acc_fifo='1' else
  --     add_aux + va_aux when acc_blk='1' else add;

--enero 09 madd <=  add_latched(17 downto 8) & counter_add when acc_blk='1' else add_latched;
--direcciones normales, no acceso bloque
--enero 09 ds <= not (ds0 or ds1);
--enero 09 latch <= not (as) or ds;
--enero 09 process(latch)
--enero 09 begin
	--enero 09 if latch='0' then
--enero 09 		add_latched <= add;
--enero 09 	else
--enero 09 		add_latched <= add_latched;
--enero 09 	end if;
--enero 09 end process;

--accesso modo bloque
--enero 09 process(inc_add,latch)
--enero 09 begin
--enero 09 	if latch='0' then
--enero 09 		counter_add <= add(7 downto 0);
--enero 09 	elsif inc_add'event and inc_add='1' then
--enero 09 		counter_add <= counter_add+1;
--enero 09 	end if;
--enero 09 end process;

--de aquí en adelante he comentado para poner lo del LINCO ago07
--LINCO madd <=  add_aux + va_aux when acc_blk='1' else add;

--madd <=  add_aux + va_aux when acc_blk='1' else add;

--va_aux <= "00000" & va_cnt;

--comento LINCO ago07
--process (inc_add, acc_blk,as)
--begin
--   if as='1' then
--    va_cnt <= (others => '0');
--    elsif inc_add'event and inc_add='1' then
--       va_cnt <= va_cnt + 1;
--     end if;
--end process;

--comento para el LINCO ago07
--process(as)
--begin
--	if as'event and as='0' then
--		add_aux <= add;
--	else add_aux <= add_aux;
--	end if;
--end process;


end arch;
	
