Cuando llegó la revolución de las computadoras domésticas, llenó mi infancia de fascinación y me inspiró a estudiar ingeniería informática. Quería diseñar una microcomputadora según mis propias especificaciones. Pero en la escuela nunca me enseñaron cómo se arma un sistema informático completo. En lugar de eso, estudiamos varios subsistemas y la teoría de cosas como el procesamiento de señales digitales, etc. Alguien, en otro lugar, siempre sería responsable de ensamblar todo el sistema y hacer que todo funcione en conjunto. Esto fue desafortunado e injustificado: armar una computadora completa que funcione no es difícil y puede brindarles a los estudiantes una confianza temprana crítica en su capacidad para estar a la altura de la etiqueta de «ingeniero informático». Así que, tras haberme retirado recientemente de la industria de la alta tecnología, decidí diseñar una computadora didáctica pero completamente funcional que pudiera servir como plataforma para aprender y experimentar con cuestiones de diseño a nivel de sistema: la Cerberus 2100. No quería comprometerme. Cerberus a una CPU en particular, ya que hacerlo combinaría conceptos de arquitectura a nivel de sistema con los tiempos y señales de control específicos de esa CPU. Así como un curso de ingeniería de software se centra en la estructura de un algoritmo más que en la sintaxis de su implementación en un lenguaje particular, quería que Cerberus se centrara en la estructura a nivel de sistema. Cerberus es, por tanto, un sistema multi-CPU, que incluye un Z80 y un W65C02S (6502), dos conocidos procesadores de 8 bits que ocuparon un lugar destacado en la era de las microcomputadoras domésticas. Hay una gran cantidad de recursos disponibles para aprender a programar estos procesadores, que son lo suficientemente potentes como para ser útiles y entretenidos, pero lo suficientemente simples como para dominarlos. El problema, por supuesto, es que estas dos CPU operan con interfaces muy diferentes a otras partes de la computadora, como la memoria o los dispositivos de entrada/salida. Por ejemplo, el 6502 usa una sola línea de control para indicar si está leyendo o escribiendo en el bus de datos, mientras que el Z80 usa dos líneas. Esto significa que la señal del 6502 debe combinarse con la señal del reloj del sistema, a través de una puerta AND, para evitar errores de escritura en la memoria, mientras que el Z80 no tiene ese problema. Además, el Z80 tiene una línea de salida para señalar que el valor en el bus de direcciones es estable, función ausente en el 6502. Y así sucesivamente. Estas diferencias significan que no podría utilizar un bus de control estándar en Cerberus. En su lugar, utilicé un chip de dispositivo lógico programable (CPLD) complejo y grande al que denominé “Fat-Spacer” para traducir las señales de control de cada CPU en una capa de abstracción. Esta capa define la arquitectura del sistema. Luego, Fat-Spacer traduce la salida de la capa de abstracción en las señales de entrada apropiadas para cada componente del sistema. Estos dos pasos de traducción implican tanto lógica booleana como control de tiempo mediante flip-flops. Utilicé un CPLD en lugar de un FPGA (matriz de puertas programables en campo) porque, a diferencia de los FPGA, los CPLD tienen un retraso de propagación fijo independientemente de la lógica booleana implementada en ellos. Esto es fundamental porque permite a los usuarios realizar cambios en la arquitectura del sistema (reprogramando el CPLD) sin tener que preocuparse de que la complejidad de sus cambios tarde demasiado en pasar a través de una cadena de puertas lógicas y, por lo tanto, pierda las ventanas de tiempo impuestas. por el reloj del sistema. Debido a su capa de abstracción interna, Cerberus es especialmente adecuado para la expansión: un puerto de expansión de acceso directo a memoria (DMA) también está conectado a Fat-Spacer. Al permitir el acceso directo a la memoria del sistema, permito al usuario agregar aún más CPU y microcontroladores al sistema a través del puerto de expansión. Otro desafío de diseño crítico fue desacoplar la lógica de la computadora de los tiempos de los circuitos de video. Otro desafío de diseño crítico que enfrenté fue desacoplar la lógica a nivel de sistema de la computadora de los tiempos de los circuitos de video. Tradicionalmente, estos dos están estrechamente unidos para coordinar el acceso a las memorias de vídeo y personajes por parte de la CPU y los circuitos de visualización sin causar conflictos o artefactos. Pero con dos CPU y el puerto de expansión DMA, esto no era una opción. En cambio, Cerberus utiliza dos RAM estáticas de doble puerto (SRAMS) como memorias de vídeo y personajes. Cada puerto permite el acceso asíncrono al contenido de la memoria. Un puerto de cada SRAM está conectado a la computadora propiamente dicha, mientras que el otro es exclusivo para los circuitos de video. Los procesadores Z80 y 6502 utilizan diferentes señales de control para interactuar con la memoria y los chips de interfaz. Un chip lógico reprogramable, denominado Fat-Spacer, traduce estas señales según sea necesario. Otro chip lógico reprogramable maneja el almacenamiento y la interfaz del teclado, mientras que un tercero genera señales de video. James Provost A pesar de las memorias de doble puerto, aún podrían ocurrir fallas en la pantalla si el circuito de video leyera desde una dirección determinada mientras la computadora escribía en esa misma dirección. Afortunadamente, las SRAM de doble puerto proporcionan una señal «OCUPADO» para indicar un conflicto. Fat-Spacer utiliza esta señal para pausar las CPU mientras dure el conflicto. La capa de abstracción de control también resulta muy útil aquí, ya que ya tiene la lógica de traducción adecuada para pausar las CPU. Fat-Spacer no es el único CPLD en Cerberus: tres de ellos constituyen el conjunto de chips central del sistema. Fat-Cavia escanea continuamente el vídeo y las memorias de los personajes, y envía mapas de bits a Fat-Scunk, que luego genera las señales RGB apropiadas y sincroniza los pulsos para crear una salida VGA de 320 por 240 píxeles. Mientras tanto, como hemos visto, Fat-Spacer proporciona la lógica del pegamento. Finalmente, hay un chip adicional: Fat-Cat, que en realidad es un microcontrolador ATmega328PB. Se utiliza para gestionar las E/S: el microcontrolador gestiona un teclado, un timbre, el protocolo de expansión y una tarjeta microSD para almacenamiento. El firmware de E/S se guarda en la memoria del ATmega, lo que significa que no deja huella de memoria en los 64 kilobytes de RAM accesibles al Z80 y al 6502. El Cerberus 2100 es un diseño de hardware abierto disponible para todos y los detalles completos están disponibles en mi sitio web. . Pero para aquellos que no quieran construir su propia máquina desde cero, estoy trabajando con la empresa europea de electrónica Olimex para la venta de una versión completamente ensamblada en breve. Espero que ayude a los estudiantes y aficionados a comprender (y a los profesores a enseñar) cómo se puede armar una computadora completa y completamente funcional, independientemente de la CPU de destino. Este artículo aparece en la edición impresa de noviembre de 2023 como «Arquitectura definida por software». Artículos de su sitioArtículos relacionados en la Web

Source link