Line 49... |
Line 49... |
clear_out <= '0'; -- clear_out output is unused at the moment.
|
clear_out <= '0'; -- clear_out output is unused at the moment.
|
|
|
process (reset, mem_wb_register)
|
process (reset, mem_wb_register)
|
begin
|
begin
|
if reset = '0' then
|
if reset = '0' then
|
sr_enable <= '0';
|
|
lr_enable <= '0';
|
|
dreg_enable <= '0';
|
|
|
|
clear_reg_lock0 <= '0';
|
clear_reg_lock0 <= '0';
|
lock_reg_addr0 <= (others => '-');
|
lock_reg_addr0 <= (others => 'X');
|
clear_reg_lock1 <= '0';
|
clear_reg_lock1 <= '0';
|
lock_reg_addr1 <= (others => '-');
|
lock_reg_addr1 <= (others => 'X');
|
|
|
dreg_addr <= (others => '-');
|
dreg_enable <= '0';
|
dreg <= (others => '-');
|
dreg_addr <= (others => 'X');
|
lr <= (others => '-');
|
dreg <= (others => 'X');
|
sr <= (others => '-');
|
lr_enable <= '0';
|
|
lr <= (others => 'X');
|
|
sr_enable <= '0';
|
|
sr <= (others => 'X');
|
else
|
else
|
|
|
-- write back of register value. --
|
-- write back of register value. --
|
dreg_addr <= mem_wb_register.dreg_addr;
|
dreg_addr <= mem_wb_register.dreg_addr;
|
if mem_wb_register.aluop1(ALUOP1_WB_REG_BIT) = '1' then
|
if mem_wb_register.aluop1(ALUOP1_WB_REG_BIT) = '1' then
|
Line 74... |
Line 73... |
clear_reg_lock0 <= '1';
|
clear_reg_lock0 <= '1';
|
lock_reg_addr0 <= mem_wb_register.dreg_addr;
|
lock_reg_addr0 <= mem_wb_register.dreg_addr;
|
elsif mem_wb_register.aluop1(ALUOP1_LD_MEM_BIT) = '1' then
|
elsif mem_wb_register.aluop1(ALUOP1_LD_MEM_BIT) = '1' then
|
dreg <= mem_wb_register.mem_reg;
|
dreg <= mem_wb_register.mem_reg;
|
else
|
else
|
dreg <= (others => '0');
|
|
dreg_enable <= '0';
|
dreg_enable <= '0';
|
|
dreg <= (others => 'X');
|
clear_reg_lock0 <= '0';
|
clear_reg_lock0 <= '0';
|
lock_reg_addr0 <= (others => '-');
|
lock_reg_addr0 <= (others => 'X');
|
end if;
|
end if;
|
|
|
-- we have only one lock register.
|
-- we have only one lock register.
|
assert mem_wb_register.aluop2(ALUOP2_SR_BIT) = '0' or mem_wb_register.aluop2(ALUOP2_LR_BIT) = '0';
|
assert mem_wb_register.aluop2(ALUOP2_SR_BIT) = '0' or mem_wb_register.aluop2(ALUOP2_LR_BIT) = '0';
|
|
|
clear_reg_lock1 <= '0';
|
clear_reg_lock1 <= '0';
|
lock_reg_addr1 <= (others => '-');
|
lock_reg_addr1 <= (others => 'X');
|
-- write back of LR --
|
-- write back of LR --
|
if mem_wb_register.aluop2(ALUOP2_LR_BIT) = '1' then
|
if mem_wb_register.aluop2(ALUOP2_LR_BIT) = '1' then
|
lr <= mem_wb_register.lr;
|
lr <= mem_wb_register.lr;
|
lr_enable <= '1';
|
lr_enable <= '1';
|
clear_reg_lock1 <= '1';
|
clear_reg_lock1 <= '1';
|