📄 iface.vhd
字号:
----------------------------------------------------------------------------
-- This file is a part of the LEON VHDL model
-- Copyright (C) 1999 European Space Agency (ESA)
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2 of the License, or (at your option) any later version.
--
-- See the file COPYING.LGPL for the full details of the license.
-----------------------------------------------------------------------------
-- Entity: iface
-- File: iface.vhd
-- Author: Jiri Gaisler - ESA/ESTEC
-- Description: Package with type declarations for module interconnections
------------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
use work.leon_target.all;
use work.leon_config.all;
use work.mmuconfig.all;
use work.sparcv8.all;
package leon_iface is
subtype clk_type is std_logic;
------------------------------------------------------------------------------
-- Add I/Os for custom peripherals in the records below
------------------------------------------------------------------------------
-- peripheral inputs
-- peripheral outputs
type io_out_type is record
piol : std_logic_vector(15 downto 0); -- I/O port outputs
piodir : std_logic_vector(15 downto 0); -- I/O port direction
errorn : std_logic; -- CPU in error mode
wdog : std_logic; -- watchdog output
pci_arb_gnt_n : std_logic_vector(0 to 3);
end record;
------------------------------------------------------------------------------
-- IU register file signals
type rf_in_type is record
rd1addr : std_logic_vector(RABITS-1 downto 0); -- read address 1
rd2addr : std_logic_vector(RABITS-1 downto 0); -- read address 2
wraddr : std_logic_vector(RABITS-1 downto 0); -- write address
wrdata : std_logic_vector(RDBITS-1 downto 0); -- write data
ren1 : std_logic; -- read 1 enable
ren2 : std_logic; -- read 2 enable
wren : std_logic; -- write enable
end record;
type rf_out_type is record
data1 : std_logic_vector(RDBITS-1 downto 0); -- read data 1
data2 : std_logic_vector(RDBITS-1 downto 0); -- read data 2
end record;
-- co-processor register file signals
type rf_cp_in_type is record
rd1addr : std_logic_vector(3 downto 0); -- read address 1
rd2addr : std_logic_vector(3 downto 0); -- read address 2
wraddr : std_logic_vector(3 downto 0); -- write address
wrdata : std_logic_vector(RDBITS-1 downto 0); -- write data
ren1 : std_logic; -- read 1 enable
ren2 : std_logic; -- read 2 enable
wren : std_logic; -- write enable
end record;
type rf_cp_out_type is record
data1 : std_logic_vector(RDBITS-1 downto 0); -- read data 1
data2 : std_logic_vector(RDBITS-1 downto 0); -- read data 2
end record;
-- instruction cache diagnostic access inputs
type icdiag_in_type is record
addr : std_logic_vector(31 downto 0); -- memory stage address
enable : std_logic;
read : std_logic;
tag : std_logic;
ctx : std_logic;
flush : std_logic;
pflush : std_logic;
pflushaddr : std_logic_vector(VA_I_U downto VA_I_D);
pflushtyp : std_logic;
end record;
-- data cache controller inputs
type dcache_in_type is record
asi : std_logic_vector(7 downto 0); -- ASI for load/store
maddress : std_logic_vector(31 downto 0); -- memory stage address
eaddress : std_logic_vector(31 downto 0); -- execute stage address
edata : std_logic_vector(31 downto 0); -- execute stage data
size : std_logic_vector(1 downto 0);
signed : std_logic;
enaddr : std_logic;
eenaddr : std_logic;
nullify : std_logic;
lock : std_logic;
read : std_logic;
write : std_logic;
flush : std_logic;
dsuen : std_logic;
msu : std_logic; -- memory stage supervisor
esu : std_logic; -- execution stage supervisor
end record;
-- data cache controller outputs
type dcache_out_type is record
data : std_logic_vector(31 downto 0); -- Data bus address
mexc : std_logic; -- memory exception
hold : std_logic;
mds : std_logic;
werr : std_logic; -- memory write error
icdiag : icdiag_in_type;
dsudata : std_logic_vector(31 downto 0);
end record;
type icache_in_type is record
rpc : std_logic_vector(31 downto PCLOW); -- raw address (npc)
fpc : std_logic_vector(31 downto PCLOW); -- latched address (fpc)
dpc : std_logic_vector(31 downto PCLOW); -- latched address (dpc)
rbranch : std_logic; -- Instruction branch
fbranch : std_logic; -- Instruction branch
nullify : std_logic; -- instruction nullify
su : std_logic; -- super-user
flush : std_logic; -- flush icache
end record;
type icache_out_type is record
data : std_logic_vector(31 downto 0);
exception : std_logic;
hold : std_logic;
flush : std_logic; -- flush in progress
diagrdy : std_logic; -- diagnostic access ready
diagdata : std_logic_vector(31 downto 0); -- diagnostic data
mds : std_logic; -- memory data strobe
end record;
type memory_ic_in_type is record
address : std_logic_vector(31 downto 0); -- memory address
burst : std_logic; -- burst request
req : std_logic; -- memory cycle request
su : std_logic; -- supervisor address space
flush : std_logic; -- flush in progress
end record;
type memory_ic_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
burst : std_logic; -- memory burst enable
ics : std_logic_vector(1 downto 0); -- icache state (from CCR)
cache : std_logic; -- cacheable data
end record;
type memory_dc_in_type is record
address : std_logic_vector(31 downto 0);
data : std_logic_vector(31 downto 0);
asi : std_logic_vector(3 downto 0); -- ASI for load/store
size : std_logic_vector(1 downto 0);
burst : std_logic;
read : std_logic;
req : std_logic;
flush : std_logic; -- flush in progress
lock : std_logic;
su : std_logic;
end record;
type memory_dc_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
dcs : std_logic_vector(1 downto 0);
iflush : std_logic; -- flush icache (from CCR)
dflush : std_logic; -- flush dcache (from CCR)
cache : std_logic; -- cacheable data
dsnoop : std_logic; -- snoop enable
ba : std_logic; -- bus active (used for snooping)
bg : std_logic; -- bus grant (used for snooping)
end record;
type ahbstat_out_type is record
ahberr : std_logic;
end record;
type itram_in_type is record
tag : std_logic_vector(ITAG_BITS - ILINE_SIZE - 1 downto 0);
lrr : std_logic;
lock : std_logic;
valid : std_logic_vector(ILINE_SIZE -1 downto 0);
enable : std_logic;
ctx : std_logic_vector(M_CTX_SZ-1 downto 0); --#mmu: ctx number
write : std_logic_vector(0 to MAXSETS-1);
flush : std_logic;
end record;
type itram_out_single_type is record
tag : std_logic_vector(ITAG_BITS - ILINE_SIZE -1 downto 0);
lrr : std_logic;
lock : std_logic;
valid : std_logic_vector(ILINE_SIZE -1 downto 0);
ctx : std_logic_vector(M_CTX_SZ-1 downto 0); --#mmu: ctx number
end record;
type itram_out_type is array (0 to MAXSETS-1) of itram_out_single_type;
type idram_in_type is record
address : std_logic_vector((IOFFSET_BITS + ILINE_BITS -1) downto 0);
data : std_logic_vector(31 downto 0);
enable : std_logic;
write : std_logic_vector(0 to MAXSETS-1);
end record;
type idram_out_single_type is record
data : std_logic_vector(31 downto 0);
end record;
type idram_out_type is array (0 to MAXSETS-1) of idram_out_single_type;
type dtram_in_type is record
tag : std_logic_vector(DTAG_BITS - DLINE_SIZE - 1 downto 0);
lrr : std_logic_vector(0 to MAXSETS-1);
lock : std_logic_vector(0 to MAXSETS-1);
valid : std_logic_vector(DLINE_SIZE -1 downto 0);
enable : std_logic;
write : std_logic_vector(0 to MAXSETS-1);
ctx : std_logic_vector(M_CTX_SZ-1 downto 0); --#mmu: ctx number
flush : std_logic;
end record;
type dtram_out_single_type is record
tag : std_logic_vector(DTAG_BITS - DLINE_SIZE -1 downto 0);
lrr : std_logic;
lock : std_logic;
valid : std_logic_vector(DLINE_SIZE -1 downto 0);
ctx : std_logic_vector(M_CTX_SZ-1 downto 0); --#mmu: ctx number
end record;
type dtram_out_type is array (0 to MAXSETS-1) of dtram_out_single_type;
type dtramsn_in_type is record
enable : std_logic;
write : std_logic_vector(0 to MAXSETS-1);
address : std_logic_vector((DOFFSET_BITS-1) downto 0);
tag : std_logic_vector(DTAG_BITS - DLINE_SIZE -1 downto 0);
end record;
type dtramsn_out_single_type is record
tag : std_logic_vector(DTAG_BITS - DLINE_SIZE -1 downto 0);
end record;
type dtramsn_out_type is array (0 to MAXSETS-1) of dtramsn_out_single_type;
type ddram_in_type is record
address : std_logic_vector((DOFFSET_BITS + DLINE_BITS -1) downto 0);
data : std_logic_vector(31 downto 0);
enable : std_logic;
write : std_logic_vector(0 to MAXSETS-1);
end record;
type ddram_out_single_type is record
data : std_logic_vector(31 downto 0);
end record;
type ddram_out_type is array (0 to MAXSETS-1) of ddram_out_single_type;
type ldram_in_type is record
address : std_logic_vector(LOCAL_RAM_BITS + 1 downto 2);
enable : std_logic;
read : std_logic;
write : std_logic;
end record;
type icram_in_type is record
itramin : itram_in_type;
idramin : idram_in_type;
end record;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -