Вы находитесь на странице: 1из 38

Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniera y Agrimensura Escuela de Ingeniera Electrnica Digital III

Problema de Ingeniera No 1 Sistema Mnimo con 80C86 y VHDL


BAILN Eduardo B-3660/9 CAMPOS Santiago C-4263/3 SANCHEZ Gonzalo S-3060/1 TORRES Marcio T-1315/3

Rosario - Abril 2012

ndice general
Introduction 1

Codigo

2
3 7 9 11 14 15 17

1. Arquitectura Principal 2. Clock del micro 3. Latch Principal 4. Chip Select 5. Proteccin de Escritura 6. Registro de Paginacin 7. Paginador

II Testeo
1. Introduccin 2. Simulaciones de cada bloque por separado 3. Test Bench General

19
20 21 25

III

Hardware Sintetizado y Esquemtico General

31
34

Conclusion

ndice de guras
1.1. 2.1. 3.1. 4.1. 5.1. 6.1. 7.1. 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. Esquema General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloque Reloj Bloque Latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 7 9 11 14 15 17 21 21 22 22 22 23 23 23 24 24 24 24 27 29 30 32 33

Bloque Chip Select

Bloque Proteccion de Escritura

Bloque Registro de Paginacin . . . . . . . . . . . . . . . . . . . . . . . . Bloque Selector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Test Bench del reloj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulacin del reloj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test Bench del Latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulacin del Latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test Bench de la Chip Select . . . . . . . . . . . . . . . . . . . . . . . . . Simulacin de la Chip Select . . . . . . . . . . . . . . . . . . . . . . . . . Test Bench de Proteccin de Escritura Simulacin de Proteccin de Escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Test Bench de Registro de Paginacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.10. Simulacin de Registro de Paginacin . . . . . . . . . . . . . . . . . . . . 2.11. Test Bench del Paginador 2.12. Simulacin del Paginador . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. 3.2. 3.3. 4. 5. Primera Simulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Segunda Simulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tercera Simulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hardware Sintetizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Esquemtico General . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Introduccin
Para encontrar una solucin a un problema real es necesario atravesar varias etapas. Para comenzar debemos traducir el problema coloquial a un lenguage ingenieril. Luego debemos delimitar el problema para entender a ciencia cierta que parte debemos resolver. A continuacin debemos proponer una solucin alternativa al problema en cuestin. Luego esta solucin debe ser testeada para saber si cumple con los requerimientos y expectativas del cliente. Para terminar debemos renar el producto y escojer la solucin que deje ms conforme a nuestro cliente. Este informe intenta dar respuesta al problema de comunicar al microprocesador 80C86 y diversos perifricos tales como memorias RAM y Flash. El presente Problema de Ingeniera aborda las primeras etapas del diseo de hardware de un sistema de microcmputo. Las conexiones entre los componentes principales del sistema: microprocesador, memoria, unidades de entrada salida y los circuitos auxiliares necesarios para que el sistema sea funcional. El problema se plantea en base a un microprocesador 80C86-2 de Intel abordando los aspectos lgicos del sistema implementado. Todo fue programado en el lenguage VHDL utilizando los conocimientos adquiridos en la presente materia como as tambin nos valimos de conocimientos adquiridos en materias anteriores como Digital II. Entendemos que el lenguage VHDL brinda hoy en da una herramienta muy til, capaz de trabajar a muy alta frecuencia y proveyendo un cdigo modular y muy conable.

Parte I Codigo

Captulo 1 Arquitectura Principal

Figura 1.1: Esquema General

A continuacin aparece el cdigo de la arquitectura principal del programa. Comunmente llamada top.

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity port (
top

is
: :

CLOCK R

in in

std_logic ; std_logic ;
3

end architecture B e h a v i o r a l of top is signal CLK : s t d _ l o g i c := ' 0 ' ; signal LBHE : s t d _ l o g i c := ' 0 ' ; signal LAD : s t d _ l o g i c _ v e c t o r ( 1 9 downto 0 ) :=( others => ' 0 ' ) ; signal LAD_P : s t d _ l o g i c _ v e c t o r ( 1 9 downto 1 6 ) :=( others => ' 0 ' ) ; signal DIR_P : s t d _ l o g i c _ v e c t o r ( 1 7 downto 1 5 ) :=( others => ' 0 ' ) ; signal BIT0 , BIT1 , BIT4 : s t d _ l o g i c := ' 0 ' ; signal CS_RP : s t d _ l o g i c := ' 0 ' ; component r e l o j is Port ( CLOCK, R : in s t d _ l o g i c ; SALIDA : out s t d _ l o g i c ) ; end component ; component l a t c h is Port ( CLOCK, ALE, R, BHE : in s t d _ l o g i c ; AD : in s t d _ l o g i c _ v e c t o r ( 1 9 downto 0 ) ; LBHE : out s t d _ l o g i c ; LAD : out s t d _ l o g i c _ v e c t o r ( 1 9 downto 0 ) ) ; end component ; component C h i p _ s e l e c t is Port ( LAD : in STD_LOGIC_VECTOR ( 1 9 downto 0 ) ; MIO : in std_logic ; CS_R12 : out s t d _ l o g i c ; CS_R34 : out s t d _ l o g i c ; CS_F12 : out s t d _ l o g i c ; CS_IO1 : out s t d _ l o g i c ; CS_IO2 : out s t d _ l o g i c ; CS_IO3 : out s t d _ l o g i c ; CS_RP : out s t d _ l o g i c ) ; end component ; component p r o t e c c i o n is
4

ALE BHE WR MIO ADDA uDATA DIR uCLOCK WRP WRI CS_R12 CS_R34 CS_F12 CS_IO1 CS_IO2 CS_IO3 top ;

: : : : : : : : : : : : : : : :

in in in in in in out out out out out out out out out out

std_logic ; std_logic ; std_logic ; std_logic ; std_logic_vector (19 std_logic_vector (7 std_logic_vector (18 std_logic ; std_logic ; std_logic ; std_logic ; std_logic ; std_logic ; std_logic ; std_logic ; std_logic ) ;

downto 0 ) ; downto 0 ) ; downto 0 ) ;

: std_logic ; : std_logic ; : std_logic ; : std_logic ; : std_logic ) ; ; Paginacion ( CLOCK, CS_RP : std_logic ; DATA : std_logic_vector (7 BIT0 , BIT1 , BIT4 : std_logic ) ; ; selector ( R, BIT0 , BIT1 , BIT4 : std_logic ; LAD_P : std_logic_vector (19 DIR_P : std_logic_vector (17 ;

Port

end component component port end component component port end component begin port map

LAD0 BHE WR WRP WRI

in in in out out

is

in in

out

downto

0) ;

is

in out

in

downto 1 6 ) ; downto 1 5 ) ) ;

clock_micro : r e l o j ( CLOCK => CLOCK, R => R, SALIDA => CLK) ; latch_principal : latch ( CLOCK => CLOCK, ALE => ALE, BHE => BHE, R => R, AD => ADDA, LBHE => LBHE, LAD => LAD) ; CS : Chip_Select ( MIO => MIO, LAD => LAD, CS_R12 => CS_R12 , CS_R34 => CS_R34 , CS_F12 => CS_F12 , CS_IO1 => CS_IO1 , CS_IO2 => CS_IO2 , CS_IO3 => CS_IO3 , CS_RP => CS_RP) ; Escritura : proteccion ( LAD0 => LAD( 0 ) , BHE => LBHE,

port map

port map

port map

WR => WR, WRP => WRP, WRI => WRI) ; Registro : Paginacion ( CLOCK => CLOCK, CS_RP => CS_RP, DATA => uDATA, BIT0 => BIT0 , BIT1 => BIT1 , BIT4 => BIT4 ) ; Paginador : s e l e c t o r ( R => R, LAD_P => LAD_P, DIR_P => DIR_P, BIT0 => BIT0 , BIT1 => BIT1 , BIT4 => BIT4 ) ;

port map

port map

uCLOCK <= CLK; LAD_P <= LAD( 1 9 16) ; DIR <= LAD( 1 9 )& DIR_P( 1 7

downto

downto

1 5 ) & LAD( 1 5

downto

1) ;

end

Behavioral ;

Captulo 2 Clock del micro

Figura 2.1: Bloque Reloj

Para generar la seal de clock del micro realizamos el siguiente cdigo en VHDL:

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity r e l o j is port ( clock , R : in s t d _ l o g i c ; salida : out s t d _ l o g i c ) ; end r e l o j ; architecture B e h a v i o r a l of r e l o j is type s e c u e n c i a is ( cuenta_1 , cuenta_2 ) ; signal e s t a d o : s e c u e n c i a := cuenta_1 ; signal c o n t : s t d _ l o g i c _ v e c t o r ( 1 downto 0 ) := " 00 " ; begin process ( c l o c k , R) begin i f R= '1 ' then s a l i d a <= '0 '; e s t a d o<= cuenta_1 ;
7

elsif

( clock ' event c l o c k = '1 ') estado cuenta_1 => c o n t=" 01 " s a l i d a <= ' 1 ' ; e s t a d o<= cuenta_2 ; cont<= c o n t +1;

case when if

and is then

then

when

e s t a d o<= cuenta_1 ; cont<= c o n t +1; ; cuenta_2 => c o n t=" 10 " s a l i d a <= ' 0 ' ; cont <=( = > '0 ') ; e s t a d o<= cuenta_1 ;

else

end i f

if

then others

end case ; end i f ; end process ; end B e h a v i o r a l ;

end i f

e s t a d o<= cuenta_2 ; cont<= c o n t +1; ;

else

Captulo 3 Latch Principal

Figura 3.1: Bloque Latch

Para implementar el Latch principal realizamos el siguiente cdigo en lenguage VHDL:

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity l a t c h is Port ( CLOCK, ALE, R, BHE : in s t d _ l o g i c ; AD : in s t d _ l o g i c _ v e c t o r ( 1 9 downto LBHE : out std_logic ; LAD : out s t d _ l o g i c _ v e c t o r ( 1 9 downto end l a t c h ; architecture B e h a v i o r a l of l a t c h is begin
9

0) ; 0) ) ;

LATCHEO ADDRESS BUS Y BHE (CLOCK, R, ALE)

process begin

if

else

(R = ' 1 ' ) LAD ( 1 9 LBHE <= ' 0 ' ;

then downto if

0 ) <= (

others then

=> ' 0 ' ) ;

if

end i f ; end process ; end

end i f

(CLOCK = ' 1 ' CLOCK' e v e n t ) (ALE = ' 1 ' ) LAD <= AD ; LBHE <= BHE; ; ;

and

then

end i f

Behavioral ;

10

Captulo 4 Chip Select

Figura 4.1: Bloque Chip Select

El Chip Select es el encargado de seleccionar con que dispositivo el micro se va a comunicar dentro de los diversos perifricos posibles. Para implementar esto realizamos el siguiente cdigo:

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity C h i p _ s e l e c t is Port ( LAD : in std_logic_vector MIO : in STD_LOGIC; CS_R12 : out STD_LOGIC; CS_R34 : out STD_LOGIC;
11

(19

downto

0) ;

end architecture B e h a v i o r a l of C h i p _ s e l e c t is begin process (LAD, MIO) begin i f ( (LAD <= x" 3FFFF" ) and MIO = ' 1 ' ) then CS_R12 <= ' 0 ' ; else CS_R12 <= ' 1 ' ; end i f ; i f ( (LAD >= x" 40000 " ) and (LAD <= x" 5 f f f f " ) and MIO = '1 ') then CS_R34 <= ' 0 ' ; else CS_R34 <= ' 1 ' ; end i f ; i f ( (LAD >= x" 60000 " ) and (LAD <= x"FFFFF" ) and MIO = '1 ') then CS_F12 <= ' 0 ' ; else CS_F12 <= ' 1 ' ; end i f ; i f ( (LAD( 1 5 downto 0 ) <= x" 3 f f f " ) and MIO = ' 0 ' ) then CS_RP <= ' 0 ' ; else CS_RP <= ' 1 ' ; end i f ; i f ( (LAD( 1 5 downto 0 ) >= x" 4000 " ) and (LAD( 1 5 downto 0 ) <= x" 7 f f f " ) and = ' 0 ' ) then CS_IO1 <= ' 0 ' ; else CS_IO1 <= ' 1 ' ; end i f ; i f ( (LAD( 1 5 downto 0 ) <= x" b f f f " ) and (LAD( 1 5 downto 0 ) >= x" 8000 " ) and = ' 0 ' ) then CS_IO2 <= ' 0 ' ; else CS_IO2 <= ' 1 ' ; end i f ; i f ( (LAD( 1 5 downto 0 ) <= x" f f f f " ) and (LAD( 1 5 downto 0 ) >= x"C000" ) and = ' 0 ' ) then
CS_IO3 <= ' 0 ' ;
12

CS_F12 CS_IO1 CS_IO2 CS_IO3 CS_RP Chip_select ;

: : : : :

out out out out out

STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC) ;

MIO

MIO

MIO

else CS_IO3 <= end i f ; end process ; end B e h a v i o r a l ;

'1 ';

13

Captulo 5 Proteccin de Escritura

Figura 5.1: Bloque Proteccion de Escritura

Cdigo del circuito de proteccin contra escritura para proteger los bancos pares e impares.

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity p r o t e c c i o n is Port ( LAD0 : in STD_LOGIC; BHE : in STD_LOGIC; WR : in STD_LOGIC; WRP : out STD_LOGIC; WRI : out STD_LOGIC) ; end p r o t e c c i o n ; architecture B e h a v i o r a l of p r o t e c c i o n is begin WRP <= not ( ( not WR) and ( not LAD0) ) ; WRI <= not ( ( not WR) and ( not BHE) ) ; end B e h a v i o r a l ;
14

Captulo 6 Registro de Paginacin

Figura 6.1: Bloque Registro de Paginacin

El bloque anterior representa el Registro de Paginacin, en el cual el micro va a cargar estrategicamente un valor de 8 bits del registro, para acceder completamente a las memorias paginadas. A continuacin aparece el cdigo realizado para lograr este propsito:

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity P a g i n a c i o n is port ( CLOCK, CS_RP : in std_logic ; DATA : in s t d _ l o g i c _ v e c t o r ( 7 downto BIT0 , BIT1 , BIT4 : out std_logic ) ; end P a g i n a c i o n ; architecture B e h a v i o r a l of P a g i n a c i o n is begin process (CLOCK)
15

0) ;

begin i f (CLOCK' e v e n t and CLOCK = end i f ; end process ; end B e h a v i o r a l ;


BIT0 <= DATA( 0 ) ; BIT1 <= DATA( 1 ) ; BIT4 <= DATA( 4 ) ;

'1 '

and

CS_RP = ' 0 ' )

then

Nota al programador: Sr. Programador el registro de paginacion se encuentra mapeado en el espacio de Entrada/Salida entre las direcciones 0x0000 y 0x3FFF, el registro es de un byte y se encuentra espejado, solo escriba direcciones pares.

16

Captulo 7 Paginador

Figura 7.1: Bloque Selector Este bloque es el responsable de acondicionar el bus de direcciones necesario para acceder completamente a los registros de la memoria que corresponda. En el problema de ingeniera se encuentran paginadas parte de las memorias Flash y parte de las memorias RAM. Para solucionar el acceso a los primeros 256 Kb paginados de la Flash 1 y la Flash 2 en una ventana de 128 Kb, leemos el bit LAD(19) y segn su estado multiplexamos los bits LAD(18) y LAD(17) por los bits BIT0 y BIT1 del registro de paginacin (se utilizan dos bits porque la ventana es de 4 paginas). Para solucionar el acceso completo a los registros de las memorias RAM 3 Y 4, reemplazamos el bit LAD(17) por el BIT4 del registro de paginacin, de esta forma las memorias se pueden acceder completamente. Para este circuito realizamos el siguiente codigo:

library IEEE ; use IEEE . STD_LOGIC_1164 .ALL; use IEEE .STD_LOGIC_ARITH.ALL; use IEEE .STD_LOGIC_UNSIGNED.ALL; entity s e l e c t o r is port ( R, BIT0 , BIT1 , BIT4 : in

std_logic ;
17

end architecture B e h a v i o r a l of s e l e c t o r is begin process (LAD_P, BIT0 , BIT1 , BIT4 ) begin i f (R = ' 1 ' ) then DIR_P <= ( others => ' 0 ' ) ; RAM 1 y 2 elsif ( (LAD_P <= x" 3 " ) ) then DIR_P( 1 7 downto 1 5 ) <= LAD_P( 1 8 downto 1 6 ) ; RAM 3 y 4 elsif ( (LAD_P >= x" 4 " ) and (LAD_P <= x" 5 " ) ) then
DIR_P( 1 7 ) <= LAD_P( 1 8 ) ; DIR_P( 1 6 ) <= BIT4 ; DIR_P( 1 5 ) <= LAD_P( 1 6 ) ; FLASH 1 y 2 ( (LAD_P >= x" 6 " ) (LAD_P <= x"F" ) ) (LAD_P( 1 9 )= ' 0 ' ) DIR_P( 1 7 1 6 ) <= BIT1&BIT0 ; DIR_P( 1 5 )<= LAD_P( 1 6 ) ;

LAD_P : std_logic_vector (19 16 DEL BUS LATCHEADO DIR_P : std_logic_vector (17 selector ;

in out

downto 1 6 ) ; SOLO LOS downto 1 5 ) ) ;

BITS 19 18 17

elsif if

and then downto else

then

DIR_P( 1 7

end process ; end B e h a v i o r a l ;

end i f ;

end i f ;

downto downto 1 6 ) ;

1 5 )<= LAD_P( 1 8

18

Parte II Testeo

19

Captulo 1 Introduccin
Para poder vericar si el cgido realizado cumpla con los requerimientos deseados llevamos adelante diversas simulaciones. Entendemos que a lo largo de estas simulaciones se ejemplican algunos casos posibles como para determinar si el presente programa funciona correctamente o no. Cabe destacar que se han realizado simulaciones de todos los bloques trabajando en conjunto como as tambin de cada bloque por separado.

20

Captulo 2 Simulaciones de cada bloque por separado


Test Bench del bloque reloj:

Figura 2.1: Test Bench del reloj

La simulacin del reloj, mediante ISim, se puede apreciar en la siguiente gura 2.2. La primer linea correspondiente a la seal del clock de la fpga, su frecuenecia es de 25 Mhz y el nombre de la seal es CLOCK. Luego simulamos una seal de reset, para que el sistema inicie con sus valores iniciales. Por ltimo se encuentra la seal llamada Salida, que es la seal de clock generada para alimentar al microprocesador 80c86-2. Mientras que la seal de clock presenta un ciclo de trabajo de 1/2, es decir duracion del estado alto igual a la duracion del estado bajo, la seal salida presenta un ciclo de trabajo de 1/3. Cuando se presenta la seal de reset la salida presenta un estado bajo para cualquier estado del clock y al bajar el reset el ciclo comienza en estado bajo subiendo un ciclo de clock despues.

Figura 2.2: Simulacin del reloj

21

Figura 2.3: Test Bench del Latch

En la siguiente gura 2.4 puede verse como se acerrojan los buses de direccin y la seal BHE. El BUS LAD(19:0) arroja la direccin presentada por el BUS AD(19:0) del microprocesador con la llegada de ALE. La seal BHE tambin se acerroja con la llegada de ALE.

Figura 2.4: Simulacin del Latch

Figura 2.5: Test Bench de la Chip Select

22

Figura 2.6: Simulacin de la Chip Select

Figura 2.7: Test Bench de Proteccin de Escritura

Figura 2.8: Simulacin de Proteccin de Escritura

23

Figura 2.9: Test Bench de Registro de Paginacin

Figura 2.10: Simulacin de Registro de Paginacin

Figura 2.11: Test Bench del Paginador

Figura 2.12: Simulacin del Paginador

24

Captulo 3 Test Bench General


Para poder implementar el control del programa en cuestin diseamos un Test Bench en vhdl en el mismo ISE Xilinx Webpack utilizando el ISIM. Mdiante el mismo fuimos generando las situaciones a las cul se debera enfrentar nuestro programa en la realidad. Como se ha mencionado anteriormente realizamos diversas simulaciones, en lo que concierne al programa como un todo realizamos tres simulaciones. Para esto utilizamos el siguiente cdigo, slo cambiando en cada simulacin la ltima parte.

LIBRARY i e e e ; USE i e e e . s t d _ l o g i c _ 1 1 6 4 .ALL; ENTITY t e s t IS END t e s t ; ARCHITECTURE b e h a v i o r OF t e s t IS COMPONENT top PORT( CLOCK : IN s t d _ l o g i c ; R : IN s t d _ l o g i c ; ALE : IN s t d _ l o g i c ; BHE : IN s t d _ l o g i c ; WR : IN s t d _ l o g i c ; MIO : IN s t d _ l o g i c ; ADDA : IN s t d _ l o g i c _ v e c t o r ( 1 9 downto uDATA : IN s t d _ l o g i c _ v e c t o r ( 7 downto DIR : OUT s t d _ l o g i c _ v e c t o r ( 1 8 downto uCLOCK : OUT s t d _ l o g i c ; WRP : OUT s t d _ l o g i c ; WRI : OUT s t d _ l o g i c ; CS_R12 : OUT s t d _ l o g i c ; CS_R34 : OUT s t d _ l o g i c ; CS_F12 : OUT s t d _ l o g i c ; CS_IO1 : OUT s t d _ l o g i c ; CS_IO2 : OUT s t d _ l o g i c ; CS_IO3 : OUT s t d _ l o g i c ); END COMPONENT;
25

0) ; 0) ; 0) ;

Entradas CLOCK : s t d _ l o g i c := ' 0 ' ; R : s t d _ l o g i c := ' 0 ' ; ALE : s t d _ l o g i c := ' 0 ' ; BHE : s t d _ l o g i c := ' 1 ' ; WR : s t d _ l o g i c := ' 1 ' ; MIO : s t d _ l o g i c := ' 1 ' ; ADDA : s t d _ l o g i c _ v e c t o r ( 1 9 uDATA : s t d _ l o g i c _ v e c t o r ( 7

signal signal signal signal signal signal signal signal signal signal signal signal signal signal signal signal signal signal

downto downto downto

0 ) := ( 0 ) := ( 0) ;

others others

=> ' 0 ' ) ; => ' 0 ' ) ;

S a l i d a s

DIR : s t d _ l o g i c _ v e c t o r ( 1 8 uCLOCK : s t d _ l o g i c ; WRP : s t d _ l o g i c ; WRI : s t d _ l o g i c ; CS_R12 : s t d _ l o g i c ; CS_R34 : s t d _ l o g i c ; CS_F12 : s t d _ l o g i c ; CS_IO1 : s t d _ l o g i c ; CS_IO2 : s t d _ l o g i c ; CS_IO3 : s t d _ l o g i c ;

BEGIN
uut : top ( CLOCK => CLOCK, R => R, ALE => ALE, BHE => BHE, WR => WR, MIO => MIO, ADDA => ADDA, uDATA => uDATA, DIR => DIR , uCLOCK => uCLOCK, WRP => WRP, WRI => WRI, CS_R12 => CS_R12 , CS_R34 => CS_R34 , CS_F12 => CS_F12 , CS_IO1 => CS_IO1 , CS_IO2 => CS_IO2 , CS_IO3 => CS_IO3) ; c l o c k <= clock 40 ns ; R <= ' 1 ' 10 ns , ' 0 ' 70 ns ; ALE <= ' 1 ' 90 ns , ' 0 ' 155 ns , ' 1 ' 400 ns , ' 0 ' ns , ' 1 ' 720 ns , ' 0 ' 800 ns ; ADDA <= x" 00003 " 180 ns , x" 00000 " 350 ns , x" 60002 " , x" 00002 " 500 ns , x" 80002 " 720 ns , x" 00002 " MIO <= ' 0 ' 90 ns , ' 1 ' 400 ns ; WR <= ' 0 ' 480 ns , ' 1 ' 640 ns , ' 0 ' 800 ns , ' 1 '

PORT MAP

not after after after after after after after after after after after after after

after after

after after

after 480 after 400 ns after 820 ns ; after 1000

26

ns ; BHE <= ' 0 ' ns ; uDATA <= x" 03 "

after 400 after

ns ,

'1 '

after

480 ns ,

'0 '

after

720 ns ,

'0 '

after

800

80 ns , x" 01 "

after

720 ns ;

END;

Este cdigo arroj la siguiente simulacin:

0 ns

200 ns

400 ns

600 ns

800 ns

Figura 3.1: Primera Simulacin

En la simulacin anterior, se ejemplico el acceso a la pgina 4 de la Flash. En la imagen, gura 3.1 se puede apreciar que luego de bajar Reset (R) aparece por el bus ADDA (bus de direcciones del micro) la direccin 0x0000 y la seal MIO en bajo haciendo

27

referencia al registro de paginacin, para sacar por el puerto 0x0000 el byte 0x03, este byte hace referencia a la pagina 4 de la Flash. En el prximo bus cycle, se enva por el bus ADDA la direccin a grabar (0x60002) en memoria, se puede observar como se acondiciona el bus de direcciones DIR(18:0) para que se acceda al registro correcto. Se puede observar, como se dan las restantes seales como WrP, WrI, las chip select de los dispositivos en cuestin, los bits de paginacin BIT0, BIT1 y BIT4.

A continuacin realizamos unos cambios en el cdigo para ver si funcionaba correctamente frente a otros estmulos. La Segunda simulacin general, gura 3.2, pretende acceder a la pagina 1 de la Flash. Procediendo de manera similar a la anterior, solo que en este caso el programador carga en el registro de paginacin el byte 0x00. Y obtuvimos la siguiente simulacin:

c l o c k <= clock 40 ns ; R <= ' 1 ' 10 ns , ' 0 ' 70 ns ; ALE <= ' 1 ' 90 ns , ' 0 ' 155 ns , ' 1 ' 400 ns , ' 0 ' ns , ' 1 ' 720 ns , ' 0 ' 800 ns ; ADDA <= x" 00003 " 180 ns , x" 00000 " 350 ns , x" 60002 " , x" 00002 " 500 ns , x" 80002 " 720 ns , x" 00002 " MIO <= ' 0 ' 90 ns , ' 1 ' 400 ns ; WR <= ' 0 ' 480 ns , ' 1 ' 640 ns , ' 0 ' 800 ns , ' 1 ' ns ; BHE <= ' 0 ' 400 ns , ' 1 ' 480 ns , ' 0 ' 720 ns , ' 0 ' ns ; uDATA <= x" 00 " 80 ns , x" 01 " 720 ns ;

not after after after after after after after after after after after after after after after after after after after after after after

after 480 after 400 ns after 820 ns ; after 1000 after 800

Por ltimo realizamos nuevos cambios y volvimos a simular:

c l o c k <= clock 40 ns ; R <= ' 1 ' 10 ns , ' 0 ' 70 ns ; ALE <= ' 1 ' 90 ns , ' 0 ' 155 ns , ' 1 ' 400 ns , ' 0 ' ns , ' 1 ' 720 ns , ' 0 ' 800 ns ; ADDA <= x" 00003 " 180 ns , x" 00000 " 350 ns , x" 40002 " , x" 00002 " 500 ns , x" 00002 " 720 ns , x" 00002 " MIO <= ' 0 ' 90 ns , ' 1 ' 400 ns ; WR <= ' 0 ' 480 ns , ' 1 ' 640 ns , ' 0 ' 800 ns , ' 1 ' ns ; BHE <= ' 0 ' 400 ns , ' 1 ' 480 ns , ' 0 ' 720 ns , ' 0 ' ns ; uDATA <= x" 10 " 80 ns , x" 10 " 720 ns ;
28

not after after after after after after after after after after after after after after after after after after after after after after

after 480 after 400 ns after 820 ns ; after 1000 after 800

0 ns

200 ns

400 ns

600 ns

800 ns

Figura 3.2: Segunda Simulacin

Y obtuvimos la siguiente simulacin:

29

0 ns

200 ns

400 ns

600 ns

800 ns

Figura 3.3: Tercera Simulacin

30

Parte III Hardware Sintetizado y Esquemtico General

31

32

Figura 4: Hardware Sintetizado

Figura 5: Esquemtico General

33

Conclusion
En el presente trabajo se pudieron alcanzar los requerimientos propuestos por el problema de ingeniera. El problema se solucion en forma modular con distintos bloques VHDL, donde cada funcin solicitada por el problema fue cubierta en forma individual mediante diferentes bloques: Bloque generador del clock, latch principal de las direcciones y estados del bus de direcciones, chip select de dispositivos de memoria e IO, un bloque de escritura y proteccin, un bloque de registro y paginacin y por ultimo un bloque generador de las direcciones de memoria para las distintas memorias. Finalmente todos los resultados obtenidos fueron concordantes en tiempo con los obtenidos de la hoja de datos del microprocesador 80C86, tanto en el ciclo de lectura como de escritura. Adems se pudo vericar el correcto direccionamiento de los cuatro dispositivos de memorias, el cual jug un papel importante en la realizacin del problema.

34

Bibliografa
[1] Los microprocesadores Intel, Barry Brey, Tercera Edicin. [2] Hojas de datos del: 80C86-2, AM29F040, K6T1008.

Este documento fue realizado en el mes de Abril del 2012.

35

Вам также может понравиться