Buscar este blog

sábado, 29 de noviembre de 2014

La tecnología detrás de DK

  • Introducción.

Handel-C [1] es un lenguaje de programación síncrono donde la noción del tiempo es fundamental. La construcción de circuitos síncronos usa relojes globales que continuamente ofrecen ticks. El lenguaje es similar en abstracción a RTL (Register Transfer Language) y se inclina hacia un estilo de programación del comportamiento en lugar de un lenguaje de descripción de hardware estructural tal como VHDL.
Handel-C capta los programas a un nivel de transformaciones simples en los datos y la circulación de los mismos entre variables (registros). El paralelismo puede ser definido explícitamente. La semántica del lenguaje está basada sobre Occam/CSP [2,3] y la sintaxis se basa en lenguaje C [4].

  • La ruta de datos.


Todas las variables en el programa de usuario son mapeadas a registros en hardware. Estos se construyen a partir de conjuntos de flip-flop. La arquitectura exacta de los flip-flop es específica de cada dispositivo destino. Un flip-flop básico de tipo D es mostrado en la figura 1. Un flipflop se construye para cada bit de una variable de programa. Cada franco ascendente del reloj se copia el valor de entrada D hacia el flip-flop, el estado actual del flip-flop se emite de forma continua a Q. Los relojes globales son usados para activar todos los flip-flops conectados a ese reloj al mismo tiempo como una acción atómica.

Figura 1

Los registros tienen multiplexores de entrada si tienen múltiples fuentes, por ejemplo, si son objeto de una asignación o comunicación en el programa Handel-C. Los circuitos de control en las declaraciones del programa generan las señales de control del multiplexor y la habilitación de las señales de reloj para los registros de destino. Todas las expresiones son implementadas con lógica combinacional. La ruta de los datos generada por esta estrategia coincide exactamente con el flujo de datos del programa original del usuario.

  • La ruta de control.

         En los circuitos de control siguientes la caja con un triángulo en la esquina superior izquierda se utiliza para referirse a una sola instancia de un circuito de control. El enlace de control se realiza mediante una sola entrada y una sola salida para cada circuito de control.

         El circuito de control para una construcción de retardo (delay) es mostrado en la figura 2. Esta construcción no tiene ningún efecto sobre el estado de la computación. Se tarda exactamente 1 ciclo de reloj para completar.

         El circuito de control para la instrucción de asignación R = exp; se muestra en la figura 3. La señal de arranque se forma por la señal de reloj CLK y la señal de habilitación CE para la correcta asignación del registro. Al final del ciclo en el que está prevista la asignación de la expresión de hardware se ha calculado el nuevo valor y este pasara al registro destino. La señal de arranque se retrasa por un solo ciclo de reloj para proporcionar la señal de finalización para este procedimiento de control. Esto se deduce del hecho de que la asignación siempre está programada inmediatamente y siempre se completa en exactamente un ciclo de reloj. Generalmente asignaciones Handel-C son libres por diseño de bucle. Se crea lógica combinacional suficiente para llevar a cabo la asignación en un ciclo de reloj incluso si la expresión es compleja. Un método para la refinación de programas en Handel-C es dividir las tareas complejas de expresiones para evaluarlas a través de múltiples ciclos de reloj.

El circuito de la figura 4 muestra la parte de la ruta de los datos generada por dos instrucciones de asignación R = Exp1; R = Exp2; que tienen como objetivo el mismo registro. Una señal de arranque dirige la expresión del valor apropiado por medio del multiplexor de la entrada del registro destino. El multiplexor es un solo disparo con una habilitación para cada línea de datos. De igual manera sea cual sea el inicio de la señal esta es activada hacia el destino vía compuerta OR.



         El circuito de control para la ejecución secuencial de estados es trivialmente sencillo. Las señales de salida y llegada de los procesos están conectadas entre sí en una conexión en cadena como se muestra en la figura 5. La estrategia de control es básicamente el de una codificación del estado de control “one-hot” modificado. Este esquema particular es muy adecuado para las implementaciones FPGA ya que requieren pocos recursos de cableado y de lógica, en comparación con las representaciones codificadas de estado de control. De hecho, el compilador puede tomar ventaja de la arquitectura específica, tales como registros de desplazamiento para optimizar aún más su aplicación.


En la figura 6 se muestra la construcción de un control utilizado para la ejecución en paralelo de los estados par{S1; S2;… Sn } ; Este circuito pasa el control al mismo tiempo a todas las declaraciones paralelas S1, S2, … Sn para que inicien su ejecución. El constructor par{} termina solo cuando todos los componentes constituyentes han terminado. Así, el circuito de control en paralelo recoge las señales de finalización en un conjunto de flip-flops y produce su propia señal de acabado tan pronto como se genera la última señal de los estados paralelos. Además, esta señal reestablece la sincronización de los flip-flops y que estén listos para la próxima vez que se utilicen en el circuito.
Las composiciones paralelas y secuenciales pueden ser anidadas arbitrariamente.


[1] Handel-C Language Reference Manual.
[2] C.A.R. Hoare, Communicating Sequential Processes, International Series in Computer Science, Prentice-Hall, 1985.
[3] Inmos, The occam2 Programming Manual, Prentice-Hall,1988.
[4] B.W. Kernigham and D.M. Ritchie, The C Programming Language, Prentice-Hall,1988.





No hay comentarios.:

Publicar un comentario