|
|
------------------------------------------------------------------------------
|
|
|
-- This file is a part of the GRLIB VHDL IP LIBRARY
|
|
|
-- Copyright (C) 2003 - 2008, Gaisler Research
|
|
|
-- Copyright (C) 2008 - 2010, Aeroflex Gaisler
|
|
|
--
|
|
|
-- This program is free software; you can redistribute it and/or modify
|
|
|
-- it under the terms of the GNU General Public License as published by
|
|
|
-- the Free Software Foundation; either version 2 of the License, or
|
|
|
-- (at your option) any later version.
|
|
|
--
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
-- GNU General Public License for more details.
|
|
|
--
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
|
-- along with this program; if not, write to the Free Software
|
|
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- Entity: mmuiface
|
|
|
-- File: mmuiface.vhd
|
|
|
-- Author: Konrad Eisele, Jiri Gaisler - Gaisler Research
|
|
|
-- Description: MMU interface types
|
|
|
------------------------------------------------------------------------------
|
|
|
|
|
|
library ieee;
|
|
|
use ieee.std_logic_1164.all;
|
|
|
library grlib;
|
|
|
use grlib.amba.all;
|
|
|
use grlib.stdlib.all;
|
|
|
library gaisler;
|
|
|
use gaisler.mmuconfig.all;
|
|
|
package mmuiface is
|
|
|
|
|
|
type mmutlbcam_in_type is record
|
|
|
mmctrl : mmctrl_type1;
|
|
|
tagin : tlbcam_tfp;
|
|
|
tagwrite : tlbcam_reg;
|
|
|
trans_op : std_logic;
|
|
|
flush_op : std_logic;
|
|
|
write_op : std_logic;
|
|
|
wb_op : std_logic;
|
|
|
mmuen : std_logic;
|
|
|
mset : std_logic;
|
|
|
end record;
|
|
|
type mmutlbcami_a is array (natural range <>) of mmutlbcam_in_type;
|
|
|
|
|
|
constant mmutlbcam_in_type_none : mmutlbcam_in_type := (mmctrl_type1_none, tlbcam_tfp_none,
|
|
|
tlbcam_reg_none, '0', '0', '0', '0', '0', '0');
|
|
|
type mmutlbcam_out_type is record
|
|
|
pteout : std_logic_vector(31 downto 0);
|
|
|
LVL : std_logic_vector(1 downto 0); -- level in pth
|
|
|
hit : std_logic;
|
|
|
ctx : std_logic_vector(M_CTX_SZ-1 downto 0); -- for diagnostic access
|
|
|
valid : std_logic; -- for diagnostic access
|
|
|
vaddr : std_logic_vector(31 downto 0); -- for diagnostic access
|
|
|
NEEDSYNC : std_logic;
|
|
|
WBNEEDSYNC : std_logic;
|
|
|
end record;
|
|
|
type mmutlbcamo_a is array (natural range <>) of mmutlbcam_out_type;
|
|
|
|
|
|
constant mmutlbcam_out_none : mmutlbcam_out_type := (zero32, "00",
|
|
|
'0', "00000000", '0', zero32, '0', '0');
|
|
|
|
|
|
-- mmu i/o
|
|
|
|
|
|
type mmuidc_data_in_type is record
|
|
|
data : std_logic_vector(31 downto 0);
|
|
|
su : std_logic;
|
|
|
read : std_logic;
|
|
|
isid : mmu_idcache;
|
|
|
wb_data : std_logic_vector(31 downto 0);
|
|
|
end record;
|
|
|
|
|
|
type mmuidc_data_out_type is record
|
|
|
finish : std_logic;
|
|
|
data : std_logic_vector(31 downto 0);
|
|
|
cache : std_logic;
|
|
|
accexc : std_logic;
|
|
|
end record;
|
|
|
|
|
|
constant mmuidco_zero : mmuidc_data_out_type := ('0', zero32, '0', '0');
|
|
|
|
|
|
type mmudc_in_type is record
|
|
|
trans_op : std_logic;
|
|
|
transdata : mmuidc_data_in_type;
|
|
|
|
|
|
-- dcache extra signals
|
|
|
flush_op : std_logic;
|
|
|
diag_op : std_logic;
|
|
|
wb_op : std_logic;
|
|
|
|
|
|
fsread : std_logic;
|
|
|
mmctrl1 : mmctrl_type1;
|
|
|
end record;
|
|
|
|
|
|
type mmudc_out_type is record
|
|
|
grant : std_logic;
|
|
|
transdata : mmuidc_data_out_type;
|
|
|
-- dcache extra signals
|
|
|
mmctrl2 : mmctrl_type2;
|
|
|
-- writebuffer out
|
|
|
wbtransdata : mmuidc_data_out_type;
|
|
|
tlbmiss : std_logic;
|
|
|
end record;
|
|
|
|
|
|
type mmuic_in_type is record
|
|
|
trans_op : std_logic;
|
|
|
transdata : mmuidc_data_in_type;
|
|
|
end record;
|
|
|
|
|
|
type mmuic_out_type is record
|
|
|
grant : std_logic;
|
|
|
transdata : mmuidc_data_out_type;
|
|
|
tlbmiss : std_logic;
|
|
|
end record;
|
|
|
|
|
|
constant mmudco_zero : mmudc_out_type := ('0', mmuidco_zero,
|
|
|
mmctrl2_zero, mmuidco_zero, '0');
|
|
|
|
|
|
constant mmuico_zero : mmuic_out_type := ('0', mmuidco_zero, '0');
|
|
|
|
|
|
--#lrue i/o
|
|
|
type mmulrue_in_type is record
|
|
|
touch : std_logic;
|
|
|
pos : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
clear : std_logic;
|
|
|
flush : std_logic;
|
|
|
|
|
|
left : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
fromleft : std_logic;
|
|
|
right : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
fromright : std_logic;
|
|
|
end record;
|
|
|
type mmulruei_a is array (natural range <>) of mmulrue_in_type;
|
|
|
|
|
|
type mmulrue_out_type is record
|
|
|
pos : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
movetop : std_logic;
|
|
|
end record;
|
|
|
constant mmulrue_out_none : mmulrue_out_type := (zero32(M_ENT_MAX_LOG-1 downto 0), '0');
|
|
|
type mmulrueo_a is array (natural range <>) of mmulrue_out_type;
|
|
|
|
|
|
--#lru i/o
|
|
|
type mmulru_in_type is record
|
|
|
touch : std_logic;
|
|
|
touchmin : std_logic;
|
|
|
flush : std_logic;
|
|
|
pos : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
mmctrl1 : mmctrl_type1;
|
|
|
end record;
|
|
|
|
|
|
type mmulru_out_type is record
|
|
|
pos : std_logic_vector(M_ENT_MAX_LOG-1 downto 0);
|
|
|
end record;
|
|
|
|
|
|
--#mmu: tw i/o
|
|
|
type memory_mm_in_type is record
|
|
|
address : std_logic_vector(31 downto 0);
|
|
|
data : std_logic_vector(31 downto 0);
|
|
|
size : std_logic_vector(1 downto 0);
|
|
|
burst : std_logic;
|
|
|
read : std_logic;
|
|
|
req : std_logic;
|
|
|
lock : std_logic;
|
|
|
end record;
|
|
|
|
|
|
constant mci_zero : memory_mm_in_type := (X"00000000", X"00000000",
|
|
|
"00", '0', '0', '0', '0');
|
|
|
|
|
|
type memory_mm_out_type is record
|
|
|
data : std_logic_vector(31 downto 0); -- memory data
|
|
|
ready : std_logic; -- cycle ready
|
|
|
grant : std_logic; --
|
|
|
retry : std_logic; --
|
|
|
mexc : std_logic; -- memory exception
|
|
|
werr : std_logic; -- memory write error
|
|
|
cache : std_logic; -- cacheable data
|
|
|
end record;
|
|
|
|
|
|
type mmutw_in_type is record
|
|
|
walk_op_ur : std_logic;
|
|
|
areq_ur : std_logic;
|
|
|
tlbmiss : std_logic;
|
|
|
data : std_logic_vector(31 downto 0);
|
|
|
adata : std_logic_vector(31 downto 0);
|
|
|
aaddr : std_logic_vector(31 downto 0);
|
|
|
end record;
|
|
|
type mmutwi_a is array (natural range <>) of mmutw_in_type;
|
|
|
|
|
|
type mmutw_out_type is record
|
|
|
finish : std_logic;
|
|
|
data : std_logic_vector(31 downto 0);
|
|
|
addr : std_logic_vector(31 downto 0);
|
|
|
lvl : std_logic_vector(1 downto 0);
|
|
|
fault_mexc : std_logic;
|
|
|
fault_trans : std_logic;
|
|
|
fault_inv : std_logic;
|
|
|
fault_lvl : std_logic_vector(1 downto 0);
|
|
|
end record;
|
|
|
type mmutwo_a is array (natural range <>) of mmutw_out_type;
|
|
|
|
|
|
-- mmu tlb i/o
|
|
|
|
|
|
type mmutlb_in_type is record
|
|
|
flush_op : std_logic;
|
|
|
wb_op : std_logic;
|
|
|
|
|
|
trans_op : std_logic;
|
|
|
transdata : mmuidc_data_in_type;
|
|
|
s2valid : std_logic;
|
|
|
|
|
|
mmctrl1 : mmctrl_type1;
|
|
|
|
|
|
-- fast writebuffer signals
|
|
|
tlbcami : mmutlbcami_a (M_ENT_MAX-1 downto 0);
|
|
|
|
|
|
end record;
|
|
|
type mmutlbi_a is array (natural range <>) of mmutlb_in_type;
|
|
|
|
|
|
type mmutlbfault_out_type is record
|
|
|
fault_pro : std_logic;
|
|
|
fault_pri : std_logic;
|
|
|
fault_access : std_logic;
|
|
|
fault_mexc : std_logic;
|
|
|
fault_trans : std_logic;
|
|
|
fault_inv : std_logic;
|
|
|
fault_lvl : std_logic_vector(1 downto 0);
|
|
|
fault_su : std_logic;
|
|
|
fault_read : std_logic;
|
|
|
fault_isid : mmu_idcache;
|
|
|
fault_addr : std_logic_vector(31 downto 0);
|
|
|
end record;
|
|
|
|
|
|
type mmutlb_out_type is record
|
|
|
transdata : mmuidc_data_out_type;
|
|
|
fault : mmutlbfault_out_type;
|
|
|
nexttrans : std_logic;
|
|
|
s1finished : std_logic;
|
|
|
|
|
|
-- fast writebuffer signals
|
|
|
tlbcamo : mmutlbcamo_a (M_ENT_MAX-1 downto 0);
|
|
|
|
|
|
-- writebuffer out
|
|
|
wbtransdata : mmuidc_data_out_type;
|
|
|
end record;
|
|
|
type mmutlbo_a is array (natural range <>) of mmutlb_out_type;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|