|
|
@ -199,9 +199,14 @@ architecture behave of loadstore1 is
|
|
|
|
return std_ulogic_vector is
|
|
|
|
return std_ulogic_vector is
|
|
|
|
variable longsel : std_ulogic_vector(15 downto 0);
|
|
|
|
variable longsel : std_ulogic_vector(15 downto 0);
|
|
|
|
begin
|
|
|
|
begin
|
|
|
|
longsel := "00000000" & length_to_sel(size);
|
|
|
|
if is_X(address) then
|
|
|
|
return std_ulogic_vector(shift_left(unsigned(longsel),
|
|
|
|
longsel := (others => 'X');
|
|
|
|
to_integer(unsigned(address))));
|
|
|
|
return longsel;
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
longsel := "00000000" & length_to_sel(size);
|
|
|
|
|
|
|
|
return std_ulogic_vector(shift_left(unsigned(longsel),
|
|
|
|
|
|
|
|
to_integer(unsigned(address))));
|
|
|
|
|
|
|
|
end if;
|
|
|
|
end function xfer_data_sel;
|
|
|
|
end function xfer_data_sel;
|
|
|
|
|
|
|
|
|
|
|
|
-- 23-bit right shifter for DP -> SP float conversions
|
|
|
|
-- 23-bit right shifter for DP -> SP float conversions
|
|
|
@ -401,7 +406,7 @@ begin
|
|
|
|
variable addr_mask : std_ulogic_vector(2 downto 0);
|
|
|
|
variable addr_mask : std_ulogic_vector(2 downto 0);
|
|
|
|
begin
|
|
|
|
begin
|
|
|
|
v := request_init;
|
|
|
|
v := request_init;
|
|
|
|
sprn := std_ulogic_vector(to_unsigned(decode_spr_num(l_in.insn), 10));
|
|
|
|
sprn := l_in.insn(15 downto 11) & l_in.insn(20 downto 16);
|
|
|
|
|
|
|
|
|
|
|
|
v.valid := l_in.valid;
|
|
|
|
v.valid := l_in.valid;
|
|
|
|
v.instr_tag := l_in.instr_tag;
|
|
|
|
v.instr_tag := l_in.instr_tag;
|
|
|
|