CHAPTER 3 METHODOLOGY AND METHODS
3.3 Research Methods
3.3.2 Interviews
ADD 25.7 38 SUB 25.7 38 AND 40 25 LOAD 50 20 OR 40 25 XOR 35.7 28 SHIFT_L 30.3 33 SHIFT_L_C 31.25 32 SHIFT_R 30.3 33 SHIFT_R_C 31.25 32 Promedio 34.2 30.4 Ciclo operación (ns)
La unidad de secuencia, para iniciar la ejecución, espera a que sea introducido el token inicial, de ahi en adelante continuará la secuencia indefinidamente. Este módulo trabaja de manera sincronizada con el módulo decodificador para proporcionar el salto incondicional y los saltos condicionales según se escoja para el salto la condición sobre la bandera de Acarreo o de Cero.
El programa de ejecución es escrito directamente en el módulo decodificador, y cada instrucción está descrita en dos pasos de instrucción. El primer paso, prepara a la unidad ALU-Shifter con los datos del módulo de registro, y la segunda instrucción coordina la escritura del resultado de en la unidad de registros. Cada paso de instrucción es un vector de señales de control. Ver figura 49.
El programa es escrito directamente en lenguaje VHDL, como constantes predefinidas que se concatenan en el vector de señales de control. Los puntos de salto son introducidos en el módulo de Secuencia, exactamente en el paso que se describe en el programa. Esto se logra declarando uno a uno los módulos de la secuencia, y conectándolos entre sí, de manera que el programa queda descrito dentro de los módulos secuencia y decodificador.
El decodificador depende del vector de entrada (index), que le proporciona la unidad de secuencia. La unidad ALU-Shifter, está pendiente de la señal ins.op que le proporciona el decodificador. Tomará los datos de los registros a y b, si es operación de suma o resta, toma la bandera de acarreo (cflag) y guarda el resultado en el registro a. Esta unidad genera dos señales de respuesta (Ack), la primera, informa que está sin datos, y la segunda, informa que ha terminado una ejecución de operación. Estas dos señales van al módulo de secuencia, y sostiene el vector index mientras llega la segunda señal. En cada avance de secuencia, el vector Index es "0", lo que hará que el vector de señales de control pase a ser "0" también y esto obliga a que la unidad ALU-Shifter entre en la etapa RTZ (retorno a cero) para prepararse al siguiente ciclo, generar la señal de respuesta de estado sin datos y continuar indefinidamente el ciclo de operación.
Por lo anteriormente explicado, entonces la secuencia de ejecución del programa, no está controlado por un contador (Program Counter), sino por una secuencia de estados, que se manifiestan en un vector de secuencia (index).
Figura 48. Arquitectura del Microprocesador
La figura 48 muestra la arquitectura general del microprocesador y las señales entre módulos. El microprocesador, al igual que el proceso secuencial, tan solo tiene como entrada el botón de inicio, que introduce el TOKEN que inicia el circuito de secuencia, que permanece realizando el ciclo de ejecución indefinidamente.
La salida de datos es conectada al analizador de estados. No está representado el ancho de los buses en el diagrama. El bus de datos, es de 16 hilos correspondientes a 8 bits representados en codificación numérica 1 de 4. El bus de banderas C y Z (Acarreo y Cero), es en codificación dos rieles, por lo tanto tiene 4 hilos, la dirección de registros a y b es un bus de 20 hilos, el vector index es un bus de 32 hilos, el vector de operación de la unidad ALU-Shifter es de 10 hilos, donde cada hilo corresponde a una operación, el bus de control de flujo de programa, es de tres hilos, pero al momento no implementa ninguna función. Las demás señales de operación y de control, son de un hilo.
Figura 49. Fragmento del programa implementado.
Para comprobar el funcionamiento como microprocesador, se implementa un sencillo programa de 16 instrucciones, en el cual se recorren todas las operaciones de la unidad ALU-Shifter y salto condicional por bandera de Acarreo, por bandera de Cero y salto incondicional. La tabla de secuencia y programa implementado se ve en la tabla 9.
Inicialmente se cargan en los registros enumerados (0, 1, 2, … ,10), los valores 0 al 10, para facilidad de lectura de la tabla 9. En color verde se muestran los resultados de cada instrucción.
Para demostrar el salto condicional por bandera de Cero, se implementa una operación multiplicación, e involucra las instrucciones 1 y 2 del programa. Se hace la multiplicación 3 * 5 = 15, por medio de acumular durante 5 iteraciones el valor 3 en el registro 11, donde al final del programa estará el valor 15. Al registro 5 se resta progresivamente hasta llegar a 0, donde se procede a salir del ciclo que conforma la multiplicación, en la instrucción 2, por evaluar la bandera Cero (Z).
Posteriormente, para comprobar el salto por bandera de acarreo (C), se implementa en la instrucción 3 y 4 la división 8 / 2 = 4, para lo cual, al registro 8 se resta consecutivamente el valor 2, y en el registro 12 se lleva un contador, que dará el resultado luego de 4 iteraciones. Se sale del ciclo en la instrucción 3 al desbordar la resta y presentar bandera de acarreo en 1, que en este caso es bandera de préstamo. El programa desde la instrucción 4 a la instrucción 16, ejecuta el resto de operaciones, y en la
instrucción 16 se ejecuta un salto incondicional a la operación 4, iniciando de nuevo la ejecución en un ciclo permanente.
En la figura 50 se muestran el diagrama de tiempos de ejecución del programa, mostrando en las tablas de estados, la salida de datos que corresponden al momento del salto condicional del programa por bandera Cero (a la izquierda), mostrando iteraciones 4 y 5. Para bandera de Acarreo (a la derecha), la tabla de estados muestra las salidas de datos de la la iteración 8 y principios de la iteración 9.
En la parte de superior, se aprecian las señales en el momento del salto condicional por bandera Cero. Las señales de Acarreo ( C ) y de la bandera Cero ( Z ) tanto de la salida del módulo de memoria ( M) como del módulo ALU-Shifter ( A ).
Las señales del módulo ALU-Shifter, ALU_ACK_B indica cuando está completamente sin datos y lista para operar la siguiente instrucción, y la señal ALU_ACK_F indica cuando ha terminado de efectuar la operación.
Entre la ejecución de una instrucción y la siguiente, aparece marcado NULL, que indica que no hay datos en el bus de salida del módulo ALU-Shifter.
Las señales ALU_ACK pueden ser utilizadas para determinar el número de operaciones por segundo que está ejecutando el microprocesador.
En el diagrama de tiempos, se aprecia que la señal ALU_ACK_F indica un periodo de señal de 7.62 muestras, con un periodo de muestreo de 5ns, lo que se traduce en 38.1 ns de periodo de ejecución ó 26.24 MIPS. Esta cifra debe ser tomada solo como rendimiento de esta parte del programa, ya que puede variar ampliamente, dependiendo de las instruccionesque se implementen en el programa. En la tabla de estados de la izquierda, la muestra 85 corresponde al cursor B en color azul, del diagrama de tiempos.
Figura 50. Diagrama de tiempos de ejecución del programa. 5. Análisis de resultados
• Al ser un procesador secuencial, en codificación 1 de 4, implementada la ALU y ROM tipo LUT, se demuestra que es posible la implementación de unidades digitales complejas asíncronas en dispositivos de lógica programable y es posible diseñar circuitos asíncronos complejos.
• El utilizar una plataforma de implementación, en la que claramente el fabricante desalienta y advierte no utilizar, es un logro en sí mismo ya que demuestra que a nivel académico es posible llevar el circuito a la práctica.
• El manejo de otras codificaciones de datos, abre el horizonte de diseño digital.
• Rendimiento cercano a los 30 MIPS, en el proceso secuencial y en el microprocesador, es comparable a un rendimiento de procesador síncrono de 30 Mhz, solo si la respuesta de este procesador es de una operación por ciclo de reloj.
• Se aprecia un uso de recurso elevado, pero suficiente para ser utilizado con otros módulos en una misma FPGA.
• El uso de dispositivos CPLD fué adecuado para tomar maestría en el diseño de circuitos
asíncronos, pero su tamaño reducido en recursos los hacen poco atractivos para implementar un sistema complejo.
• La implementación en dispositivos FPGA es viable, aunque por ser dispositivos altamente optimizados para implementación de circuitos síncronos (por ejemplo, caminos específicos para distribuir señal de reloj, agrupamiento de registros con señales compartidas de set y reset, y otras) hace que el diseño implementado sea lento y ocupe recursos de más.
• La metodología propuesta en el diseño de la ALU, permite apropiar de manera clara los principios de funcionamiento de los circuitos asíncronos.
• Se logró el objetivo de diseñar el procesador de 8 bits, por medio de tecnología digital asíncrona, e implementarlo en un dispositivo de lógica programable, descrito en lenguaje HDL.
• En el caso del desarrollo de las interfases, se decidió diseñar la unidad de memoria de solo lectura y memoria de datos por completo, debido a la disparidad de velocidad de la tecnología del dispositivo programable y las memorias paralelas comerciales (ROM AT28C16, RAM HM6116, ver anexo 8), donde el orden de retardo es 100 veces más lentas, y de presentar los datos en codificación binaria, incompatibles con la codificación dos rieles y 1 de 4.
• El uso de las memorias anteriormente mencionadas, hubiera implicado diseñar un retardo emparejado de apróximadamente 100 a 150 compuertas, demasiado alto en uso de recursos, cuando con la misma cantidad de recursos se puede implementar una unidad de memoria con ¼ de la capacidad de la memoria externa y con la codificación 1 de 4.
• Es un ejercicio de diseño digital interesante, ya que se rompe el esquema tradicional del microprocesador y el diseño de módulos de registro y ALU en codificación 1 de 4, secuencia y decodificador como soporte de un programa que está cableado directamente al hardware.
5.1 Resultados teóricos relevantes del trabajo
5.1.1 Datos codificados en 1 de 4 y comparativa con dos rieles y binario
La codificación 1 de 4 presenta un promedio menor en conmutaciones de 0 a 1 que su contraparte binaria. Sin embargo, los protocolos de comunicaciones actuales, donde se transmiten grandes cantidades de ceros y unos para sincronismo, ponen en desventaja al protocolo 1 de 4 con respecto al binario. Otra desventaja evidente es el doble de líneas de conexión que requieren.
Tabla 10. Representación numérica en codificación binaria, mostrando datos de 4 bits.
Tabla 11. Representación numérica en codificación dos rieles, mostrando datos de 4 bits.
Codificación Binaria Promedio A3 A2 A1 A0 0 0 0 0 1* 2.93 0 0 0 1 2 0 0 1 0 2 0 0 1 1 3 0 1 0 0 2 0 1 0 1 3 0 1 1 0 3 0 1 1 1 4 1 0 0 0 2 1 0 0 1 2 1 0 1 0 3 1 0 1 1 4 1 1 0 0 3 1 1 0 1 4 1 1 1 0 4 1 1 1 1 5 2³ * A3 2² * A2 2¹ * A1 2 * A0⁰ Número de señales en alto Número de hilos necesarios: 4
NOTA: Los datos binarios para ser válidos, requieren de una señal externa ( * reloj).
Codificación dos rieles (1 de 2)
A3 A2 A1 A0
Promedio
a31 a30 a21 a20 a11 a10 a01 a00
0 1 0 1 1 0 0 1 4 4 0 1 0 1 1 0 1 0 4 0 1 0 1 0 1 0 1 4 0 1 0 1 0 1 1 0 4 0 1 1 0 1 0 0 1 4 0 1 1 0 1 0 1 0 4 0 1 1 0 0 1 0 1 4 0 1 1 0 0 1 1 0 4 1 0 0 1 1 0 0 1 4 1 0 0 1 1 0 1 0 4 1 0 0 1 0 1 0 1 4 1 0 0 1 0 1 1 0 4 1 0 1 0 1 0 0 1 4 1 0 1 0 1 0 1 0 4 1 0 1 0 0 1 0 1 4 1 0 1 0 0 1 1 0 4
2³ * a31 2² * a21 2¹ * a11 2 *a01⁰
Número de hilos necesarios: 8
Número de señales en alto
NOTA: Los datos codificados en dos rieles, no requieren de una señal de reloj para ser válidos.
Tabla 12. Representación numérica en codificación 1 de 4, mostrando datos de 4 bits.
Comprando las tablas 10, 11 y 12, se aprecia como en promedio los datos codificados en binario requieren 2.9 conmutaciones, los datos codificados en dos rieles 4 y en codificación 1 de 4 2. Es una ventaja tener constante el número de conmutaciones en procesos de encriptación de datos, debido a que no es posible determinar un número del otro por la potencia consumida por ciclo de operación. ( en un sistema binario sería evidente cuando es operado un cero).
5.1.2 El problema de representar el cero y realizar índices en codificación binaria
Según lo visto en el capítulo 4, apartado 4.4.4.1, ocurre una penalización en tiempo al estar representado el cero en codificación binaria, y requerir una señal temporal externa que le valida.
Ocurre algo similar al realizar un índice de registros en codificación binaria: el cero es ausencia de datos y debe ser validado por una señal temporal. Al seleccionar alguno de los índices, ocurrirán inevitablemente glitches al ir apareciendo una a una las señales que conforman el vector de selección de índices, y puede propagar un dato no válido a la ALU.
Esto no sucede en una representación 1 de 4, (tampoco en dos rieles), ya que el cero es un dato válido en sí mismo y no requiere una señal externa temporal, como la señal de reloj.
En los índices la codificación 1 de 4 presenta ventajas ya que por cada índice se puede garantizar una sola y única combinación que no interfiere con las demás al momento de conmutar y la lógica
combinatoria no es mayor que la lógica requerida en la contraparte binaria.
Como ejemplo, en una unidad de registro con 16 posiciones, se debe implementar un índice con 4 bits Codificación 1 de 4
A3 A2 A1 A0
Promedio
a31 a30 a21 a20 a11 a10 a01 a00
a13 a12 a11 a10 a03 a02 a01 a00
3 2 1 0 3 2 1 0 0 0 0 1 0 0 0 1 2 2 0 0 0 1 0 0 1 0 2 0 0 0 1 0 1 0 0 2 0 0 0 1 1 0 0 0 2 0 0 1 0 0 0 0 1 2 0 0 1 0 0 0 1 0 2 0 0 1 0 0 1 0 0 2 0 0 1 0 1 0 0 0 2 0 1 0 0 0 0 0 1 2 0 1 0 0 0 0 1 0 2 0 1 0 0 0 1 0 0 2 0 1 0 0 1 0 0 0 2 1 0 0 0 0 0 0 1 2 1 0 0 0 0 0 1 0 2 1 0 0 0 0 1 0 0 2 1 0 0 0 1 0 0 0 2 2²*n 2 *n⁰
Número de hilos necesarios: 8
Número de señales en
alto
NOTA: Los datos codificados en 1 de 4, no requieren de una señal de reloj para ser válidos.
en binario, que requerirá 4 líneas , 1 compuerta AND de 4 entradas y algunas negadoras, para cada registro. Por el contrario, en codificación 1 de 4 se requerirán 8 líneas, 1 compuerta AND de 2 entradas y ninguna negadora por cada registro.
• En 1 de 4, aunque requiero más líneas, utilizo menos recursos en compuertas.
• En 1 de 4, consumo menos energía, porque enciendo tan solo 1 compuerta y no tengo glitches, como si ocurre cuando se usa una codificación binaria. Los glitches son encendidos no deseados de compuertas. Supongo que en la línea no hay consumo de energía ó es despreciable con respecto a las compuertas.
• En 1 de 4, un dato erróneo puede ser representado como un dato inválido, haciendo
relativamente fácil detectar cuando ha ocurrido un error. (Por ejemplo, contando el número de líneas en alto). En codificación binaria, por el contrario, siempre un dato erróneo va a
representarse como un dato válido, dificultando el detectar cuando ha ocurrido un error en el sistema.
• En 1 de 4, ausencia de señales es estado NULL. En codificación binaria, ausencia de señales puede ser interpretado como un dato válido con valor 0.
En el diseño del microprocesador, el solo cambio de unidad de registro de índice en 1 de 4 y almacenar el dato en 1 de 4, y así evitar la penalización de tiempo de crear un retardo emparejado adicional, representa un aumento de rendimiento en tiempo.
De nuevo, el punto a reflexionar es el doble de líneas que requiere una codificación 1 de 4 contra la representación binaria, y las consecuencias de adoptar una u otra. Si se desea profundizar en este tema, ver la referencia libro 7, capítulo 9.
5.1.3 Modelo matemático propuesto de compuertas Muller C y NCL
El modelo de compuerta Muller C y NCL y la similitud con el modelo de neurona no lineal presentado en el marco teórico apartado 2.3.1, tan solo pretende remarcar cómo teorías disímiles pueden converger con pequeños adiciones y cambios, pudiendo llegar a ser un campo de investigación y de aplicación de teorías de redes neuronales en el desarrollo de circuitos asíncronos y viceversa.
5.1.4 Material desarrollado para posterior de consulta
Otro resultado es el material desarrollado durante el proceso de investigación, que sirvieron en su momento como referencia, realizar ejercicios sobre lo aprendido hasta el momento y reflexión. Estos anexos se pueden convertir en material de consulta y revisión de conceptos.
• Anexo 1,"Ejercicios de circuitos secuenciales asíncronos tipo Huffman.", donde se tradujeron con propias palabras y se desarrollaron los ejercicios propuestos y simulaciones.
• Anexo 3, "Resumen en español del libro "Asynchronous Circuit Design - A tutorial" de Jens Sparso.", tal vez el más extenso de los anexos, donde con palabras propias se tradujo al español el tutorial.
• Por último, el anexo 5, "Propuesta de contenido de Taller introductorio teórico-práctico
circuitos asíncronos.", taller pendiente de ser materializado en la facultad y pretende interesar a estudiantes de de pregrado y maestría en el tema.
5.2 Resultados prácticos relevantes del trabajo
El demostrar la posibilidad de implementar sistemas complejos digitales 100% asíncronos.
5.2.1 Unidades básicas de secuencia, almacenamiento y procesamiento
Estos dispositivos se construyen con la finalidad de tener una herramienta práctica que ayude en el proceso de enseñanza de los circuitos asíncronos, mostrando de una manera interactiva el
procesamiento de datos, secuencia y almacenamiento.
5.2.2 Proceso secuencial y Microprocesador
Se constituyen en si mismos en pruebas conceptuales y experimentales de la viabilidad de diseño y síntesis de circuitos asíncronos en dispositivos de lógica programable. En la figura 51 se aprecia el montaje completo con instrumentos de laboratorio y dispositivos.
Figura 51. Montaje de los diferentes dispositivos e instrumentos de laboratorio. 6. Conclusiones
6.1 Evolución del proyecto
Al inicio, se pensaba utilizar el set de instrucciones del microprocesador sintetizable Xilinx PicoBlaze para CPLD, que es de uso abierto [11], por encontrarse amplia literatura explicativa del mismo.
Posteriormente, luego del desarrollo de la unidad ALU y la unidad de registros, se decide construir una propia versión resumida, que demuestre una funcionalidad como microprocesador, y de deja de lado el desarrollar las unidades de control de puertos, memorias externas e interrupciones.
Se retira del título descriptivo la palabra FPGA del anteproyecto y del objetivo general, ya que el resultado final no solamente apuntaba a ser una implementación, en cambio, mostrar que también se implementaron circuitos asíncronos en otros dispositivos de lógica programable.
6.2 Estado Final
Teniendo en cuenta que el diseño de circuitos asíncronos es una disciplina "nueva" en nuestro medio, este proyecto además de buscar demostrar la viabilidad de implementación de sistemas digitales
complejos en dispositivos de lógica programable, también buscó el ser un punto de referencia para futuros desarrollos en el área.
Se aplicaron los conceptos fundamentales para que el sistema funcione correctamente, básicamente aplicando intuición e imaginación en la aplicación del protocolo de comunicación de 4 fases para controlar el uso de la ALU, codificación de datos dos rieles y 1 de 4, aplicación de LUTs en bloques combinatorios y diseño de la unidad ALU, retardos emparejados en la unidad de memoria, principio secuencial One-Hot en el control del procesador.
Se dejaron de lado importantes conceptos, optimización del ciclo de trabajo, pipelining, uso de lenguaje de alto nivel CSP durante el diseño y Petri-nets, y tal vez algunos otros conceptos y teorías que al momento de esta redacción se escapan.
El uso de recursos es relativamente grande, comparado con una implementación típica sincrónica (Se estima que la aplicación del microprocesador sintetizable CPLD Xilinx PicoBlaze ocupe 5%
[referencia 11 y anexo 8].
El uso total del recurso, 25% del dispositivo Xilinx Spartan-6 XC6SLX9 (dispositivo relativamente pequeño) indica que es viable incorporar el microprocesador con otros módulos en una misma FPGA. Se logra desmitificar un microprocesador, que aunque es complejo, afrontado por partes funcionales es sencillo de diseñar e implementar.
El desarrollo de este proyecto requirió 11 meses de trabajo, de una sola persona, a medio tiempo. El consumo de potencia de ejecución, aunque no fué medido, se estima es muy bajo, por tan solo conmutar la lógica que opera en el camino de datos, en control y decodificador sólo opera una vez por ciclo de trabajo cada compuerta. Esta premisa, puede ser opacada por el hecho de utilizar un dispositivo que no está optimizado para la implementación de circuitos asíncronos.
La implementación es dependiente del tipo de dispositivo lógico utilizado, pero por el carácter modular de la implementación, es probable que con cambios mínimos en la declaración del latch transparente y compuertas NCL, con la adaptación de los archivos de configuración, sea posible migrarlo a otras líneas de dispositivos lógicos.
La implementación es satisfactoria, pero no es óptima. Se dejaron de lado optimizaciones a nivel de diseño asíncrono como también en la configuración de la herramienta de síntesis, tanto en los parámetros de implementación como también la ayuda que puede proporcionar el compilador en la síntesis del diseño.
Se lograron los objetivos del proyecto, siendo solo un paso adelante en el entendimiento y
apropiamiento de esta tecnología que está revolucionando el estándar de la industria digital, como lo han demostrado el desarrollo de sistemas digitales en los últimos 10 años, con dispositivos cada vez