Digital III El Microprocesador i80c86
Pinout del Microprocesador i80c86 ADDRESS / DATA Bus Oscilador a Cristal Decodificador de Instrucciones & Unidad de Control Bus de direcciones / Datos (Multiplexado) (AD0 AD15) ADDRESS / STATUS Bus Circuito de Reset Unidad Aritmetico Lógica Bus de direcciones / Status (Multiplexado) (A16/S3 - A19/S6) Registros AX BX CX DX CS DS ES BP SI DI PSW IP Microprocesador CONTROL Bus Bus de control /RD, /WR, /ALE, etc Ing. Gustavo Minnucci - Digital III
Arquitectura Interna i80c86 Ing. Gustavo Minnucci - Digital III
Generación de direcciones Físicas (con segmentación) Registro de SEGMENTO Registro de OFFSET Las direcciones constituyen el mecanismo que permite al microprocesador comunicarse con el resto de los dispositivos (memorias, periféricos, etc) 16 bits 4 bits SEGMENT Register 0000 DIRECCION FISICA Address Bus (A0 - A19) 16 bits OFFSET register Physical Address 20 bits Microprocesador Ej: jmp 0001h ( CS: 8000h ) ( OFFSET : 0001h ) CS ( 8000 h ) 0 h OFFSET ( 0001h ) Dirección física ( 80001 h) Ing. Gustavo Minnucci - Digital III
Generación de direcciones Registros Internos Registros de Segmento Ing. Gustavo Minnucci - Digital III
Digital III Ejecucion de Instrucciones
Ejecución de una instrucción (sin Pre-Fetch) Instrucción n Instrucción n+1 Fetch Execute Fetch Execute OP-Code Fetch Operand Fetch Execution OP-Code Fetch Operand Fetch Execution OP-CODE Fetch Lectura del OP-CODE desde memoria de programa ( Apuntado por CS : IP ) Decodificación del OP-CODE de la instrucción Incremento del IP. Determinación de búsqueda de operandos extras para la ejecución OPERAND Fetch (si existe) Lectura del (o los) operando(s) desde memoria de programa (CS : IP +...) Almacenamiento interno de los operandos. Execution Ejecución de la instrucción. Ing. Gustavo Minnucci - Digital III
Ejecución de instrucciones Instrucción n (con Pre-Fetch) Fetch de Instrucción (n) Execute Instrucción (n) Instrucción n+1 Fetch Instrucción (n+1) Execute OP-CODE Fetch ( Instrucción n ) Lectura del OP-CODE desde memoria de programa ( CS : IP ) Decodificación del OP-CODE de la instrucción Incremento del IP. Determinación de búsqueda de operandos extras para la ejecución Determina si en la ejecución hará uso de los buses. Execution ( Instrucción n ) Ejecución de la instrucción (n).... SI LA INSTRUCCIÓN (n) NO UTILIZA LOS BUSES. Pre-Fetch ( Instrucción n + 1 ) Busqueda de las instrucción siguiente. Armado de la cola interna de ejecución. Ing. Gustavo Minnucci - Digital III
Digital III Accesos de Lectura y Escritura
Acceso a memoria en lectura Registro de segmento Memoria Registro de Offset Lógica de decodificación Par / Impar /CS Dirección Física ALE Latch de Direcciones Address Bus Address Bus Registro de datos Data Bus Data Bus /RD BHE LA0 Generador RD WR Par - Impar /OE Microprocesador La memoria es quien provee el dato a transferir Ing. Gustavo Minnucci - Digital III
Intel 80c86 en lectura (Lectura de datos desde la memoria (o I/O) al up) Gustavo Minnucci - Digital III - Año 2011
Acceso a memoria en escritura Registro de segmento Memoria Registro de Offset Dirección Física ALE Address Bus Latch de Direcciones Lógica de decodificación Par / Impar /CS Address Bus Registro de datos /WR BHE LA0 Data Bus Generador RD WR Par - Impar Data Bus /WR Microprocesador El Microprocesador es quien provee el dato a transferir Ing. Gustavo Minnucci - Digital III
Intel 80c86 en escritura (Escritura de datos desde el up a la memoria (o I/O) ) Gustavo Minnucci - Digital III - Año 2011
Digital III Mapeo de Dispositivos
Mapeo de dispositivos FFFFF h Mapa de Memoria Área de memoria No Volatil Nota: 00000 h Área de memoria Volatil El mapeo de un dispositivo consiste en asignarle un rango de direcciones dentro del mapa de memoria (o Entrada/Salida) donde se pueda acceder a sus registros internos. El Mapa de Memoria es el vínculo entre el software y el hardware. Gustavo Minnucci - Digital III
Mapas de memoria y de I/O FFFFF h Mapa de Memoria Área de memoria No Volatil Observación: Los espacios de direcciones de MEMORIA y de ENTRADA/SALIDA son espacios DISTINTOS y son accesibles con instrucciones distintas. FFFF h Mapa de I/O Periférico n 00000 h Área de memoria Volatil 0000 h Periférico 2 Periférico 1 Accesible con instrucciones MOV, PUSH, etc. Accesible con instrucciones IN y OUT Gustavo Minnucci - Digital III
Mapeo de dispositivos con decod. completa Ej. Sistema con: 1 EPROM de 128K x 8. (17 líneas de direcciones) (8 líneas de datos) 2 RAMs de 128K x 8. (17 líneas de direcciones) (8 líneas de datos) Decodificación total de direcciones Líneas de direcciones del microprocesador Rango LA19 LA18 LA17 LA16 LA15 LA14 a LA2 LA1 LA0 EPROM 128 K FFFFFh a E0000h 1 1 1 A16 A15 A14 a A2 A1 A0 Area Libre 40000h a DFFFFh 0 1 x x x xxxxxxx x x RAM 1 128 K 20000h a 3FFFFh 0 0 1 A16 A15 A14 a A2 A1 A0 RAM 0 128 K 00000h a 1FFFFh 0 0 0 A16 A15 A14 a A2 A1 A0 Gustavo Minnucci - Digital III
Mapeo de dispositivos con espejado Ej. Sistema con: 1 EPROM de 128K x 8. ( 17 líneas de direcciones ) ( 8 líneas de datos ) 2 RAMs de 128K x 8. ( 17 líneas de direcciones ) ( 8 líneas de datos ) Decodificación parcial de direcciones Líneas de direcciones del microprocesador Rango A19 A18 A17 A16 A15 A14 a A2 A1 A0 EPROM 128 K Espejo EPROM Espejo EPROM Espejo EPROM Espejo RAM 1 Espejo RAM 0 RAM 1 128 K RAM 0 128 K FFFFFh a E0000h 20000h a 3FFFFh 00000h a 1FFFFh 1 X X A16 A15 A14 a A2 A1 A0 1 X X A16 A15 A14 a A2 A1 A0 1 X X A16 A15 A14 a A2 A1 A0 1 X X A16 A15 A14 a A2 A1 A0 0 X 1 A16 A15 A14 a A2 A1 A0 0 X 0 A16 A15 A14 a A2 A1 A0 0 X 1 A16 A15 A14 a A2 A1 A0 0 X 0 A16 A15 A14 a A2 A1 A0 Gustavo Minnucci - Digital III - Año 2011
Digital III Lógica de decodificación Implementación VHDL
Implementacion VHDL Microprocesador M/IO Logica de bus Lógica de decodificación RAM Par /CS /CS RAM Impar ALE ADD Bus A16 - A19 Latch de Direcciones LA01 - LA19 Address Bus Address Bus ADD/DATA Bus AD0-AD15 DATA BUS (16 bits) D0-D7 D8-D15 Data Bus Data Bus /RD /WR BHE Generador WR_Par WR_Impar RD_Par RD_Impar /OE /WR /OE /WR Gustavo Minnucci - Digital III
Implementacion entity Logica_de_Bus is Port ( clk : in STD_LOGIC; -- f [clk]: 25 MHz reset : in STD_LOGIC; AD : in STD_LOGIC_VECTOR (19 downto 0); ALE : in STD_LOGIC; BHE : in STD_LOGIC; MIO : in STD_LOGIC; RD : in STD_LOGIC; WR : in STD_LOGIC; INTA : in STD_LOGIC; INTR : out STD_LOGIC; NMI : out STD_LOGIC; CLK_uP : out STD_LOGIC; RESET_uP : out STD_LOGIC; -- STATUS : out STD_LOGIC_VECTOR (3 downto 0); LADD: out STD_LOGIC_VECTOR (19 downto 0); CS : out STD_LOGIC_VECTOR (3 downto 0); PCS : out STD_LOGIC_VECTOR (3 downto 0); WR_H : out STD_LOGIC; WR_L: out STD_LOGIC; RD_H : out STD_LOGIC; RD_L : out STD_LOGIC ); end Logica_de_Bus; Gustavo Minnucci - Digital III
Implementacion architecture Behavioral of Logica_de_Bus is ------------------------------------------------------------------ -- Definicion de Señales ------------------------------------------------------------------ signal sale : STD_LOGIC; signal sbhe : STD_LOGIC; signal smio : STD_LOGIC; signal sinta : STD_LOGIC; signal sintr : STD_LOGIC; signal srd : STD_LOGIC; signal swr : STD_LOGIC; signal snmi : STD_LOGIC; signal sclk_up : STD_LOGIC; signal sreset_up : STD_LOGIC; signal sladd : STD_LOGIC_VECTOR (19 downto 0); signal scs : STD_LOGIC_VECTOR (3 downto 0); signal spcs : STD_LOGIC_VECTOR (3 downto 0); signal swr_h : STD_LOGIC; signal swr_l : STD_LOGIC; signal srd_h : STD_LOGIC; signal srd_l : STD_LOGIC; Gustavo Minnucci - Digital III
Implementacion ------------------------------------------------------------------ -- Demultiplexor de direcciones ------------------------------------------------------------------ demux: process (clk, reset) begin if (reset = '1') then sladd (19 downto 0) <= (others => '0'); else if (clk = '1' and clk'event) then if (sale = '1') then sladd <= AD; sbhe <= BHE; end if; end if; end if; end process; Gustavo Minnucci - Digital III
Implementacion ------------------------------------------------------------------ -- Logica de Chip Selects (con decodificacion Incompleta) ------------------------------------------------------------------ -- CS's en Espacio de Memoria scs(0) <= '0'when (sladd(19) = '0' and sladd(18) = '0' and smio = '1') else '1'; scs(1) <= '0'when (sladd(19) = '0' and sladd(18) = '1' and smio = '1') else '1'; scs(2) <= '0'when (sladd(19) = '1' and sladd(18) = '0' and smio = '1') else '1'; scs(3) <= '0'when (sladd(19) = '1' and sladd(18) = '1' and smio = '1') else '1'; -- CS's en Espacio de Entrada / Salida spcs(0) <= '0'when (sladd(15) = '0' and sladd(14) = '0' and smio = '0') else '1'; spcs(1) <= '0'when (sladd(15) = '0' and sladd(14) = '1' and smio = '0') else '1'; spcs(2) <= '0'when (sladd(15) = '1' and sladd(14) = '0' and smio = '0') else '1'; spcs(3) <= '0'when (sladd(15) = '1' and sladd(14) = '1' and smio = '0') else '1'; Gustavo Minnucci - Digital III
Implementacion ------------------------------------------------------------------ -- Generacion de señales de RD y WR a memorias y perifericos ------------------------------------------------------------------ RD_WR: process (reset, srd, sbhe, sladd(0), swr) begin if (reset = '1') then srd_h <= '1'; srd_l <= '1'; swr_h <= '1'; swr_l <= '1'; else srd_h <= srd or sbhe; srd_l <= srd or sladd(0); swr_h <= swr or sbhe; swr_l <= swr or sladd(0); end if; end process; Gustavo Minnucci - Digital III
Implementacion ------------------------------------------------------------------ -- Generacion de Clock para Microprocesador ------------------------------------------------------------------ clk_gen: process (clk, reset) variable v : std_logic_vector (2 downto 0) := "001"; begin if (reset = '1') then sclk_up <= '0'; v := "001"; else if (clk = '1' and clk'event) then v := v(1 downto 0) & v(2); end if; end if; sclk_up <= v(2); end process; Gustavo Minnucci - Digital III
Implementacion ------------------------------------------------------------------ -- Conexion de señales con lineas externas ------------------------------------------------------------------ sale<= ALE; smio<= MIO; -- MIO: 1 -> M - MIO: 0 -> IO sinta <= INTA; INTR<= sintr; NMI <= snmi; srd <= RD; swr <= WR; -- CS <= scs; PCS <= spcs; -- LADD <= sladd; RD_H <= srd_h; RD_L <= srd_l; WR_H <= swr_h; WR_L <= swr_l; CLK_uP <= sclk_up; RESET_uP<= sreset_up; Gustavo Minnucci - Digital III
Implementacion con Paginacion Microprocesador M/IO Registro Paginacion Lógica de decodificación RAM Par /CS /CS RAM Impar ALE ADD Bus A16 - A19 Latch de Direcciones LA01 - LA19 Address Bus Address Bus ADD/DATA Bus AD0-AD15 DATA BUS (16 bits) D0-D7 D8-D15 Data Bus Data Bus /RD /WR BHE Generador WR_Par WR_Impar RD_Par RD_Impar /OE /WR /OE /WR Gustavo Minnucci - Digital III Logica de bus
Electrónica Digital III Ejemplo: Lectura de Memoria RAM con Intel 80C88
Esquema Interno - Memoria RAM HM62256 (32K x 8) Gustavo Minnucci - Digital III
Ciclo de Lectura - Memoria RAM HM62256 (32K x 8) Gustavo Minnucci - Digital III
Ciclo de Escritura - Memoria RAM HM62256 (32K x 8) Gustavo Minnucci - Digital III
Microprocesador Compatibilización en Lectura - up -RAM (Con Latch Transparente) La compatibilidad depende del circuito intermedio!! Memoria Direccionamiento up Decodificación de direcciones Activación de /RD Lectura del dato Desactivación de /RD Direccionamiento up Gustavo Minnucci - Digital III Dirección estable para acceso Activación de Chip Select (Selección de celda) Activación de los buffers de salida Entrega del dato Desabilitación buffers de salida Deselección de dispositivo
Ejercicio: Realizar el mismo análisis de Compatibilización para el Ciclo de Escritura (up -RAM) (Con Latch Transparente) Gustavo Minnucci - Digital III