OpenCores
URL https://opencores.org/ocsvn/core_arm/core_arm/trunk

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [arm/] [armcache.vhd] - Rev 4

Compare with Previous | Blame | View Log

-- $(lic)
-- $(help_generic)
-- $(help_local)
 
library ieee;
use ieee.std_logic_1164.all;
use work.amba.all;
use work.bus_comp.all;
use work.corelib.all;
use work.cache_comp.all;
use work.genic_lib.all;
use work.gendc_lib.all;
use work.cache_comp.all;
use work.bus_comp.all;
 
entity armcache is
  port ( 
    rst    : in  std_logic;
    clk    : in  std_logic;
    hold   : in cli_hold;
    ici    : in genic_type_in;
    ico    : out genic_type_out;
    dci    : in gendc_type_in;
    dco    : out gendc_type_out;
    ahbi   : in  ahb_mst_in_type;
    ahbo   : out ahb_mst_out_type;
    apbi   : in  apb_slv_in_type;
    apbo   : out apb_slv_out_type
    );
end armcache;
 
architecture rtl of armcache is
 
  type armcache_tmp_type is record
    dummy      : std_logic;
  end record;
  type armcache_reg_type is record
    genic_ctrl : gicl_ctrl;
    gendc_ctrl : gdcl_ctrl;
  end record;
  type armcache_dbg_type is record
     dummy : std_logic;
     -- pragma translate_off
     dbg : armcache_tmp_type;
     -- pragma translate_on
  end record;
  signal r, c       : armcache_reg_type;
  signal rdbg, cdbg : armcache_dbg_type;
 
  signal mi : ahbmst_mp_in_a(1 downto 0);
  signal mo : ahbmst_mp_out_a(1 downto 0);
 
  signal genic_i    : genic_type_in;
  signal genic_o    : genic_type_out;
  signal genic_ctrl : gicl_ctrl;
  signal genic_icmo : gencmem_type_ic_out;
  signal genic_icmi : gencmem_type_ic_in;
  signal genic_mcio : ahbmst_mp_out;
  signal genic_mcii : ahbmst_mp_in;
 
  signal gendc_i    : gendc_type_in;
  signal gendc_o    : gendc_type_out;
  signal gendc_ctrl : gdcl_ctrl;
  signal gendc_dcmo : gencmem_type_dc_out;
  signal gendc_dcmi : gencmem_type_dc_in;
  signal gendc_wbi  : genwb_type_in;
  signal gendc_wbo  : genwb_type_out;
 
  signal genwb_i     : genwb_type_in;
  signal genwb_o     : genwb_type_out;
  signal genwb_mcwbo : ahbmst_mp_out;
  signal genwb_mcwbi : ahbmst_mp_in;
 
  signal gencmem_i  : gencmem_type_in;
  signal gencmem_o  : gencmem_type_out;
 
begin  
 
  p0: process (clk, rst, r, apbi )
    variable v    : armcache_reg_type;
    variable t    : armcache_tmp_type;
    variable vdbg : armcache_dbg_type;
  begin 
 
    -- $(init(t:armcache_tmp_type))
 
    v := r;
 
    -- reset
    if ( rst = '0' ) then
      v.genic_ctrl.burst := '0';
      v.gendc_ctrl.writeback := '0';
      v.gendc_ctrl.allocateonstore := '0';
    end if;
 
    c <= v;
 
    genic_ctrl <= r.genic_ctrl;
    gendc_ctrl <= r.gendc_ctrl;
 
    -- pragma translate_off
    vdbg := rdbg;
    vdbg.dbg := t;
    cdbg <= vdbg;
    -- pragma translate_on  
 
  end process p0;
 
  pregs : process (clk, c)
  begin
    if rising_edge(clk) then
      r <= c;
      -- pragma translate_off
      rdbg <= cdbg;
      -- pragma translate_on
    end if;
  end process;
 
 
  ic0: genic port map ( rst, clk, hold, genic_i, genic_o, genic_ctrl, genic_icmo, genic_icmi,
                        genic_mcio, genic_mcii );
  genic_i <= ici;
  ico <= genic_o;
  genic_mcio <= mo(0);
  mi(0) <= genic_mcii;
 
  dc0: gendc port map ( rst, clk, hold, gendc_i, gendc_o, gendc_ctrl, gendc_dcmo, gendc_dcmi,
                        gendc_wbi, gendc_wbo );
  gendc_i <= dci;
  dco <= gendc_o;
 
  wb0: genwb port map ( rst, clk, genwb_i, genwb_o, genwb_mcwbo, genwb_mcwbi );
  genwb_i <= gendc_wbi;
  gendc_wbo <= genwb_o;
  genwb_mcwbo <= mo(1);
  mi(1) <= genwb_mcwbi;
 
  cm0: gencmem port map ( rst, clk, gencmem_i, gencmem_o);
  gencmem_i.ic <= genic_icmi;
  genic_icmo <= gencmem_o.ic;
  gencmem_i.dc <= gendc_dcmi;
  gendc_dcmo <= gencmem_o.dc;
 
  ahbmast0: ahbmst_mp generic map ( AHBMST_PORTS => 2)
                      port map ( rst, clk, mi, mo, ahbi, ahbo );
 
end rtl;
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.