Академический Документы
Профессиональный Документы
Культура Документы
2006-2007
PROJECT REPORT
BACHELOR OF TECHNOLOGY
IN
ELECTRONICS AND COMMUNICATION ENGINEERING
SUBMITTED BY
Mr. P. Murlidhar
1
Acknowledgements
2
CONTENTS
Abstract
Introduction
Priority Interrupt Algorithm
VHDL Implementation
The Memory Management Unit
Components
Synchronous RAM
Address and Data Bus Multiplexer
Conclusions
References
ABSTRACT
An MMU is a controller that allows a common resource memory to be
shared by two or more processors depending on various input control
signals. It provides the access to memory to one of the processor according
to priority. Being an Interrupt service procedure, time of processor is
managed efficiently. We have used the fixed priority algorithm. This
approach allows a wide design exploration through automatic
generation/selection of arbitration schemes.
INTRODUCTION
1
Problem statement:
2
PRIORITY INTERRUPT ALGORITHM
Each processor is assigned a priority and depending on the priority a CPU is
given access. When a lower priority processor is active and the controller
receives the request signal from a higher priority processor, the latter is
given access until its job is finished after which the lower priority processor
is given access. Nested interrupts should be allowed.
STATE DIAGRAM:
3
VHDL IMPLEMENTATION
VHDL:
¾ Entity
Meaningful name describing the purpose of the circuit.
¾ Architecture
According to the modeling style used (i.e., Behavioral,
Procedural, Dataflow, or Structural) or to some specific
architecture property.
¾ Configuration
Name of the corresponding entity with suffix "Cfg“.
¾ Package
Name of the design (i.e., top-level entity) with suffix
"Pkg“.
¾ Testbench (entity, architecture, package)
Name of corresponding entity with suffix "Tb“.
¾ Library (package)
Library name with suffix "Lib".
FPGA
4
COMPONENTS:-
• Synchronous RAM
• Address and Data Bus Multiplexer
FPGA Occupancy:-
Project navigator
5
State Diagram Simulation:
Conditions:
6
MEMORY MANAGEMENT UNIT:
PRIORITY INTERRUPT MMU:
Entity:
RTL:
7
TECHNOLOGY VIEW:
m u l ti p l e x:m u l t
a d d A [0 ] addA[0]
a d d A [1 ] addA[1]
a d d A [2 ] addA[2]
a d d A [3 ] addA[3]
a d d A [4 ] addA[4]
a d d A [5 ] addA[5]
a d d A [6 ] addA[6]
a d d A [7 ] addA[7]
a d d A [8 ] addA[8]
a d d A [9 ] addA[9]
a d d B [0 ] addB[0]
a d d B [1 ] addB[1]
a d d B [2 ] addB[2]
a d d B [3 ] addB[3]
a d d B [4 ] addB[4]
a d d B [5 ] addB[5]
a d d B [6 ] addB[6]
m e m o r y:m e m
a d d B [7 ] addB[7]
a d d B [8 ] addB[8] c lk
a d d B [9 ] addB[9] data_out_mux[0]~ 688 data_out_mux[0]~ 688
a d d C [0 ] addC [0] data_out_mux[1]~ 689 data_out_mux[1]~ 689
a d d C [1 ] addC [1] data_out_mux[2]~ 690 data_out_mux[2]~ 690
a d d C [2 ] addC [2] data_out_mux[3]~ 691 data_out_mux[3]~ 691
a d d C [3 ] addC [3] data_out_mux[4]~ 692 data_out_mux[4]~ 692
a d d C [4 ] addC [4] data_out_mux[5]~ 693 data_out_mux[5]~ 693 q _b[0] d a ta _ r d _ o u t[0 ]
a d d C [5 ] addC [5] data_out_mux[6]~ 694 data_out_mux[6]~ 694 q _b[1] d a ta _ r d _ o u t[1 ]
a d d C [6 ] addC [6] data_out_mux[7]~ 695 data_out_mux[7]~ 695 q _b[2] d a ta _ r d _ o u t[2 ]
a d d C [7 ] addC [7] data_out_mux[8]~ 696 data_out_mux[8]~ 696 q _b[3] d a ta _ r d _ o u t[3 ]
a d d C [8 ] addC [8] data_out_mux[9]~ 697 data_out_mux[9]~ 697 q _b[4] d a ta _ r d _ o u t[4 ]
a d d C [9 ] addC [9] data_out_mux[10]~ 698 data_out_mux[10]~ 698 q _b[5] d a ta _ r d _ o u t[5 ]
d a ta A [0 ] dataA[0] data_out_mux[11]~ 699 data_out_mux[11]~ 699 q _b[6] d a ta _ r d _ o u t[6 ]
d a ta A [1 ] dataA[1] data_out_mux[12]~ 700 data_out_mux[12]~ 700 q _b[7] d a ta _ r d _ o u t[7 ]
d a ta A [2 ] dataA[2] data_out_mux[13]~ 701 data_out_mux[13]~ 701 q _b[8] d a ta _ r d _ o u t[8 ]
d a ta A [3 ] dataA[3] data_out_mux[14]~ 702 data_out_mux[14]~ 702 q _b[9] d a ta _ r d _ o u t[9 ]
d a ta A [4 ] dataA[4] data_out_mux[15]~ 703 data_out_mux[15]~ 703 q _b[10] d a ta _ r d _ o u t[1 0 ]
d a ta A [5 ] dataA[5] M ux0~ 131 M ux0~ 131 q _b[11] d a ta _ r d _ o u t[1 1 ]
d a ta A [6 ] dataA[6] M ux1~ 132 M ux1~ 132 q _b[12] d a ta _ r d _ o u t[1 2 ]
d a ta A [7 ] dataA[7] M ux2~ 132 M ux2~ 132 q _b[13] d a ta _ r d _ o u t[1 3 ]
d a ta A [8 ] dataA[8] M ux3~ 132 M ux3~ 132 q _b[14] d a ta _ r d _ o u t[1 4 ]
d a ta A [9 ] dataA[9] M ux4~ 132 M ux4~ 132 q _b[15] d a ta _ r d _ o u t[1 5 ]
d a ta A[1 0 ] dataA[10] M ux5~ 132 M ux5~ 132
d a ta A[1 1 ] dataA[11] M ux6~ 132 M ux6~ 132
d a ta A[1 2 ] dataA[12] M ux7~ 132 M ux7~ 132
d a ta A[1 3 ] dataA[13] M ux8~ 132 M ux8~ 132
d a ta A[1 4 ] dataA[14] M ux9~ 132 M ux9~ 132
d a ta A[1 5 ] dataA[15] M ux10~ 139 rw
d a ta B [0 ] dataB[0] M ux11~ 139
d a ta B [1 ] dataB[1] M ux12~ 139
d a ta B [2 ] dataB[2] M ux13~ 139 d a ta _ w r _ o u t[1 5 ]
d a ta B [3 ] dataB[3] M ux14~ 139
D AT AIN
d a ta B [4 ] dataB[4] M ux15~ 139 PAD O U T d a ta _ w r _ o u t[1 5 ]
! OE
d a ta B [5 ] dataB[5] M ux16~ 139
d a ta B [6 ] dataB[6] M ux17~ 139 O U T PU T
d a ta B [7 ] dataB[7] M ux18~ 139
d a ta _ w r _ o u t[1 4 ]
d a ta B [8 ] dataB[8] M ux19~ 139
d a ta B [9 ] dataB[9] M ux20~ 139 D AT AIN
PAD O U T d a ta _ w r _ o u t[1 4 ]
d a ta B [1 0 ] dataB[10] M ux21~ 139 ! OE
d a ta B [1 1 ] dataB[11] M ux22~ 139
O U T PU T
d a ta B [1 2 ] dataB[12] M ux23~ 139
d a ta B [1 3 ] dataB[13] M ux24~ 139 d a ta _ w r _ o u t[1 3 ]
d a ta B [1 4 ] dataB[14] M ux25~ 139
D AT AIN
d a ta B [1 5 ] dataB[15] M ux26~ 180 PAD O U T d a ta _ w r _ o u t[1 3 ]
! OE
d a ta C [0 ] dataC [0]
d a ta C [1 ] dataC [1] O U T PU T
d a ta C [2 ] dataC [2]
d a ta _ w r _ o u t[1 2 ]
d a ta C [3 ] dataC [3]
d a ta C [4 ] dataC [4] D AT AIN
PAD O U T d a ta _ w r _ o u t[1 2 ]
d a ta C [5 ] dataC [5] ! OE
d a ta C [6 ] dataC [6]
O U T PU T
d a ta C [7 ] dataC [7]
d a ta C [8 ] dataC [8] d a ta _ w r _ o u t[1 1 ]
d a ta C [9 ] dataC [9]
D AT AIN
d a ta C [1 0 ] dataC [10] PAD O U T d a ta _ w r _ o u t[1 1 ]
! OE
s ta r t dataC [11]
c u r r _ s ta te .s 2
rw B dataC [12] O U T PU T
! AC LR
rw C dataC [13]
co m b~3 1 3 C LK d a ta _ w r _ o u t[1 0 ]
c u r r _ s ta te .s 3 C OM BO U T p e n a b le A dataC [14]
D AT AA D AT AB
re s e t ! AC LR R EG O U T D AT AA dataC [15] D AT AIN
D AT AC C O M BO U T D AT AD PAD O U T d a ta _ w r _ o u t[1 0 ]
c lk C LK c u r r _ s ta te .s 4 D AT AB C O M BO U T penableA ! OE
R EG O U T D AT AD SYN C H _D AT A co m b ~3 1 9
re q A D AT AA ! AC LR D AT AD penableB
LC ELL (AAF 0) LC ELL ( C F C 0) co m b ~3 2 0 D AT AA O U T PU T
re q B D AT AC C LK LC ELL ( 3322) penableC
D AT AA D AT AB
LC ELL ( 5050) D AT AA C O M BO U T d a ta _ w r _ o u t[9 ]
D AT AB R EG O U T D AT AC
C O M BO U T D AT AB
c u r r _ s ta te .s 1 D AT AC D AT AD D AT AIN
rw A D AT AC PAD O U T d a ta _ w r _ o u t[9 ]
! AC LR D AT AD LC ELL ( 32F F ) ! OE
D AT AD
C LK LC ELL (0100)
LC ELL ( 0100) co m b ~3 1 6 O U T PU T
D AT AA
R EG O U T D AT AA
D AT AB p e n a b le B d a ta _ w r _ o u t[8 ]
D AT AB
D AT AC C O M BO U T D AT AA
D AT AC D AT AIN
re q C D AT AD D AT AB C O M BO U T PAD O U T d a ta _ w r _ o u t[8 ]
D AT AD ! OE
LC ELL ( F F F E) D AT AD
LC ELL ( 5455)
LC ELL ( 5544) O U T PU T
co m b ~3 1 8
d a ta _ w r _ o u t[7 ]
D AT AA
co m b ~3 1 7 p e n a b le C
D AT AB D AT AIN
D AT AA C O M BO U T D AT AB PAD O U T d a ta _ w r _ o u t[7 ]
D AT AC ! OE
D AT AC C O M BO U T D AT AC C O M BO U T
D AT AD
D AT AD D AT AD O U T PU T
LC ELL ( 1044)
LC ELL ( F F A5) LC ELL ( 0F 0C )
d a ta _ w r _ o u t[6 ]
co m b ~3 1 5 D AT AIN
rw PAD O U T d a ta _ w r _ o u t[6 ]
D AT AA ! OE
D AT AA
D AT AB
C O M BO U T D AT AC C O M BO U T O U T PU T
D AT AC
D AT AD
D AT AD d a ta _ w r _ o u t[5 ]
LC ELL ( F A0A)
LC ELL ( F E00)
D AT AIN
PAD O U T d a ta _ w r _ o u t[5 ]
! OE
O U T PU T
d a ta _ w r _ o u t[4 ]
d a ta C [1 1 ]
d a ta C [1 2 ] D AT AIN
PAD O U T d a ta _ w r _ o u t[4 ]
d a ta C [1 3 ] ! OE
d a ta C [1 4 ]
O U T PU T
d a ta C [1 5 ]
d a ta _ w r _ o u t[3 ]
D AT AIN
PAD O U T d a ta _ w r _ o u t[3 ]
! OE
O U T PU T
d a ta _ w r _ o u t[2 ]
D AT AIN
PAD O U T d a ta _ w r _ o u t[2 ]
! OE
O U T PU T
d a ta _ w r _ o u t[1 ]
D AT AIN
PAD O U T d a ta _ w r _ o u t[1 ]
! OE
O U T PU T
d a ta _ w r _ o u t[0 ]
D AT AIN
PAD O U T d a ta _ w r _ o u t[0 ]
! OE
O U T PU T
p r e s e n t~ 1 4
p r e s e n t[2 ]
D AT AB
C O M BO U T D AT AIN
D AT AD PAD O U T p r e s e n t[2 ]
! OE
LC ELL ( 0033)
O U T PU T
p r e s e n t[1 ]
D AT AIN
PAD O U T p r e s e n t[1 ]
! OE
O U T PU T
p r e s e n t[0 ]
D AT AIN
PAD O U T p r e s e n t[0 ]
! OE
O U T PU T
Flow Summary:
8
Simulation results:
9
COMPONENTS of MMU
MEMORY:
Entity:
RTL:
10
Technology view:
Flow Summary:
11
Simulation:
MUTLIPLEXER:
ENTITY:
12
RTL:
Technology view:
13
Flow Summary:
Simulation:
14
VHDL CODE:
<MAIN.VHD>
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity main is
port( reqA,reqB,reqC:in std_logic;
clk,reset:in std_logic;
dataA,dataB,dataC:in std_logic_vector(15 downto 0);
addA,addB,addC:in std_logic_vector(9 downto 0);
data_rd_out:out std_logic_vector(15 downto 0);
--out from memory
present:out std_logic_vector(2 downto 0);
data_wr_out:out std_logic_vector(15 downto 0);
--out from mux
rwA,rwB,rwC:in std_logic;
start:in std_logic
);
end main;
15
addr_busA:in std_logic_vector(9 downto 0);
addr_busB:in std_logic_vector(9 downto 0);
addr_busC:in std_logic_vector(9 downto 0);
data_out_mux:out std_logic_vector(15 downto 0);
addr_out_mux:out std_logic_vector(9 downto 0));
end component multiplex;
begin
--combine bits to form sel line for mux
ll<=(penableA & penableB & penableC);
mult:multiplex port
map(ll,dataA,dataB,dataC,addA,addB,addC,data_out,add_out);
-- data_out and add_out from mux is feed to memory
-- data_rd_out is o/p from memory depending on rw
signal
mem:memory port
map(rw,data_out,data_rd_out,add_out,clk);
rr1:
process(clk,reset)
begin
if reset='1' then
curr_state <= s1;
elsif( clk='1' and clk'event) then
curr_state<=next_state;
end if;
end process rr1;
control_path:
process(curr_state,reqA,reqB,reqC)
variable temp : std_logic_vector(2 downto 0);
begin
temp := (reqA & reqB & reqC);
case curr_state is
when s0 =>
present<="ZZZ";
if( start='1')then
next_state<=s1;
else next_state<=s0;
end if;
when s1 =>
present<="ZZZ";
16
if(temp(2)='1')then --reqA
next_state<=s2;
elsif(temp(1)='1')then --reqB
next_state<=s3;
elsif(temp(0)='1')then --reqC
next_state<=s4;
else
next_state<=s1;
end if;
when s2 =>
present<="100";
if(( reqA='0')and temp(1)='1')then
next_state<=s3;
elsif(( reqA='0')and temp(0)='1')then
next_state<=s4;
elsif temp="000" then
next_state<=s1;
else
next_state<=s2;
end if;
when s3 =>
present<="010";
if(reqA='1') then
next_state <= s2;
elsif((reqB='0')and temp(0)='1')then
next_state<=s4;
elsif temp="000" then
next_state<=s1;
else
next_state<=s3;
end if;
when s4=>
present<="001";
if(reqA='1') then
next_state <= s2;
elsif (reqB ='1' and reqA = '0') then
next_state <= s3;
elsif temp="000" then
next_state<=s1;
else
next_state<=s4;
end if;
end case;
end process control_path;
data_path:process(curr_state,rwA,rwB,rwC,data_out)
begin
if(curr_state=s1)then
penableA<='0';
penableB<='0';
penableC<='0';
elsif(curr_state=s2)then
17
penableA<='1';
penableB<='0';
penableC<='0';
rw<=rwA;
elsif(curr_state=s3)then
penableA<='0';
penableB<='1';
penableC<='0';
rw<=rwB;
elsif(curr_state=s4)then
penableA<='0';
penableB<='0';
penableC<='1';
rw<=rwC;
end if;
data_wr_out<=data_out;
end process data_path;
end Behavioral;
<MEMORY.VHD>
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity memory is
port(r_w:in std_logic ;
data_in:in std_logic_vector(15 downto 0);
data_out:out std_logic_vector(15 downto 0);
addr_bus:in std_logic_vector(9 downto 0);
clk:in std_logic);
end memory;
18
end if;
end if;
end process p1;
end Behavioral;
<MULTIPLEX.VHD>
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multiplex is
port(s:in std_logic_vector(2 downto 0);
data_busA:in std_logic_vector(15 downto 0);
data_busB:in std_logic_vector(15 downto 0);
data_busC:in std_logic_vector(15 downto 0);
addr_busA:in std_logic_vector(9 downto 0);
addr_busB:in std_logic_vector(9 downto 0);
addr_busC:in std_logic_vector(9 downto 0);
data_out_mux:out std_logic_vector(15 downto 0);
addr_out_mux:out std_logic_vector(9 downto 0));
end multiplex;
19
CONCLUSIONS
I. Memory can be simultaneously serviced to multi processes.
References
1. A VHDL Primer, 3rd edition : J. Bhasker
20