libcache.vhd

来自「The GRLIB IP Library is an integrated se」· VHDL 代码 · 共 694 行 · 第 1/2 页

VHD
694
字号
    mcdo   : in  memory_dc_out_type;    ahbsi : in  ahb_slv_in_type;    dcrami : out dcram_in_type;    dcramo : in  dcram_out_type;    fpuholdn : in  std_ulogic  );  end component;   component icache   generic (    icen      : integer range 0 to 1  := 0;    irepl     : integer range 0 to 2  := 0;    isets     : integer range 1 to 4  := 1;    ilinesize : integer range 4 to 8  := 4;    isetsize  : integer range 1 to 256 := 1;    isetlock  : integer range 0 to 1  := 0;    lram      : integer range 0 to 1 := 0;    lramsize  : integer range 1 to 512 := 1;    lramstart : integer range 0 to 255 := 16#8e#);          port (    rst : in  std_ulogic;    clk : in  std_ulogic;    ici : in  icache_in_type;    ico : out icache_out_type;    dci : in  dcache_in_type;    dco : in  dcache_out_type;    mcii : out memory_ic_in_type;    mcio : in  memory_ic_out_type;    icrami : out icram_in_type;    icramo : in  icram_out_type;    fpuholdn : in  std_ulogic);  end component;  component cache  generic (    hindex    : integer              := 0;    dsu       : integer range 0 to 1 := 0;    icen      : integer range 0 to 1  := 0;    irepl     : integer range 0 to 2 := 0;    isets     : integer range 1 to 4 := 1;    ilinesize : integer range 4 to 8 := 4;    isetsize  : integer range 1 to 256:= 1;    isetlock  : integer range 0 to 1 := 0;    dcen      : integer range 0 to 1  := 0;    drepl     : integer range 0 to 2 := 0;    dsets     : integer range 1 to 4 := 1;    dlinesize : integer range 4 to 8 := 4;    dsetsize  : integer range 1 to 256:= 1;    dsetlock  : integer range 0 to 1 := 0;    dsnoop    : integer range 0 to 2 := 0;    ilram      : integer range 0 to 1 := 0;    ilramsize  : integer range 1 to 512 := 1;            ilramstart : integer range 0 to 255 := 16#8e#;    dlram      : integer range 0 to 1 := 0;    dlramsize  : integer range 1 to 512 := 1;            dlramstart : integer range 0 to 255 := 16#8f#;    cft        : integer range 0 to 1 := 0);  port (    rst   : in  std_ulogic;    clk   : in  std_ulogic;    ici   : in  icache_in_type;    ico   : out icache_out_type;    dci   : in  dcache_in_type;    dco   : out dcache_out_type;    ahbi  : in  ahb_mst_in_type;    ahbo  : out ahb_mst_out_type;    ahbsi : in  ahb_slv_in_type;    ahbso  : in  ahb_slv_out_vector;            crami : out cram_in_type;    cramo : in  cram_out_type;    fpuholdn : in  std_ulogic  );  end component;   component cachemem   generic (    tech      : integer range 0 to NTECH := 0;    icen      : integer range 0 to 1 := 0;    irepl     : integer range 0 to 2 := 0;    isets     : integer range 1 to 4 := 1;    ilinesize : integer range 4 to 8 := 4;    isetsize  : integer range 1 to 256 := 1;    isetlock  : integer range 0 to 1 := 0;    dcen      : integer range 0 to 1 := 0;    drepl     : integer range 0 to 2 := 0;    dsets     : integer range 1 to 4 := 1;    dlinesize : integer range 4 to 8 := 4;    dsetsize  : integer range 1 to 256 := 1;    dsetlock  : integer range 0 to 1 := 0;    dsnoop    : integer range 0 to 2 := 0;    ilram      : integer range 0 to 1 := 0;    ilramsize  : integer range 1 to 512 := 1;            dlram      : integer range 0 to 1 := 0;    dlramsize  : integer range 1 to 512 := 1;    mmuen     : integer range 0 to 1 := 0  );  port (    	clk   : in  std_ulogic;	crami : in  cram_in_type;	cramo : out cram_out_type  );  end component;component cachememft  generic (    tech      : integer range 0 to NTECH := 0;    icen      : integer range 0 to 1 := 0;    irepl     : integer range 0 to 2 := 0;    isets     : integer range 1 to 4 := 1;    ilinesize : integer range 4 to 8 := 4;    isetsize  : integer range 1 to 256 := 1;    isetlock  : integer range 0 to 1 := 0;    dcen      : integer range 0 to 1 := 0;    drepl     : integer range 0 to 2 := 0;    dsets     : integer range 1 to 4 := 1;    dlinesize : integer range 4 to 8 := 4;    dsetsize  : integer range 1 to 256 := 1;    dsetlock  : integer range 0 to 1 := 0;    dsnoop    : integer range 0 to 2 := 0;    ilram      : integer range 0 to 1 := 0;    ilramsize  : integer range 1 to 512 := 1;            dlram      : integer range 0 to 1 := 0;    dlramsize  : integer range 1 to 512 := 1;    mmuen     : integer range 0 to 1 := 0;    errinj    : integer range 0 to 3 := 0      );  port (        clk   : in  std_ulogic;	crami : in  cram_in_type;	cramo : out cram_out_type  );end component;    -- mmu versions  component mmu_acache     generic (      hindex : integer range 0 to NAHBMST-1  := 0;      ilinesize : integer range 4 to 8 := 4);    port (      rst    : in  std_logic;      clk    : in  std_logic;      mcii   : in  memory_ic_in_type;      mcio   : out memory_ic_out_type;      mcdi   : in  memory_dc_in_type;      mcdo   : out memory_dc_out_type;      mcmmi  : in  memory_mm_in_type;      mcmmo  : out memory_mm_out_type;      ahbi   : in  ahb_mst_in_type;      ahbo   : out ahb_mst_out_type;      ahbso  : in  ahb_slv_out_vector    );  end component;    component mmu_icache     generic (      irepl     : integer range 0 to 2  := 0;      isets     : integer range 1 to 4  := 1;      ilinesize : integer range 4 to 8  := 4;      isetsize  : integer range 1 to 256 := 1;      isetlock  : integer range 0 to 1  := 0    );    port (      rst : in  std_logic;      clk : in  std_logic;      ici : in  icache_in_type;      ico : out icache_out_type;      dci : in  dcache_in_type;      dco : in  dcache_out_type;      mcii : out memory_ic_in_type;      mcio : in  memory_ic_out_type;      icrami : out icram_in_type;      icramo : in  icram_out_type;      fpuholdn : in  std_logic;      mmudci : in  mmudc_in_type;      mmuici : out mmuic_in_type;      mmuico : in mmuic_out_type    );  end component;   component mmu_dcache     generic (      dsu       : integer range 0 to 1  := 0;      drepl     : integer range 0 to 2  := 0;      dsets     : integer range 1 to 4  := 1;      dlinesize : integer range 4 to 8  := 4;      dsetsize  : integer range 1 to 256 := 1;      dsetlock  : integer range 0 to 1  := 0;      dsnoop    : integer range 0 to 2 := 0;      itlbnum   : integer range 2 to 64 := 8;      dtlbnum   : integer range 2 to 64 := 8;      tlb_type  : integer range 0 to 1 := 1      );    port (      rst : in  std_logic;      clk : in  std_logic;      dci : in  dcache_in_type;      dco : out dcache_out_type;      ico : in  icache_out_type;      mcdi : out memory_dc_in_type;      mcdo : in  memory_dc_out_type;      ahbsi : in  ahb_slv_in_type;      dcrami : out dcram_in_type;      dcramo : in  dcram_out_type;      fpuholdn : in  std_logic;      mmudci : out mmudc_in_type;      mmudco : in mmudc_out_type  );  end component;     component mmu_cache     generic (      hindex    : integer              := 0;      memtech   : integer range 0 to NTECH := 0;      dsu       : integer range 0 to 1 := 0;      icen      : integer range 0 to 1 := 0;      irepl     : integer range 0 to 2 := 0;      isets     : integer range 1 to 4 := 1;      ilinesize : integer range 4 to 8 := 4;      isetsize  : integer range 1 to 256 := 1;      isetlock  : integer range 0 to 1 := 0;      dcen      : integer range 0 to 1 := 0;      drepl     : integer range 0 to 2 := 0;      dsets     : integer range 1 to 4 := 1;      dlinesize : integer range 4 to 8 := 4;      dsetsize  : integer range 1 to 256 := 1;      dsetlock  : integer range 0 to 1 := 0;      dsnoop    : integer range 0 to 2 := 0;      itlbnum   : integer range 2 to 64 := 8;      dtlbnum   : integer range 2 to 64 := 8;      tlb_type  : integer range 0 to 1 := 1;      TLB_REP   : integer range 0 to 1 := 0);    port (      rst   : in  std_ulogic;      clk   : in  std_ulogic;      ici   : in  icache_in_type;      ico   : out icache_out_type;      dci   : in  dcache_in_type;      dco   : out dcache_out_type;      ahbi  : in  ahb_mst_in_type;      ahbo  : out ahb_mst_out_type;      ahbsi : in  ahb_slv_in_type;      ahbso : in  ahb_slv_out_vector;                    crami : out cram_in_type;      cramo : in  cram_out_type;      fpuholdn : in  std_ulogic    );  end component;   component acacheft  generic (    hindex : integer range 0 to NAHBMST-1  := 0;    ilinesize : integer range 4 to 8 := 4);  port (    rst    : in  std_ulogic;    clk    : in  std_ulogic;    mcii   : in  memory_ic_in_type;    mcio   : out memory_ic_out_type;    mcdi   : in  memory_dc_in_type;    mcdo   : out memory_dc_out_type;    ahbi   : in  ahb_mst_in_type;    ahbo   : out ahb_mst_out_type;    ahbso  : in  ahb_slv_out_vector  );  end component;  component dcacheft  generic (    dsu       : integer range 0 to 1  := 0;    dcen      : integer range 0 to 1  := 0;    drepl     : integer range 0 to 2  := 0;    dsets     : integer range 1 to 4  := 1;    dlinesize : integer range 4 to 8  := 4;    dsetsize  : integer range 1 to 256 := 1;    dsetlock  : integer range 0 to 1  := 0;    dsnoop    : integer range 0 to 2 := 0;    dlram      : integer range 0 to 1 := 0;    dlramsize  : integer range 1 to 512 := 1;    dlramstart : integer range 0 to 255 := 16#8f#;    ilram      : integer range 0 to 1 := 0;    ilramstart : integer range 0 to 255 := 16#8e#);  port (    rst    : in  std_ulogic;    clk    : in  std_ulogic;    dci    : in  dcache_in_type;    dco    : out dcache_out_type;    ico    : in  icache_out_type;    mcdi   : out memory_dc_in_type;    mcdo   : in  memory_dc_out_type;    ahbsi : in  ahb_slv_in_type;    dcrami : out dcram_in_type;    dcramo : in  dcram_out_type;    fpuholdn : in  std_ulogic  );  end component;   component icacheft   generic (    icen      : integer range 0 to 1  := 0;    irepl     : integer range 0 to 2  := 0;    isets     : integer range 1 to 4  := 1;    ilinesize : integer range 4 to 8  := 4;    isetsize  : integer range 1 to 256 := 1;    isetlock  : integer range 0 to 1  := 0;    lram      : integer range 0 to 1 := 0;    lramsize  : integer range 1 to 512 := 1;    lramstart : integer range 0 to 255 := 16#8e#);          port (    rst : in  std_ulogic;    clk : in  std_ulogic;    ici : in  icache_in_type;    ico : out icache_out_type;    dci : in  dcache_in_type;    dco : in  dcache_out_type;    mcii : out memory_ic_in_type;    mcio : in  memory_ic_out_type;    icrami : out icram_in_type;    icramo : in  icram_out_type;    fpuholdn : in  std_ulogic);  end component;      function cache_cfg(repl, sets, linesize, setsize, lock, snoop,    lram, lramsize, lramstart, mmuen : integer) return std_logic_vector;end;package body libcache is  function cache_cfg(repl, sets, linesize, setsize, lock, snoop,      lram, lramsize, lramstart, mmuen : integer) return std_logic_vector is   variable cfg : std_logic_vector(31 downto 0);  begin    cfg := (others => '0');    cfg(31 downto 31) := conv_std_logic_vector(lock, 1);    cfg(30 downto 28) := conv_std_logic_vector(repl+1, 3);    cfg(27 downto 27) := conv_std_logic_vector(snoop, 1);    cfg(26 downto 24) := conv_std_logic_vector(sets-1, 3);    cfg(23 downto 20) := conv_std_logic_vector(log2(setsize), 4);    cfg(19 downto 19) := conv_std_logic_vector(lram, 1);    cfg(18 downto 16) := conv_std_logic_vector(log2(linesize), 3);    cfg(15 downto 12) := conv_std_logic_vector(log2(lramsize), 4);    cfg(11 downto  4) := conv_std_logic_vector(lramstart, 8);    cfg(3  downto  3) := conv_std_logic_vector(mmuen, 1);    return(cfg);  end;end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?