Diseño de ordenadores Clásicos con FPGAs Gabriel Caffarena Fernández Enero de 2016 Trayectoria profesional • Dragon 64 • MSX 2 (Philips) • Amiga 500 commons.wikimedia.org Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 2 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 3 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 4 Motivación • Emulación hardware de sistemas informáticos clásicos • Se consigue emulación cycle-accurate • Experiencia más realista que la emulación software • Preservación histórica – Documentación técnica: VHDL – Persistencia en el tiempo Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 5 Motivación • Se utilizan FPGAs debido a que permiten implementar indefinidamente sistemas digitales diferentes • La implementación debe respetar, en la medida de lo possible, el sistema original • Se utiliza la misma frecuencia de reloj • Se implementan todos los chips del sistema original (o al menos los principales) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 6 Motivación • Los diseños en FPGAs se realizan con los denominados Lenguajes de Programación Descripción Hardware – VHDL – Verilog • El código no sólo sirve para implementar el sistema clásico sino que también permite transferir a generaciones futuras la funcionalidad de estos sistemas – Preservación histórica Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 7 Motivación • Y por último: Porque MOLA Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 8 Emulación hardware • Existen repositorios de microchips en VHDL – 6502, Z80, 6809, 68000,... – Código “as it is” • La lógica de unión entre chips (glue logic) hay que implementarla en VHDL – TTL Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 9 Emulación hardware • La emulación de periféricos presenta los siguientes retos: – Se pueden utilizar los periféricos originales adaptando los interfaces a la placa – Se pueden emular con tecnología moderna añadiendo retardos: floppy SD-card teclado teclado USB/PS-2 • La FPGA requiere memorias externas – Hay que emular los tiempos de retardo de las memorias clásicas Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 10 Emulación hardware • El reloj de sistema no coincide con el de la placa – Se usa un PLL para generar el reloj con la frecuencia adecuada • Audio y video adaptado al de la placa – 1 bit 24 bits, stereo, etc. – PAL/NTSC VGA, HDMI Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 11 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 12 Diseño con FPGAS Conceptos generales PCB MICROCHIP Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 13 Diseño con FPGAS Conceptos generales • Circuito impreso (PCB: Printed Circuit Board) zxuno.speccy.org • Circuito integrado o microchip (IC: Integrated Circuit) commons.wikimedia.org Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 14 Conceptos generales Circuitos integrados (microchips) • Los microchips están formados por – Resistencias – Condensadores – Dispositivos semiconductores: Transistores • El transistor es la base de la electrónica moderna – Amplificador – Conmutador binario: 0’s y 1’s Puertas lógicas Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 15 Conceptos generales Circuito integrado ó microchip • 1971: Intel 4004: – 2,500 transistores – “Ancho” de cada transistor: 10 micras • 2012: Intel Xeon Phi (64 cores) – 5,000 millones de transistores – “Ancho” de cada transistor: 22 nanómetros • Diámetro de un virus – 10-300 nanómetros commons.wikimedia.org Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 16 Conceptos generales Circuito integrado ó microchip • 2014: Nº de transistores fabricados 250 trillones (250 1018) • 2014: Nº de transistores fabricados por segundo 8 billones (8 1012) 25 x Estrellas en la vía láctea 75 x Galaxias en el universo conocido https://www.flickr.com/photos/ nasacommons/ http://spectrum.ieee.org/computing/hardware/transistorproduction-has-reached-astronomical-scales Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 17 Conceptos generales FPGA vs CPU • Microprocesador (CPU) – Sistema basado en software • Procesamiento genérico • Reprogramable – Alto consumo de potencia • FPGA – Puede contener cualquier circuito digital • Procesamiento específico – Velocidad inferior o superior al micro según la aplicación – Consumo de potencia inferior a un uP – Hardware reconfigurable (“reprogramable”) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 18 Conceptos generales FPGA • Un dispositivo FPGA contiene – memorias con datos de 1 bit (LUT: Look-Up Table) – circuitos de interconexión • Las memorias implementan lógica • Los circuitos de interconexión conectan las memorias entre sí Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 19 Conceptos generales FPGA • Por ejemplo – c=a and b c toma el valor ‘1’ sólo si a=‘1’ y b=‘1’ ENTRADAS a c b a 0 0 1 1 b 0 1 0 1 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 SALIDA c 0 0 0 1 20 Conceptos generales FPGA • Por ejemplo – c=a and b c toma el valor ‘1’ sólo si a=‘1’ y b=‘1’ • Se podría implementar con una memoria de 1 bit con 4 palabras a 0 0 1 1 b 0 1 0 1 c 0 0 0 1 Dirección 0 (00) 1 (01) 2 (10) 3 (11) Dato 0 0 0 1 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 21 Conceptos generales FPGA • LUTs en la FPGA (Altera Cyclone IV) LUT Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 22 Conceptos generales FPGA • Las memorias (LUTs) utilizan entre 4 y 6 bits para el bus de direcciones • Permiten implementar cualquier función lógica de entre 4 y 6 entradas • Las funciones lógicas son la base de todos los sitemas digitales • Por ejemplo, dispositivos de la familia Virtex-6 de Xilinx tienen entre 46,000 y 354,000 LUTs Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 23 Diseño con FPGAs Demo 1 (¡por fin!): • Apple ][ • Efectos de audio en tiempo real ¡A tan solo un click! (y muchas horas de diseño y cacharreo…) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 24 Diseño con FPGAs • El diseño a mano es inviable • El diseño con FPGAs se hace mediante software de desarrollo para FPGAs • El diseñador se encarga de definir las funciones lógicas • Las herramientas de desarrollo – Optimizan las funciones lógicas – “Reparten” la lógica entre las LUTs disponibles – Interconectan las LUTs Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 25 Diseño con FPGAs • La FPGA forma parte de una placa y convive con – – – – – Chip de video/audio Memorias Controladores de comunicaciones: USB, PCI-e, Ethernet, etc. Pulsadores, conmutadores, LEDs, etc. Display 7-segmentos, display LCD, etc. altera.com Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 26 Diseño con FPGAs • Para implementar sistemas retro hay que buscar unas características mínimas en la placa: – Salida VGA (HDMI) – Puertos para teclado, ratón (PS2), GPIO (joystick, etc.) – Entrada/Salida de audio • Hay que introducir adaptadores entre la tecnología retro y la tecnología de la placa – – – – Convertir PAL/NTSC a VGA Convertir audio de 1/4/8 bits a 12/16 bits Convertir PS/2 a interfaz propio Etc. Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 27 Diseño con FPGAs • Hay que saber qué está conectado a los pines de la FPGA – los pines de los demás chips – los puertos de entrada/salida • También puede ser interesante utilizar recursos que no pertenecen al sistema retro original – Se pueden usar los displays y LEDs para depurar el sistema Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 28 Diseño con FPGAs • Resumiendo – Bloques generales pertenecientes al sistema original: CPU, video, controlador de periféricos, etc. – Bloques adaptadores propios de la placa – Bloques de E/S para depurar el desarrollo FPGA Top-level (VHDL) Adaptador audio Apple2 • 6502 • Generador señales • ROM • Audio • Video • I/O Adaptador VGA Adaptador Disco Adaptador Gameport Adaptador Keyboard Adaptador DRAM Chips & I/O placa • Audio • VGA • Pulsadores • Conmutadores PINES • LEDs • Displays • SRAM Interfaz I/O depuración Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 29 Diseño con FPGAs Fases • Entrada de diseño • Compilación/Síntesis • Simulación funcional • • • • VHDL Puertas/LUTs 0’s y 1’s Patrones de E/S Asignación de pines Mapping y Place&Route Recursos FPGA Simulación con retardos Más realista “Programación” ¡A jugar! Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 30 Diseño con FPGAs Fases: Simulación E N T R A D A S S A L I D A S TIEMPO Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 31 Diseño con FPGAs Fases • Mapping y Place&Route – Se asignan funciones lógicas a las LUTs – Placement: Se eligen las LUTs concretas de la FPGA que se van a usar – Routing: Se interconectan las LUTs • Simulación temporal – Se simula el sistema ya rutado • Programación – Se configura la FPGA con el circuito – Se utiliza el puerto USB para enviar la información a la FPGA: • Directamente al dispositivo (se borra tras apagar) • Se almacena en una EPROM que se lee tras encender el sistema Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 32 Diseño con FPGAs Ejemplo 1: LED • Objetivo: Encender un LED si se pulsan dos botones • Primera aproximación: • ¿Hay varios pulsadores y LEDs?¿Cuáles son los pines? Manual de usuario de • ¿Al pulsa se genera un ‘1’? la placa • ¿Se enciende el LED con ‘1’? Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 33 Diseño con FPGAs Ejemplo 1: LED • Usamos la placa DE2-115 • Hay 4 pulsadores y varios LEDs – Elegimos los pulsadores KEY0 y KEY1 – Elegimos el LEDG0 • Conexión y comportamiento de los pines – Los pines de KEY0 y KEY1 son el M23 y el M21 – Al pulsar generan un ‘0’ – El pin del LEDG0 es el E21 y se enciende con un ‘1’ • Con todo esto al final habría que implementar LEDG0 = (NOT KEY0) AND (NOT KEY1) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 34 Diseño con FPGAs Ejemplo 1: LED PLACA DE2-115 KEY0 FPGA LUT LEDG0 KEY1 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 35 Diseño con FPGAs: VHDL • Los módulos contienen un circuito con entradas y salidas • Es habitual que cada módulo se defina en un fichero independiente • Un módulo puede contener en su interior otros módulos: jerarquía • Los módulos se definen mediante entidades (entity) • El puerto (port) de la entidad define las entradas y salidas • La arquitectura (architecture) describe la funcionalidad del circuito: – Funciones lógicas y módulos – Señales (cables) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 36 Diseño con FPGAs: VHDL VHDL: library IEEE; Library: Declara las librerías que se van a use IEEE.STD_LOGIC_1164.all; utilizar Entity: Declara las entradas y salidas al ENTITY led IS PORT(key0, key1: IN STD_LOGIC; ledg0: OUT STD_LOGIC); módulo STD_LOGIC es el tipo asociado a señales binarias END; Architecture: Describe qué hace el módulo ARCHITECTURE ejemplo1 OF led IS BEGIN ledg0 <= (NOT key0) AND (NOT key1); END; Se recomienda utilizar paréntesis para que el orden de operaciones no sea ambiguo. La asignación se realiza mediante el operador <= Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 37 Diseño con FPGAs Demo 2: • LED y pulsadores ¡Increible! ¡Se enciende el LED¡ (¡Un paloooo, un paloooo…!) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 38 Diseño con FPGAs: VHDL Decodificadores • También podemos expresar una función lógica directamente con una tabla (tabla de verdad) • A esto le llamamos decodificador • Aprovechamos para introducir el concepto de proceso • La arquitectura de una entidad puede tener varios procesos que se comunican entre sí • Debemos ver cada proceso como un circuito • Los procesos trabajan en paralelo Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 39 Diseño con FPGAs Ejemplo 2: Decodificador • Objetivo: Mostrar en un display de 7 segmentos el valor hexadecimal de un número binario de 4 bits • Usamos 4 conmutadores de los 18 que hay • Usamos 1 display de los 8 que hay Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 40 Diseño con FPGAs: VHDL Ejemplo 2: Decodificadores library IEEE; use IEEE-STD_LOGIC_1164.all ENTITY decod7 IS PORT ( bin: IN STD_LOGIC_VECTOR(3 DOWNTO 0); seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END; ARCHITECTURE ej2 OF decod7 IS BEGIN -- formato: gfedcba PROCESS(bin) BEGIN CASE bin IS WHEN X”0” WHEN X”1” ... WHEN X”F” WHEN others END CASE; END PROCESS; END; => seg <=“1111110”; => seg <=“110000”; => seg <=“1000111”; => seg <=“0000000”; Digital Design and Computer Architecture, Harris&Harris Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 41 Diseño con FPGAs: VHDL Máquinas de estado • Las máquinas de estado permiten realizar tareas secuenciales • Necesitamos un registro que almacene el estado – Reloj: cuando pasa de ‘0’ a ‘1’ se almacena el nuevo estado – Reset: cuando se activa el registro contiene el estado inicial • El reloj marca la velocidad a la que puede cambiar el estado • El reloj marca la velocidad a la que pueden fluir los datos Reloj Estado próximo Entradas Estado actual Salidas Reset Cálculo del Próximo estado Registro de estado Cálculo del valor de las salidas Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 Digital Design and Computer Architecture, Harris&Harris 42 Diseño con FPGAs: VHDL Máquinas de estado • 3 bloques 3 procesos – Registro de estado – Lógica de próximo estado – Lógica de salida Reloj Estado próximo Entradas Estado actual Salidas Reset Cálculo del Próximo estado Registro de estado Cálculo del valor de las salidas Digital Design and Computer Architecture, Harris&Harris Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 43 Diseño con FPGAs Ejemplo 3: Máquina de estados • Objetivo: Encender un LED cuando se pulse la secuencia: KEY0KEY2KEY1 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 44 Diseño con FPGAs Ejemplo 3: Máquina de estados library IEEE; use IEEE.STD_LOGIC_1164.all entity tres is port ( clk, reset: in STD_LOGIC; key0,key1,key2: in STD_LOGIC; ledg0: out STD_LOGIC); end; architecture retro of tres is type tipoestado is (wait0, wait2,wait1,led); signal estado, prox_estado: tipoestado; begin -- registro de estado process(clk, reset) begin if reset=‘1’ then estado <= wait0; elsif RISING_EDGE(clk) then estado<=prox_estado; end if; end process; ... Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 Digital Design and Computer Architecture, Harris&Harris 45 Diseño con FPGAs Ejemplo 3: Máquina de estados ... -- lógica de próximo estado process (estado, key0, key1, key2) begin case estado is when wait0 => if key0=‘0’ then prox_estado <= wait2; else prox_estado <= wait0; end if; when wait2 => if key2=‘0’ then prox_estado <= wait1; else prox_estado <= wait2; end if; when wait1 => if key1=‘0’ then prox_estado <= led; else prox_estado <= wait1; end if; when led => prox_estado <= led; end case; end process; ... Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 46 Diseño con FPGAs Ejemplo 3: Máquina de estados ... -- lógica de salida process (estado) begin if (estado=led) then LEDG0 <= ‘1’; else LEDG0 <=‘0’; end if; end process; end; -- fin de la arquitectura Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 47 apple2fpga Demo 3: VGA Código modificado a partir de un proyecto de Scott Larson https://eewiki.net/pages/viewpage.action?pageId=15925278 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 48 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 49 6502 • Chuck Peddle: padre del PC – Estaba en el grupo que diseñó el Motorola 6800 – Quiso realizar una CPU más simple y más barata – Se incorporó en 1974 a la empresa MOS Technology para llevar a cabo su Proyecto • Desarrollo del 6502 – – – – – Equipo compuesto por 9 personas 1975: Primer diseño funcional commons.wikimedia.org Diseño “manual” La leyenda dice que funcionó a la primera Consiguieron un yield del 70% (lo habitual era 30%) 150$ Motorola 6800 25$ MOS 6502 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 50 6502 visual6502.org • • • • 3500 transistores 6 diagramas diferentes superpuestos Regla de metal y calcetines nuevos Bill Mench = Genio del layout Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 51 6502 • Sinergia – – – – – – Apple II 1975: Creación del 6502 1975: Homebrew Computer Club 1975: Wescon: venta a “hackers” 1975: Contrato con Atari 1976: Demo Apple I en HBC 1976: Commodore Int. adquiere MOS Technology Commodore 64 Atari 2600 Futurama: Episodio “Fry y la fábrica de Slurm” Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 52 Los dos Steves: Wozniak • • • • • Aficionado a la electrónica desde pequeño Premio sobre proyecto de electrónica en el colegio Diseñaba ordenadores y compiladores en papel Convencido de la importancia de reducir el coste 1970: Cream Soda Computer (256 bytes de RAM) – Trabajó como programador para conseguir los componentes • Aficionado a gastar bromas: llamadas telefónicas, inhibidor de televisión, etc. • 1971: Conoce a Steve Jobs Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 53 Los dos Steves: Jobs • • • • • • Aficionado a la electrónica desde pequeño Conseguía componentes gratis Trabajó ya en el instituto en Hewlet-packard Tendía a seguir sus propias normas Amigo de “experimentar” Aficionado a gastar bromas Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 54 Los dos Steves: Wozniak+Jobs • Construyen y venden la “blue box” • 1973: Woz trabaja para HP diseñando calculadoras – Queda fascinado con el juego Pong de Atari • 1974: Jobs trabaja para Atari • 1975: Jobs pide ayuda a Woz para diseñar una versión de Pong para 1 jugador de bajo coste (Breakout) – Versión de Atari (Acorn): 100 chips – Vesión de Wozniak: 45 chips • 1975: Woz compra varios 6502 en WESCON… Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 55 Apple ][ • Se crea en 1977 y es la evolución del Apple I de – Apple I: MOS 6502 1 MHz 4K RAM, 256 bytes de ROM 40x24 caracteres – Apple II: MOS 6502 1 MHz 4-48K RAM, 12 KB ROM (BASIC) 40x24 caracteres 40 x 48 x 16 colores 280 x 192 x 6 colores Admite unidad de disco 5 1/4 • Énfasis en video a color, BASIC y periféricos • Fue Jobs quién se “empeñó” en comercializarlo Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 commons.wikimedia.org 56 Apple ][ • Se basa en la patente – “Microcomputer for use with video display”, US patent 4.136.359, Enero 1979 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 57 Apple ][+ • • • • • • Mejora del Apple II puesta en el mercado en 1979 16,32 ó 48 K de RAM BASIC con coma flotante Arranque desde disco Gran éxito comercial Apple siguió produciendo nuevas versiones del Apple II y hardware hasta 1993 Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 58 Apple2FPGA • Iniciativa de Steve A. Edwards de la Universidad de Columbia • Placa DE2 • Todos los chips, salvo la RAM en una única FPGA • Consumo Apple][ : 20-30 W • Consumo DE2: 5W http://www.cs.columbia.edu/~sedwards/apple2fpga/ Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 59 Diagrama de bloques 14 MHz 2 MHz 1 MHz http://www.cs.columbia.edu/~sedwards/ papers/edwards2009retrocomputing.pdf 60 Generador de señales de temporización 61 Generador de señales de temporización http://www.cs.columbia.edu/~sedwards/ papers/edwards2009retrocomputing.pdf Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 62 Generador de señales de ¡PLL! temporización http://www.cs.columbia.edu/~sedwards/ papers/edwards2009retrocomputing.pdf Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 63 Generador de video 64 Generador de vídeo • • • • Texto: 40x24 B/W Gráfico “lores”: 40x48, 15 colores Gráfico “hires”: 140x280, 6 colores NTSC: se codifica en binario los colores con 4 bits • Necesitamos convertir de NTSC a VGA Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 65 Generador de vídeo http://www.cs.columbia.edu/~sedwards/ papers/edwards2009retrocomputing.pdf Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 66 Generador de vídeo FPGA Generador de Vídeo Adaptador VGA Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 VGA Monitor 67 Teclado y puerto de juegos Teclado PS/2 3 Botones del joystick 68 Disco 5 1/4 SD/CARD 69 Disco 5 1/4 6502 Interfaz Disk II Adaptador SD/CARD (SPI) SD-CARD Última versión creada por Michel Stempin Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 70 Disco 5 1/4 • El control de la disquetera era software • Los datos se recibían codificados y había que decodificarlos mediante SW • Se accede a la SD/CARD mediante el protocolo serie SPI • Se evita formatear la SD/CARD se usa el formato .nib dsk2nib.exe • Se emula el cambio de disco con los conmutadores de la placa Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 71 Disco 5 1/4 Demo: Varios discos en una SD-CARD 0 – Apple DOS 1 – Lode Runner 2 – Mario Bros 3 – Moon Patrol 4–… Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 72 Audio FPGA 6502 Flip-flop 1-bit Adaptador Audio (I2C) CODEC Audio Altavoz 32-bit, Estéreo Hasta 96 Ksps Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 73 ROM • Copyright de apple • Se incluye una “fake ROM” que muestra un mensaje y hace un par de demos gráficas • La ROM está dentro de la FPGA • Se incluye una aplicación para convertir la ROM en VHDL Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 74 RAM FPGA 6502 Adaptador DRAMSRAM 48 KB SRAM 1-2 MB Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 75 Implementación final FPGA Top-level (VHDL) Adaptador audio Apple2 Adaptador VGA • 6502 • Generador señales • ROM • Audio • Video •I/O Adaptador Disco Chips & I/O placa Adaptador Gameport Adaptador Keyboard PINES Adaptador DRAM • Audio • VGA • Pulsadores • Conmutadores • LEDs • Displays • SRAM Interfaz I/O depuración Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 76 Implementación final ROM 6502 Controlador SD/CARD (SPI) 77 apple2fpga Demo: Echemos un vistazo al código VHDL Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 78 Joystick • Originalmente Woz pensó en utilizar paddle analógicos basados en un potenciómetro • Dentro del Apple ][ había un 558 que actuaba en modo monoestable (one shot) • La resistencia que presenta el paddle hace variar el tiempo que está la salida del 558 activa ESCRITURA EN xC070 PADDLE LECTURA EN Xc064, xC065, … Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 79 Joystick • Al leerse la dirección xC070 – Se genera la señal de trigger que activa los 4 monoestables del 558 – Se activan 4 salidas del 558 – El tiempo de ON de cada salida depende del estado de cada paddle (potenciómetro) • Mediante una rutina software se comprueba cuánto tiempo tarda cada paddle de forma independiente en pasar a ‘0’ • Los tiempos oscilan entre 2,2 secs y 3.3 ms para potenciómetros de 150 K Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 80 Joystick • Emulamos el joystick mediante un circuito digital • Cada paddle se asocia con dos botones del joystick – Si se pulsa el botón A (left o up) se genera un pulso corto – Si se pulsa el botón B (right o down) se genera un pulso largo – Si no se pulsa ninguno se genera un pulso intermedio • Los pulsos se hacen con contadores Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 81 Joystick DEMO: • Juguemos un poco • VHDL • ¿Qué ocurre con juegos tipo Pong? Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 82 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 83 6502 Demo: Echemos un vistazo al código VHDL Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 84 • • • • • Motivación Diseño con FPGAs Apple2FPGA Diseño de microprocesadores Conclusiones y líneas futuras Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 85 Conclusiones • Dominar VHDL • Conocer muy bien el esquemático del microordenador • Conocer muy bien la placa concreta que se va a usar • Apple2FPGA: – Mejorar gameport: similar paddle con potenciometro ¿Es possible? – Mejorar disco: escritura • Líneas futuras – Crear foro para poder adaptar implementaciones a un surtido de placa adaptadores – Diseño de HW para utilizar los periféricos originales – Emulación de CRT en pantallas modernas Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 86 Referencias • Apple2FPGA, DE2 http://www.cs.columbia.edu/~sedwards/apple2fpga/ • Apple2FPGA en DE2-115 http://biolab.uspceu.com/~gabriel/retro.htm • Retrocomputing on an FPGA: Reconstructing an 80's-Era Home Computer with Programmable Logic, Steve A. Edwards http://www.cs.columbia.edu/~sedwards/papers/edwards2009retrocomputing.pdf Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 87 Referencias • The Apple II Circuit Description. Howard W. Sams & Co http://mirrors.apple2.org.za • Sophistication & Simplicity: The Life & Times of the Apple II Computer. Steven Weyhrich http://apple2history.org/book/ • Commodore: a company on the edge http://variantpress.com/books/commodore-a-company-on-the-edge/ Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 88 Referencias • http://www.altera.com (Software: Quartus II Web Edition) • http://www.xilinx.com (Software: ISE WePACK) • http://www.fpga4fun.com • Cheap FPGA boards https://joelw.id.au/FPGA/CheapFPGADevelopmentBoards • http://zxuno.speccy.org/ • http://www.visual6502.org Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 89 Referencias • Digital Design & Computer Architectura, D. Harris, S. Harris, 2012, Morgan Kaufman • The student’s guide to VHDL, P.J. Ashenden, 2008, Morgan Kaufman Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 90 THANKS! • Universidad San Pablo CEU • Altera Inc. • Steve Edwards (apple2fpga) • Michel Stempin (apple2fgpa/sdcard) • Peter Wendrich (FPGA-64/cpu6502.vhd) Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 91 THANKS! • BenKenobi Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 92 gacaffe@gmail.com @gacaffe Diseño de ordenadores clásicos con FPGAs Gabriel Caffarena - Enero 2016 93