mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-04-29 05:25:47 +00:00
Merge pull request #66 from antonblanchard/reformat-4
More reformatting
This commit is contained in:
158
crhelpers.vhdl
158
crhelpers.vhdl
@@ -5,130 +5,50 @@ library work;
|
||||
use work.common.all;
|
||||
|
||||
package crhelpers is
|
||||
function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer;
|
||||
function num_to_fxm(num: integer) return std_ulogic_vector;
|
||||
--function from_crfile(cr: crfile) return std_ulogic_vector;
|
||||
--function extract_one_crfield(cr: crfile; fxm: std_ulogic_vector(7 downto 0)) return std_ulogic_vector;
|
||||
--function insert_multiple_crfields(cr_in: crfile; rs: std_ulogic_vector(63 downto 0); fxm: std_ulogic_vector(7 downto 0)) return crfile;
|
||||
--function insert_one_crfield(cr_in: crfile; rs: std_ulogic_vector(63 downto 0); fxm: std_ulogic_vector(7 downto 0)) return crfile;
|
||||
function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer;
|
||||
function num_to_fxm(num: integer) return std_ulogic_vector;
|
||||
end package crhelpers;
|
||||
|
||||
package body crhelpers is
|
||||
|
||||
function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer is
|
||||
begin
|
||||
-- If multiple fields are set (undefined), match existing
|
||||
-- hardware by returning the first one.
|
||||
for i in 0 to 7 loop
|
||||
-- Big endian bit numbering
|
||||
if fxm(7-i) = '1' then
|
||||
return i;
|
||||
end if;
|
||||
end loop;
|
||||
function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer is
|
||||
begin
|
||||
-- If multiple fields are set (undefined), match existing
|
||||
-- hardware by returning the first one.
|
||||
for i in 0 to 7 loop
|
||||
-- Big endian bit numbering
|
||||
if fxm(7-i) = '1' then
|
||||
return i;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
-- If no fields are set (undefined), also match existing
|
||||
-- hardware by returning cr7.
|
||||
return 7;
|
||||
end;
|
||||
-- If no fields are set (undefined), also match existing
|
||||
-- hardware by returning cr7.
|
||||
return 7;
|
||||
end;
|
||||
|
||||
function num_to_fxm(num: integer) return std_ulogic_vector is
|
||||
begin
|
||||
case num is
|
||||
when 0 =>
|
||||
return "10000000";
|
||||
when 1 =>
|
||||
return "01000000";
|
||||
when 2 =>
|
||||
return "00100000";
|
||||
when 3 =>
|
||||
return "00010000";
|
||||
when 4 =>
|
||||
return "00001000";
|
||||
when 5 =>
|
||||
return "00000100";
|
||||
when 6 =>
|
||||
return "00000010";
|
||||
when 7 =>
|
||||
return "00000001";
|
||||
when others =>
|
||||
return "00000000";
|
||||
end case;
|
||||
end;
|
||||
function num_to_fxm(num: integer) return std_ulogic_vector is
|
||||
begin
|
||||
case num is
|
||||
when 0 =>
|
||||
return "10000000";
|
||||
when 1 =>
|
||||
return "01000000";
|
||||
when 2 =>
|
||||
return "00100000";
|
||||
when 3 =>
|
||||
return "00010000";
|
||||
when 4 =>
|
||||
return "00001000";
|
||||
when 5 =>
|
||||
return "00000100";
|
||||
when 6 =>
|
||||
return "00000010";
|
||||
when 7 =>
|
||||
return "00000001";
|
||||
when others =>
|
||||
return "00000000";
|
||||
end case;
|
||||
end;
|
||||
|
||||
-- function from_crfile(cr: crfile) return std_ulogic_vector is
|
||||
-- variable combined_cr : std_ulogic_vector(31 downto 0) := (others => '0');
|
||||
-- variable high, low: integer range 0 to 31 := 0;
|
||||
-- begin
|
||||
-- for i in 0 to cr'length-1 loop
|
||||
-- low := 4*(7-i);
|
||||
-- high := low+3;
|
||||
-- combined_cr(high downto low) := cr(i);
|
||||
-- end loop;
|
||||
--
|
||||
-- return combined_cr;
|
||||
-- end function;
|
||||
--
|
||||
-- function extract_one_crfield(cr: crfile; fxm: std_ulogic_vector(7 downto 0)) return std_ulogic_vector is
|
||||
-- variable combined_cr : std_ulogic_vector(63 downto 0) := (others => '0');
|
||||
-- variable crnum: integer range 0 to 7 := 0;
|
||||
-- begin
|
||||
-- crnum := fxm_to_num(fxm);
|
||||
--
|
||||
-- -- Vivado doesn't support non constant vector slice
|
||||
-- -- low := 4*(7-crnum);
|
||||
-- -- high := low+3;
|
||||
-- -- combined_cr(high downto low) := cr(crnum);
|
||||
-- case_0: case crnum is
|
||||
-- when 0 =>
|
||||
-- combined_cr(31 downto 28) := cr(0);
|
||||
-- when 1 =>
|
||||
-- combined_cr(27 downto 24) := cr(1);
|
||||
-- when 2 =>
|
||||
-- combined_cr(23 downto 20) := cr(2);
|
||||
-- when 3 =>
|
||||
-- combined_cr(19 downto 16) := cr(3);
|
||||
-- when 4 =>
|
||||
-- combined_cr(15 downto 12) := cr(4);
|
||||
-- when 5 =>
|
||||
-- combined_cr(11 downto 8) := cr(5);
|
||||
-- when 6 =>
|
||||
-- combined_cr(7 downto 4) := cr(6);
|
||||
-- when 7 =>
|
||||
-- combined_cr(3 downto 0) := cr(7);
|
||||
-- end case;
|
||||
--
|
||||
-- return combined_cr;
|
||||
-- end;
|
||||
--
|
||||
-- function insert_multiple_crfields(cr_in: crfile; rs: std_ulogic_vector(63 downto 0); fxm: std_ulogic_vector(7 downto 0)) return crfile is
|
||||
-- variable cr : crfile;
|
||||
-- variable combined_cr : std_ulogic_vector(63 downto 0) := (others => '0');
|
||||
-- variable high, low: integer range 0 to 31 := 0;
|
||||
-- begin
|
||||
-- cr := cr_in;
|
||||
--
|
||||
-- for i in 0 to 7 loop
|
||||
-- -- BE bit numbering
|
||||
-- if fxm(7-i) = '1' then
|
||||
-- low := 4*(7-i);
|
||||
-- high := low+3;
|
||||
-- cr(i) := rs(high downto low);
|
||||
-- end if;
|
||||
-- end loop;
|
||||
--
|
||||
-- return cr;
|
||||
-- end;
|
||||
--
|
||||
-- function insert_one_crfield(cr_in: crfile; rs: std_ulogic_vector(63 downto 0); fxm: std_ulogic_vector(7 downto 0)) return crfile is
|
||||
-- variable cr : crfile;
|
||||
-- variable crnum: integer range 0 to 7 := 0;
|
||||
-- variable high, low: integer range 0 to 31 := 0;
|
||||
-- begin
|
||||
-- cr := cr_in;
|
||||
-- crnum := fxm_to_num(fxm);
|
||||
-- low := 4*(7-crnum);
|
||||
-- high := low+3;
|
||||
-- cr(crnum) := rs(high downto low);
|
||||
-- return cr;
|
||||
-- end;
|
||||
end package body crhelpers;
|
||||
|
||||
332
helpers.vhdl
332
helpers.vhdl
@@ -5,205 +5,205 @@ use ieee.numeric_std.all;
|
||||
library work;
|
||||
|
||||
package helpers is
|
||||
function fls_32 (val: std_ulogic_vector(31 downto 0)) return integer;
|
||||
function ffs_32 (val: std_ulogic_vector(31 downto 0)) return integer;
|
||||
function fls_32 (val: std_ulogic_vector(31 downto 0)) return integer;
|
||||
function ffs_32 (val: std_ulogic_vector(31 downto 0)) return integer;
|
||||
|
||||
function fls_64 (val: std_ulogic_vector(63 downto 0)) return integer;
|
||||
function ffs_64 (val: std_ulogic_vector(63 downto 0)) return integer;
|
||||
function fls_64 (val: std_ulogic_vector(63 downto 0)) return integer;
|
||||
function ffs_64 (val: std_ulogic_vector(63 downto 0)) return integer;
|
||||
|
||||
function popcnt8(val: std_ulogic_vector(7 downto 0)) return std_ulogic_vector;
|
||||
function popcnt32(val: std_ulogic_vector(31 downto 0)) return std_ulogic_vector;
|
||||
function popcnt64(val: std_ulogic_vector(63 downto 0)) return std_ulogic_vector;
|
||||
function popcnt8(val: std_ulogic_vector(7 downto 0)) return std_ulogic_vector;
|
||||
function popcnt32(val: std_ulogic_vector(31 downto 0)) return std_ulogic_vector;
|
||||
function popcnt64(val: std_ulogic_vector(63 downto 0)) return std_ulogic_vector;
|
||||
|
||||
function cmp_one_byte(a, b: std_ulogic_vector(7 downto 0)) return std_ulogic_vector;
|
||||
function cmp_one_byte(a, b: std_ulogic_vector(7 downto 0)) return std_ulogic_vector;
|
||||
|
||||
function ppc_signed_compare(a, b: signed(63 downto 0)) return std_ulogic_vector;
|
||||
function ppc_unsigned_compare(a, b: unsigned(63 downto 0)) return std_ulogic_vector;
|
||||
function ppc_signed_compare(a, b: signed(63 downto 0)) return std_ulogic_vector;
|
||||
function ppc_unsigned_compare(a, b: unsigned(63 downto 0)) return std_ulogic_vector;
|
||||
|
||||
function ra_or_zero(ra: std_ulogic_vector(63 downto 0); reg: std_ulogic_vector(4 downto 0)) return std_ulogic_vector;
|
||||
function ra_or_zero(ra: std_ulogic_vector(63 downto 0); reg: std_ulogic_vector(4 downto 0)) return std_ulogic_vector;
|
||||
|
||||
function byte_reverse(val: std_ulogic_vector(63 downto 0); size: integer) return std_ulogic_vector;
|
||||
function byte_reverse(val: std_ulogic_vector(63 downto 0); size: integer) return std_ulogic_vector;
|
||||
|
||||
function sign_extend(val: std_ulogic_vector(63 downto 0); size: natural) return std_ulogic_vector;
|
||||
function sign_extend(val: std_ulogic_vector(63 downto 0); size: natural) return std_ulogic_vector;
|
||||
end package helpers;
|
||||
|
||||
package body helpers is
|
||||
function fls_32 (val: std_ulogic_vector(31 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 32;
|
||||
for i in val'range loop
|
||||
if val(i) = '1' then
|
||||
ret := 31 - i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
function fls_32 (val: std_ulogic_vector(31 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 32;
|
||||
for i in val'range loop
|
||||
if val(i) = '1' then
|
||||
ret := 31 - i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function ffs_32 (val: std_ulogic_vector(31 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 32;
|
||||
for i in val'reverse_range loop
|
||||
if val(i) = '1' then
|
||||
ret := i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
function ffs_32 (val: std_ulogic_vector(31 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 32;
|
||||
for i in val'reverse_range loop
|
||||
if val(i) = '1' then
|
||||
ret := i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function fls_64 (val: std_ulogic_vector(63 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 64;
|
||||
for i in val'range loop
|
||||
if val(i) = '1' then
|
||||
ret := 63 - i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
function fls_64 (val: std_ulogic_vector(63 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 64;
|
||||
for i in val'range loop
|
||||
if val(i) = '1' then
|
||||
ret := 63 - i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function ffs_64 (val: std_ulogic_vector(63 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 64;
|
||||
for i in val'reverse_range loop
|
||||
if val(i) = '1' then
|
||||
ret := i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
function ffs_64 (val: std_ulogic_vector(63 downto 0)) return integer is
|
||||
variable ret: integer;
|
||||
begin
|
||||
ret := 64;
|
||||
for i in val'reverse_range loop
|
||||
if val(i) = '1' then
|
||||
ret := i;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function popcnt8(val: std_ulogic_vector(7 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(3 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("000" & val(i));
|
||||
end loop;
|
||||
function popcnt8(val: std_ulogic_vector(7 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(3 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("000" & val(i));
|
||||
end loop;
|
||||
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
|
||||
function popcnt32(val: std_ulogic_vector(31 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(5 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("00000" & val(i));
|
||||
end loop;
|
||||
function popcnt32(val: std_ulogic_vector(31 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(5 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("00000" & val(i));
|
||||
end loop;
|
||||
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
|
||||
function popcnt64(val: std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(6 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("000000" & val(i));
|
||||
end loop;
|
||||
function popcnt64(val: std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: unsigned(6 downto 0) := (others => '0');
|
||||
begin
|
||||
for i in val'range loop
|
||||
ret := ret + ("000000" & val(i));
|
||||
end loop;
|
||||
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
return std_ulogic_vector(resize(ret, val'length));
|
||||
end;
|
||||
|
||||
function cmp_one_byte(a, b: std_ulogic_vector(7 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(7 downto 0);
|
||||
begin
|
||||
if a = b then
|
||||
ret := x"ff";
|
||||
else
|
||||
ret := x"00";
|
||||
end if;
|
||||
function cmp_one_byte(a, b: std_ulogic_vector(7 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(7 downto 0);
|
||||
begin
|
||||
if a = b then
|
||||
ret := x"ff";
|
||||
else
|
||||
ret := x"00";
|
||||
end if;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function ppc_signed_compare(a, b: signed(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(3 downto 0);
|
||||
begin
|
||||
if a < b then
|
||||
ret := "1000";
|
||||
elsif a > b then
|
||||
ret := "0100";
|
||||
else
|
||||
ret := "0010";
|
||||
end if;
|
||||
function ppc_signed_compare(a, b: signed(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(3 downto 0);
|
||||
begin
|
||||
if a < b then
|
||||
ret := "1000";
|
||||
elsif a > b then
|
||||
ret := "0100";
|
||||
else
|
||||
ret := "0010";
|
||||
end if;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function ppc_unsigned_compare(a, b: unsigned(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(3 downto 0);
|
||||
begin
|
||||
if a < b then
|
||||
ret := "1000";
|
||||
elsif a > b then
|
||||
ret := "0100";
|
||||
else
|
||||
ret := "0010";
|
||||
end if;
|
||||
function ppc_unsigned_compare(a, b: unsigned(63 downto 0)) return std_ulogic_vector is
|
||||
variable ret: std_ulogic_vector(3 downto 0);
|
||||
begin
|
||||
if a < b then
|
||||
ret := "1000";
|
||||
elsif a > b then
|
||||
ret := "0100";
|
||||
else
|
||||
ret := "0010";
|
||||
end if;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function ra_or_zero(ra: std_ulogic_vector(63 downto 0); reg: std_ulogic_vector(4 downto 0)) return std_ulogic_vector is
|
||||
begin
|
||||
if to_integer(unsigned(reg)) = 0 then
|
||||
return x"0000000000000000";
|
||||
else
|
||||
return ra;
|
||||
end if;
|
||||
end;
|
||||
function ra_or_zero(ra: std_ulogic_vector(63 downto 0); reg: std_ulogic_vector(4 downto 0)) return std_ulogic_vector is
|
||||
begin
|
||||
if to_integer(unsigned(reg)) = 0 then
|
||||
return x"0000000000000000";
|
||||
else
|
||||
return ra;
|
||||
end if;
|
||||
end;
|
||||
|
||||
function byte_reverse(val: std_ulogic_vector(63 downto 0); size: integer) return std_ulogic_vector is
|
||||
variable ret : std_ulogic_vector(63 downto 0) := (others => '0');
|
||||
begin
|
||||
-- Vivado doesn't support non constant vector slices, so we have to code
|
||||
-- each of these.
|
||||
case_0: case size is
|
||||
when 2 =>
|
||||
for_2 : for k in 0 to 1 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(1-k)+7) downto (8*(1-k)));
|
||||
end loop;
|
||||
when 4 =>
|
||||
for_4 : for k in 0 to 3 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(3-k)+7) downto (8*(3-k)));
|
||||
end loop;
|
||||
when 8 =>
|
||||
for_8 : for k in 0 to 7 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(7-k)+7) downto (8*(7-k)));
|
||||
end loop;
|
||||
when others =>
|
||||
report "bad byte reverse length " & integer'image(size) severity failure;
|
||||
end case;
|
||||
function byte_reverse(val: std_ulogic_vector(63 downto 0); size: integer) return std_ulogic_vector is
|
||||
variable ret : std_ulogic_vector(63 downto 0) := (others => '0');
|
||||
begin
|
||||
-- Vivado doesn't support non constant vector slices, so we have to code
|
||||
-- each of these.
|
||||
case_0: case size is
|
||||
when 2 =>
|
||||
for_2 : for k in 0 to 1 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(1-k)+7) downto (8*(1-k)));
|
||||
end loop;
|
||||
when 4 =>
|
||||
for_4 : for k in 0 to 3 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(3-k)+7) downto (8*(3-k)));
|
||||
end loop;
|
||||
when 8 =>
|
||||
for_8 : for k in 0 to 7 loop
|
||||
ret(((8*k)+7) downto (8*k)) := val((8*(7-k)+7) downto (8*(7-k)));
|
||||
end loop;
|
||||
when others =>
|
||||
report "bad byte reverse length " & integer'image(size) severity failure;
|
||||
end case;
|
||||
|
||||
return ret;
|
||||
end;
|
||||
return ret;
|
||||
end;
|
||||
|
||||
function sign_extend(val: std_ulogic_vector(63 downto 0); size: natural) return std_ulogic_vector is
|
||||
variable ret : signed(63 downto 0) := (others => '0');
|
||||
variable upper : integer := 0;
|
||||
begin
|
||||
case_0: case size is
|
||||
when 2 =>
|
||||
ret := resize(signed(val(15 downto 0)), 64);
|
||||
when 4 =>
|
||||
ret := resize(signed(val(31 downto 0)), 64);
|
||||
when 8 =>
|
||||
ret := resize(signed(val(63 downto 0)), 64);
|
||||
when others =>
|
||||
report "bad byte reverse length " & integer'image(size) severity failure;
|
||||
end case;
|
||||
function sign_extend(val: std_ulogic_vector(63 downto 0); size: natural) return std_ulogic_vector is
|
||||
variable ret : signed(63 downto 0) := (others => '0');
|
||||
variable upper : integer := 0;
|
||||
begin
|
||||
case_0: case size is
|
||||
when 2 =>
|
||||
ret := resize(signed(val(15 downto 0)), 64);
|
||||
when 4 =>
|
||||
ret := resize(signed(val(31 downto 0)), 64);
|
||||
when 8 =>
|
||||
ret := resize(signed(val(63 downto 0)), 64);
|
||||
when others =>
|
||||
report "bad byte reverse length " & integer'image(size) severity failure;
|
||||
end case;
|
||||
|
||||
return std_ulogic_vector(ret);
|
||||
return std_ulogic_vector(ret);
|
||||
|
||||
end;
|
||||
end;
|
||||
end package body helpers;
|
||||
|
||||
@@ -2,162 +2,162 @@ library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
|
||||
package insn_helpers is
|
||||
function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_l (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_lk (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_rc (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_l (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_lk (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_rc (insn_in : std_ulogic_vector) return std_ulogic;
|
||||
function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector;
|
||||
end package insn_helpers;
|
||||
|
||||
package body insn_helpers is
|
||||
function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
|
||||
function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
|
||||
function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(20 downto 16);
|
||||
end;
|
||||
function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(20 downto 16);
|
||||
end;
|
||||
|
||||
function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 11);
|
||||
end;
|
||||
function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 11);
|
||||
end;
|
||||
|
||||
function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
|
||||
function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
|
||||
function insn_l (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(21);
|
||||
end;
|
||||
function insn_l (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(21);
|
||||
end;
|
||||
|
||||
function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 11);
|
||||
end;
|
||||
function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 11);
|
||||
end;
|
||||
|
||||
function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(10 downto 6);
|
||||
end;
|
||||
function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(10 downto 6);
|
||||
end;
|
||||
|
||||
function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5 downto 1);
|
||||
end;
|
||||
function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5 downto 1);
|
||||
end;
|
||||
|
||||
function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 2);
|
||||
end;
|
||||
function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 2);
|
||||
end;
|
||||
|
||||
function insn_lk (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(0);
|
||||
end;
|
||||
function insn_lk (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(0);
|
||||
end;
|
||||
|
||||
function insn_rc (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(0);
|
||||
end;
|
||||
function insn_rc (insn_in : std_ulogic_vector) return std_ulogic is
|
||||
begin
|
||||
return insn_in(0);
|
||||
end;
|
||||
|
||||
function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 2);
|
||||
end;
|
||||
function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 2);
|
||||
end;
|
||||
|
||||
function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 23);
|
||||
end;
|
||||
function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 23);
|
||||
end;
|
||||
|
||||
function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(19 downto 12);
|
||||
end;
|
||||
function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(19 downto 12);
|
||||
end;
|
||||
|
||||
function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
|
||||
function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(20 downto 16);
|
||||
end;
|
||||
function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(20 downto 16);
|
||||
end;
|
||||
|
||||
function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(12 downto 11);
|
||||
end;
|
||||
function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(12 downto 11);
|
||||
end;
|
||||
|
||||
function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 0);
|
||||
end;
|
||||
|
||||
function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 2);
|
||||
end;
|
||||
function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(15 downto 2);
|
||||
end;
|
||||
|
||||
function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(25 downto 21);
|
||||
end;
|
||||
|
||||
function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(10 downto 6);
|
||||
end;
|
||||
function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(10 downto 6);
|
||||
end;
|
||||
|
||||
function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(1) & insn_in(15 downto 11);
|
||||
end;
|
||||
function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(1) & insn_in(15 downto 11);
|
||||
end;
|
||||
|
||||
function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5) & insn_in(10 downto 6);
|
||||
end;
|
||||
function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5) & insn_in(10 downto 6);
|
||||
end;
|
||||
|
||||
function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5) & insn_in(10 downto 6);
|
||||
end;
|
||||
function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector is
|
||||
begin
|
||||
return insn_in(5) & insn_in(10 downto 6);
|
||||
end;
|
||||
end package body insn_helpers;
|
||||
|
||||
Reference in New Issue
Block a user