📄 libcache.vhd
字号:
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; hclken : in std_ulogic ); end component; component dcache 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 6 := 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#; memtech : integer range 0 to NTECH := 0; cached : integer := 0); 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; sclk : 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 6 := 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#; cached : integer := 0; clk2x : integer := 0; memtech : integer range 0 to NTECH := 0; scantest : integer := 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; hclk, sclk : in std_ulogic; hclken : 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 6 := 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; sclk : in std_ulogic ); end component; -- mmu versions component mmu_acache generic ( hindex : integer range 0 to NAHBMST-1 := 0; ilinesize : integer range 4 to 8 := 4; cached : integer := 0; clk2x : integer := 0; scantest : integer := 0); 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; hclken : in std_ulogic ); 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 6 := 0; itlbnum : integer range 2 to 64 := 8; dtlbnum : integer range 2 to 64 := 8; tlb_type : integer range 0 to 3 := 1; memtech : integer range 0 to NTECH := 0; cached : integer := 0); 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; sclk : in std_ulogic ); 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 6 := 0; itlbnum : integer range 2 to 64 := 8; dtlbnum : integer range 2 to 64 := 8; tlb_type : integer range 0 to 3 := 1; tlb_rep : integer range 0 to 1 := 0; cached : integer := 0; clk2x : integer := 0; scantest : integer := 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; hclk, sclk : in std_ulogic; hclken : in std_ulogic ); end component; component clk2xqual port ( rst : in std_ulogic; clk : in std_ulogic; clk2 : in std_ulogic; clken : out std_ulogic); end component; component clk2xsync generic (hindex : integer := 0; clk2x : integer := 1); port ( rst : in std_ulogic; hclk : in std_ulogic; clk : in std_ulogic; ahbi : in ahb_mst_in_type; ahbi2 : out ahb_mst_in_type; ahbo : in ahb_mst_out_type; ahbo2 : out ahb_mst_out_type; ahbsi : in ahb_slv_in_type; ahbsi2 : out ahb_slv_in_type; mcii : in memory_ic_in_type; mcdi : in memory_dc_in_type; mcdo : in memory_dc_out_type; mmreq : in std_ulogic; mmgrant: in std_ulogic; hclken : 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); if snoop /= 0 then cfg(27) := '1'; end if; --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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -