This two VHDL functions change the endianess. This enables to change from Big to Little Endian and vice versa. It is assumed that 1 byte are 8 bits.
-- changes the endianess BIG <-> LITTLE
function ChangeEndian(vec : std_ulogic_vector) return std_ulogic_vector is
variable vRet : std_ulogic_vector(vec'range);
constant cNumBytes : natural := vec'length / 8;
begin
for i in 0 to cNumBytes-1 loop
for j in 7 downto 0 loop
vRet(8*i + j) := vec(8*(cNumBytes-1-i) + j);
end loop; -- j
end loop; -- i
return vRet;
end function ChangeEndian;
function ChangeEndian(vec : std_logic_vector) return std_logic_vector is
begin
return std_logic_vector(ChangeEndian(std_ulogic_vector(vec)));
end function ChangeEndian;
No comments:
Post a Comment