cache_ram.o:
plru.o:
plru_tb.o: plru.o
-icache.o: common.o wishbone_types.o plru.o cache_ram.o
icache_tb.o: common.o wishbone_types.o icache.o simple_ram_behavioural.o
-dcache.o: common.o wishbone_types.o plru.o cache_ram.o
dcache_tb.o: common.o wishbone_types.o dcache.o simple_ram_behavioural.o
+utils.o:
+icache.o: utils.o common.o wishbone_types.o plru.o cache_ram.o utils.o
+dcache.o: utils.o common.o wishbone_types.o plru.o cache_ram.o utils.o
insn_helpers.o:
loadstore1.o: common.o helpers.o
logical.o: decode_types.o
use ieee.numeric_std.all;
library work;
+use work.utils.all;
use work.common.all;
use work.helpers.all;
use work.wishbone_types.all;
end entity dcache;
architecture rtl of dcache is
- function log2(i : natural) return integer is
- variable tmp : integer := i;
- variable ret : integer := 0;
- begin
- while tmp > 1 loop
- ret := ret + 1;
- tmp := tmp / 2;
- end loop;
- return ret;
- end function;
-
- function ispow2(i : integer) return boolean is
- begin
- if to_integer(to_unsigned(i, 32) and to_unsigned(i - 1, 32)) = 0 then
- return true;
- else
- return false;
- end if;
- end function;
-
-- BRAM organisation: We never access more than wishbone_data_bits at
-- a time so to save resources we make the array only that wide, and
-- use consecutive indices for to make a cache "line"
use ieee.numeric_std.all;
library work;
+use work.utils.all;
use work.common.all;
use work.wishbone_types.all;
end entity icache;
architecture rtl of icache is
- function log2(i : natural) return integer is
- variable tmp : integer := i;
- variable ret : integer := 0;
- begin
- while tmp > 1 loop
- ret := ret + 1;
- tmp := tmp / 2;
- end loop;
- return ret;
- end function;
-
- function ispow2(i : integer) return boolean is
- begin
- if to_integer(to_unsigned(i, 32) and to_unsigned(i - 1, 32)) = 0 then
- return true;
- else
- return false;
- end if;
- end function;
-
-- BRAM organisation: We never access more than wishbone_data_bits at
-- a time so to save resources we make the array only that wide, and
-- use consecutive indices for to make a cache "line"
--- /dev/null
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package utils is
+
+ function log2(i : natural) return integer;
+ function ispow2(i : integer) return boolean;
+
+end utils;
+
+package body utils is
+
+ function log2(i : natural) return integer is
+ variable tmp : integer := i;
+ variable ret : integer := 0;
+ begin
+ while tmp > 1 loop
+ ret := ret + 1;
+ tmp := tmp / 2;
+ end loop;
+ return ret;
+ end function;
+
+ function ispow2(i : integer) return boolean is
+ begin
+ if to_integer(to_unsigned(i, 32) and to_unsigned(i - 1, 32)) = 0 then
+ return true;
+ else
+ return false;
+ end if;
+ end function;
+
+end utils;
+