-- Author: M. Gomez
-- Date : 10/29/1999
-- Rev No: 1.1
-- File : arm7.vhdl
-- Following is the arm7 entity declaration and
-- architectural definition
--
USE work.arm7_pkg.ALL;
USE work.arm7_time_pkg.ALL;
ENTITY arm7 IS
GENERIC (
Tp : time := Tps -- Establish standard unit propogation delay
-- time for use throughout the design.
);
PORT(
mclk : IN io;
nWait : IN io;
nrw : OUT io;
nbw : OUT io;
nIrq : IN io;
nFiq : IN io;
nReset : IN io;
abort : IN io;
nTrans : OUT io;
nMReq : OUT io;
seq : OUT io;
lock : OUT io;
nm : OUT io_vec(4 DOWNTO 0);
data : IN data_t;
dout : OUT data_t;
dbe : IN io;
nEnOut : OUT io;
adrs : OUT adrs_t;
ale : IN io);
END ENTITY arm7;
ARCHITECTURE behav OF arm7 IS
SIGNAL a_bus : data_t;
SIGNAL alu_bus : data_t;
SIGNAL b_bus : data_t;
SIGNAL d_bus : data_t;
SIGNAL pc_bus : adrs_t;
SIGNAL inc_bus : adrs_t;
SIGNAL inst_bus : inst_bus_t;
SIGNAL alu_ctrl : alu_ctrl_t;
SIGNAL regBank_ctrl : regBank_ctrl_t;
SIGNAL adrsReg_ctrl : adrsReg_ctrl_t;
SIGNAL adrsReg_ctrl_rtn : adrsReg_ctrl_rtn_t;
SIGNAL adrsInc_ctrl : adrsInc_ctrl_t;
SIGNAL wdReg_ctrl : wdReg_ctrl_t;
SIGNAL wdReg_ctrl_rtn : wdReg_ctrl_rtn_t;
SIGNAL rdReg_ctrl : rdReg_ctrl_t;
SIGNAL rdReg_ctrl_rtn : rdReg_ctrl_rtn_t;
SIGNAL cc : cc_t;
SIGNAL cin : io;
SIGNAL cout : io;
SIGNAL sysclk : io;
COMPONENT alu IS
GENERIC ( Tp : time );
PORT (
alu_bus : OUT data_t;
cc : OUT cc_t;
a_bus : IN data_t;
b_bus : IN data_t;
d_bus : IN data_t;
cin : IN io;
alu_ctrl : IN alu_ctrl_t);
END COMPONENT alu;
COMPONENT regBank IS
GENERIC (Tp : time );
PORT (
a_bus : OUT data_t;
b_bus : OUT data_t;
cout : OUT io;
pc_bus : OUT data_t;
alu_bus : IN data_t;
inc_bus : IN data_t;
regBank_ctrl : IN regBank_ctrl_t;
nReset : IN io;
sysClk : IN io);
END COMPONENT regBank;
COMPONENT adrsReg IS
GENERIC (Tp : time);
PORT (
adrs : OUT adrs_t;
adrsReg_ctrl_rtn : IN adrsReg_ctrl_rtn_t;
inc_bus : IN adrs_t;
pc_bus : IN adrs_t;
adrsReg_ctrl : IN adrsReg_ctrl_t;
nReset : IN io;
sysClk : IN io);
END COMPONENT adrsReg;
COMPONENT wdReg IS
GENERIC (Tp : time);
PORT (
dout : OUT data_t;
nEnOut : OUT io;
wdReg_ctrl_rtn : OUT wdReg_ctrl_rtn_t;
b_bus : IN adrs_t;
dbe : IN io;
wdReg_ctrl : IN wdReg_ctrl_t;
nReset : IN io;
sysClk : IN io);
END COMPONENT wdReg;
COMPONENT rdReg IS
GENERIC (Tp : time);
PORT (
b_bus : OUT data_t;
inst_bus : OUT inst_bus_t;
rdReg_ctrl_rtn : OUT rdReg_ctrl_rtn_t;
data : IN data_t;
rdReg_ctrl : IN rdReg_ctrl_t;
nReset : IN io;
sysClk : IN io);
END COMPONENT rdReg;
COMPONENT decAndCtrl IS
GENERIC (Tp : time);
PORT (
nRW : OUT io;
nBW : OUT io;
nTrans : OUT io;
nMReq : OUT io;
seq : OUT io;
lock : OUT io;
nM : OUT io_vec( 4 DOWNTO 0);
adrsReg_ctrl : OUT adrsReg_ctrl_t;
alu_ctrl : OUT alu_ctrl_t;
wdReg_ctrl : OUT wdReg_ctrl_t;
rdReg_ctrl : OUT rdReg_ctrl_t;
adrsReg_ctrl_rtn : IN adrsReg_ctrl_rtn_t;
wdReg_ctrl_rtn : IN wdReg_ctrl_rtn_t;
rdReg_ctrl_rtn : IN rdReg_ctrl_rtn_t;
nIRQ : IN io;
nFIQ : IN io;
nRESET : IN io;
abort : IN io;
sysClk : IN io);
END COMPONENT decAndCtrl;
COMPONENT clkBuf IS
GENERIC (Tp : time);
PORT (
sysClk : OUT io;
mClk : IN io;
nWait : IN io);
END COMPONENT clkBuf;
BEGIN
U0 : clkBuf
GENERIC MAP (Tp)
PORT MAP ( sysClk, mClk, nWait);
U1 : alu
GENERIC MAP (Tp)
PORT MAP ( alu_bus, cc, a_bus, b_bus, d_bus, cin, alu_ctrl);
U2 : regBank
GENERIC MAP (Tp)
PORT MAP (a_bus, b_bus, cout, pc_bus, alu_bus, inc_bus, regBank_ctrl, nReset, sysClk);
U3 : adrsReg
GENERIC MAP (Tp)
PORT MAP (adrs, adrsReg_ctrl_rtn, inc_bus, pc_bus, adrsReg_ctrl, nReset, sysClk);
U4 : wdReg
GENERIC MAP (Tp)
PORT MAP (dout, nEnOut, wdReg_ctrl_rtn, b_bus, dbe, wdReg_ctrl, nReset, sysClk);
U5 : rdReg
GENERIC MAP (Tp)
PORT MAP (b_bus, inst_bus, rdReg_ctrl_rtn, data, rdReg_ctrl, nReset, sysClk);
U6 : decAndCtrl
GENERIC MAP (Tp)
PORT MAP ( nRW, nBW, nTrans, nMReq, seq, lock, nM,
adrsReg_ctrl, alu_ctrl, wdReg_ctrl, rdReg_ctrl,
adrsReg_ctrl_rtn, wdReg_ctrl_rtn, rdReg_ctrl_rtn,
nIRQ, nFIQ, nRESET, abort, sysClk);
END ARCHITECTURE behav;