------------------------------------------------------------
-- Copyright Mentor Graphic Corporation 1991.
-- All rights reserved.
------------------------------------------------------------
--
-- Model Title: bus unit
-- Date Created: 95/10/29 (Sun)
-- Author: T. Ohstuka ( tootsuka@ss.titech.ac.jp )
--
------------------------------------------------------------
-- Model Description:
--
-----------------------------------------------------------
--
LIBRARY work ;
-- USE work.cpu_package.ALL ;
LIBRARY IEEE,ARITHMETIC ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE ARITHMETIC.STD_LOGIC_ARITH.ALL ;
ENTITY bu IS
PORT (
alubu : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- the result sended to RU
iob : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- I/O data that is written
ir : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- for the instruction fetch
mwr : IN STD_LOGIC ; -- ALU output enable signal from CU
wp : IN STD_LOGIC ; -- Memory write signal form IOU
mrd : IN STD_LOGIC ; -- Memory read signal form CU
alu : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- the result sended from ALU
data : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) BUS ; -- bidirectional data port
dsw : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- I/O data that are read
adr : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- address output for MU
b : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; -- sended to input port B of the ALU
active : IN STD_LOGIC -- active signal
) ;
END bu ;
-- ---------------------------------------------------------
--Copyright Mentor Graphic Corporation 1991.
--All rights reserved.
-- ---------------------------------------------------------
--Arch. Body for entity declared in
------------------------------------------------------------
--
LIBRARY IEEE ;
LIBRARY work ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_1164_EXTENSIONS.ALL ;
-- USE work.cpu_package.ALL ;
ARCHITECTURE behav1 OF bu IS
SIGNAL dbus,data0 : STD_LOGIC_VECTOR(7 DOWNTO 0) ;
SIGNAL bus_ctl : STD_LOGIC_VECTOR(2 DOWNTO 0) ; -- bus control
SIGNAL b_ctl : STD_LOGIC_VECTOR(1 DOWNTO 0) ; -- b port of ALU output control
SIGNAL oe : STD_LOGIC ; -- output enable of RAM
BEGIN
bus_ctl <= oe & mwr & wp ;
oe <= ( mrd OR ((NOT active) AND (NOT wp))) ;
b_ctl <= mrd & active ;
WITH bus_ctl SELECT
dbus <= data0 WHEN "100",
-- "data" from RAM is connected
alu WHEN "010",
-- "alu" from ALU output is connected to write RAM
dsw WHEN "001",
-- "dsw" from SW is connected to write RAM
"ZZZZZZZZ" WHEN OTHERS ;
iob <= dbus ;
-- data transfer from dbus to iob ( i/o buffer )
ir <= dbus ;
-- data transfer from dbus to ir ( instruction resistor )
alubu <= alu ;
adr <= alu ;
WITH bus_ctl SELECT
data0 <= alu WHEN "010",
dsw WHEN "001",
dsw WHEN "011",
-- DBUS is connected to RAM
"ZZZZZZZZ" WHEN OTHERS ;
WITH b_ctl SELECT
b <= dbus WHEN "11",
-- DBUS is connected to B port of ALU
"11111111" WHEN OTHERS ;
WITH bus_ctl SELECT
data0 <= data WHEN "100",
"ZZZZZZZZ" WHEN OTHERS ;
dbustoram : BLOCK(bus_ctl="010" OR bus_ctl="001")
BEGIN
data <= guarded data0 ;
END BLOCK dbustoram ;
END behav1 ;