------------------------------------------------------------------------------ -- 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;