OpenCores
URL https://opencores.org/ocsvn/rise/rise/trunk

Subversion Repositories rise

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 13 to Rev 14
    Reverse comparison

Rev 13 → Rev 14

/trunk/vhdl/rlu.vhd
16,28 → 16,32
entity rlu is
port (
clk : in std_logic;
reset : in std_logic;
clk : in std_logic;
reset : in std_logic;
 
lock_register : out LOCK_REGISTER_T;
lock_register : out LOCK_REGISTER_T;
 
clear_reg_lock : in std_logic;
set_reg_lock : in std_logic;
reg_addr : in REGISTER_ADDR_T);
clear_reg_lock0 : in std_logic;
set_reg_lock0 : in std_logic;
reg_addr0 : in REGISTER_ADDR_T;
 
clear_reg_lock1 : in std_logic;
set_reg_lock1 : in std_logic;
reg_addr1 : in REGISTER_ADDR_T);
 
end rlu;
 
 
architecture rlu_rtl of rlu is
 
signal lock_register_int : LOCK_REGISTER_T;
signal lock_register_next : LOCK_REGISTER_T;
signal lock_register_int : LOCK_REGISTER_T;
signal lock_register_next : LOCK_REGISTER_T;
begin -- rlu_rtl
 
lock_register <= lock_register_int;
sync: process (clk, reset)
 
sync : process (clk, reset)
begin -- process
if reset = '0' then -- asynchronous reset (active low)
lock_register_int <= (others => '0');
46,17 → 50,29
end if;
end process;
 
async: process (lock_register_int, clear_reg_lock, set_reg_lock, reg_addr)
async : process (lock_register_int,
clear_reg_lock0, set_reg_lock0, reg_addr0,
clear_reg_lock1, set_reg_lock1, reg_addr1)
begin -- process async
lock_register_next <= lock_register_int;
 
if clear_reg_lock = '1' and set_reg_lock = '0' then
lock_register_next(to_integer(unsigned(reg_addr))) <= '0';
-- first unlock all possible registers and then lock them. because
-- the last assignment counts this also works correct if reg_addr0
-- and reg_addr1 are the same and one unlocks and one locks the
-- register (correct behaviour is that the register is locked).
if clear_reg_lock0 = '1' and set_reg_lock0 = '0' then
lock_register_next(to_integer(unsigned(reg_addr0))) <= '0';
end if;
if set_reg_lock = '1' and clear_reg_lock = '0' then
lock_register_next(to_integer(unsigned(reg_addr))) <= '1';
if clear_reg_lock1 = '1' and set_reg_lock1 = '0' then
lock_register_next(to_integer(unsigned(reg_addr1))) <= '0';
end if;
if set_reg_lock0 = '1' and clear_reg_lock0 = '0' then
lock_register_next(to_integer(unsigned(reg_addr0))) <= '1';
end if;
if set_reg_lock1 = '1' and clear_reg_lock1 = '0' then
lock_register_next(to_integer(unsigned(reg_addr1))) <= '1';
end if;
end process async;
 
end rlu_rtl;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.