Ventajas
Contras
Los circuitos QDI se han utilizado para fabricar una gran cantidad de chips de investigación, de los cuales a continuación se presenta una pequeña selección.
El circuito QDI más simple es un oscilador en anillo implementado mediante un ciclo de inversores . Cada compuerta activa dos eventos en su nodo de salida. La red pull-up activa el voltaje del nodo de GND a Vdd o la red pull-down lo hace de VDD a GND. Esto le da al oscilador en anillo seis eventos en total.
Se pueden conectar varios ciclos mediante una compuerta de múltiples entradas. Se puede utilizar un elemento c , que espera a que sus entradas coincidan antes de copiar el valor a su salida, para sincronizar varios ciclos. Si un ciclo llega al elemento c antes que otro, se ve obligado a esperar. La sincronización de tres o más de estos ciclos crea una secuencia que permite que los ciclos se activen uno tras otro.
Si se sabe que los ciclos son mutuamente excluyentes , se pueden conectar mediante lógica combinacional ( AND , OR ). Esto permite que el ciclo activo continúe independientemente de los ciclos inactivos y generalmente se utiliza para implementar codificaciones insensibles a los retrasos .
Para sistemas más grandes, esto es demasiado para administrar. Por lo tanto, se dividen en procesos . Cada proceso describe la interacción entre un conjunto de ciclos agrupados en canales , y el límite del proceso divide estos ciclos en puertos de canal . Cada puerto tiene un conjunto de nodos de solicitud que tienden a codificar datos y nodos de reconocimiento que tienden a no tener datos. El proceso que impulsa la solicitud es el remitente, mientras que el proceso que impulsa el reconocimiento es el receptor . Ahora, el remitente y el receptor se comunican utilizando ciertos protocolos [síntesis 1] y la activación secuencial de acciones de comunicación de un proceso al siguiente se modela como un token que atraviesa la tubería.
El funcionamiento correcto de un circuito QDI requiere que los eventos se limiten a transiciones digitales monótonas . La inestabilidad ( fallo ) o la interferencia ( cortocircuito ) pueden forzar al sistema a estados ilegales que causan resultados incorrectos/inestables, interbloqueo y daño al circuito. La estructura cíclica descrita anteriormente que garantiza la estabilidad se llama reconocimiento . Una transición T1
reconoce a otra T2
si hay una secuencia causal de eventos desde T1
hasta T2
que evita T2
que ocurra hasta T1
que se complete. [timing 1] [timing 2] [timing 3] Para un circuito DI, cada transición debe reconocer cada entrada a su compuerta asociada. Para un circuito QDI, hay algunas excepciones en las que la propiedad de estabilidad se mantiene utilizando suposiciones de temporización garantizadas con restricciones de diseño en lugar de causalidad. [diseño 1]
Una bifurcación isocrónica es una bifurcación de cable en la que un extremo no reconoce la transición que impulsa el cable. Un buen ejemplo de una bifurcación de este tipo se puede encontrar en la implementación estándar de un medio búfer de precarga. Hay dos tipos de bifurcaciones isocrónicas. Una bifurcación isocrónica asimétrica supone que la transición en el extremo que no reconoce ocurre antes o cuando se ha observado la transición en el extremo que reconoce. Una bifurcación isocrónica simétrica asegura que ambos extremos observen la transición simultáneamente. En los circuitos QDI, cada transición que impulsa una bifurcación de cable debe ser reconocida por al menos un extremo de esa bifurcación. Este concepto fue introducido por primera vez por AJ Martin para distinguir entre circuitos asincrónicos que satisfacen los requisitos de QDI y aquellos que no. Martin también estableció que es imposible diseñar sistemas útiles sin incluir al menos algunas bifurcaciones isocrónicas dadas suposiciones razonables sobre los elementos de circuito disponibles. [timing 3] Durante mucho tiempo se pensó que las bifurcaciones isocrónicas eran el compromiso más débil lejos de los sistemas completamente insensibles al retardo.
De hecho, cada compuerta CMOS tiene una o más bifurcaciones isocrónicas internas entre las redes pull-up y pull-down. La red pull-down solo reconoce las transiciones ascendentes de las entradas, mientras que la red pull-up solo reconoce las transiciones descendentes.
La hipótesis de la ruta adversaria también se ocupa de las bifurcaciones de cables, pero en última instancia es más débil que la hipótesis de la bifurcación isocrónica. En algún punto del circuito después de una bifurcación de cables, las dos rutas deben fusionarse nuevamente en una. La ruta adversaria es la que no reconoce la transición en la bifurcación de cables. Esta hipótesis establece que la transición que se propaga por la ruta de reconocimiento alcanza el punto de fusión después de que hubiera descendido por la ruta adversaria. [timing 2] Esto extiende efectivamente la hipótesis de la bifurcación isocrónica más allá de los confines del cable bifurcado y hacia las rutas conectadas de las puertas.
Esta suposición relaja un poco más los requisitos de QDI en la búsqueda del rendimiento. El elemento c es efectivamente tres puertas, la lógica, el controlador y la retroalimentación y no es inversor. Esto se vuelve engorroso y costoso si hay una necesidad de una gran cantidad de lógica. El teorema de reconocimiento establece que el controlador debe reconocer la lógica. La suposición de temporización de medio ciclo supone que el controlador y la retroalimentación se estabilizarán antes de que se permita que las entradas a la lógica cambien. [temporización 4] Esto permite al diseñador usar la salida de la lógica directamente, evitando el controlador y haciendo ciclos más cortos para el procesamiento de frecuencia más alta.
Una gran parte de la literatura sobre síntesis automática utiliza puertas complejas atómicas . Se supone que un árbol de puertas realiza una transición completa antes de que se permita que cualquiera de las entradas en las hojas del árbol cambie nuevamente. [timing 5] [timing 6] Si bien esta suposición permite que las herramientas de síntesis automática eviten el problema de la reorganización de burbujas, la confiabilidad de estas puertas tiende a ser difícil de garantizar.
Relative Timing es un marco para realizar e implementar suposiciones de tiempo arbitrarias en circuitos QDI. Representa una suposición de tiempo como un arco de causalidad virtual para completar un ciclo roto en el gráfico de eventos. Esto permite a los diseñadores razonar sobre las suposiciones de tiempo como un método para realizar circuitos con mayor rendimiento y eficiencia energética sacrificando sistemáticamente la robustez. [timing 7] [timing 8]
Los procesos de hardware comunicantes (CHP) son una notación de programa para circuitos QDI inspirada en los procesos secuenciales comunicantes (CSP) de Tony Hoare y los comandos guardados de Edsger W. Dijkstra . La sintaxis se describe a continuación en orden de precedencia descendente. [síntesis 2]
skip
no hace nada. Simplemente actúa como un marcador de posición para las condiciones de paso.a+
establece el voltaje del nodo a
en Vdd mientras que a-
establece el voltaje a
en GND.a := e
evalúa la expresión e
y luego asigna el valor resultante a la variable a
.X!e
evalúa la expresión e
y luego envía el valor resultante a través del canal X
. X!
Es un envío sin datos.X?a
espera hasta que haya un valor válido en el canal X
y luego asigna ese valor a la variable a
. X?
Es una recepción sin datos.#X
devuelve el valor que espera en el canal X
sin ejecutar la recepción.S * T
ejecuta los fragmentos del proceso S
y T
al mismo tiempo.S, T
ejecuta los fragmentos del proceso S
y T
en cualquier orden.S; T
ejecuta los fragmentos del proceso S
seguidos de T
.S || T
ejecuta los fragmentos del proceso S
en T
cualquier orden. Funcionalmente, esto es equivalente a la composición paralela interna, pero con menor precedencia.[G0 -> S0[]G1 -> S1[]...[]Gn -> Sn]
implementa la elección en la que G0,G1,...,Gn
hay guardias que son expresiones booleanas sin datos o expresiones de datos que se convierten implícitamente mediante una verificación de validez y S0,S1,...,Sn
son fragmentos de proceso . La selección determinista espera hasta que uno de los guardias se evalúa como Vdd y luego procede a ejecutar el fragmento de proceso asociado al guardia . Si dos guardias se evalúan como Vdd durante el mismo período de tiempo, se produce un error. [G]
es una forma abreviada de [G -> skip]
y simplemente implementa una espera.[G0 -> S0:G1 -> S1:...:Gn -> Sn]
es igual a la selección determinista, excepto que se permite que más de un protector evalúe Vdd. Solo se ejecuta el fragmento de proceso asociado con el primer protector que evalúa Vdd.*[G0 -> S0[]G1 -> S1[]...[]Gn -> Sn]
o *[G0 -> S0:G1 -> S1:...:Gn -> Sn]
es similar a las declaraciones de selección asociadas excepto que la acción se repite mientras cualquier guardia evalúa a Vdd. *[S]
es una abreviatura de *[Vdd -> S]
e implementa la repetición infinita.Las expansiones de handshaking son un subconjunto de CHP en el que los protocolos de canal se expanden en guardas y asignaciones y solo se permiten operadores sin datos. Esta es una representación intermedia hacia la síntesis de circuitos QDI.
Una red de Petri (PN) es un gráfico bipartito de lugares y transiciones que se utiliza como modelo para circuitos QDI. Las transiciones en la red de Petri representan transiciones de voltaje en los nodos del circuito. Los lugares representan los estados parciales entre transiciones. Un token dentro de un lugar actúa como un contador de programa que identifica el estado actual del sistema y pueden existir múltiples tokens en una red de Petri simultáneamente. Sin embargo, para los circuitos QDI, múltiples tokens en el mismo lugar es un error.
Cuando una transición tiene tokens en cada lugar de entrada, esa transición se habilita. Cuando se activa la transición, los tokens se eliminan de los lugares de entrada y se crean nuevos tokens en todos los lugares de salida. Esto significa que una transición que tiene múltiples lugares de salida es una división paralela y una transición con múltiples lugares de entrada es una fusión paralela. Si un lugar tiene múltiples transiciones de salida, entonces cualquiera de esas transiciones podría activarse. Sin embargo, al hacerlo, se eliminaría el token del lugar y se evitaría que se active cualquier otra transición. Esto implementa efectivamente la elección. Por lo tanto, un lugar con múltiples transiciones de salida es una división condicional y un lugar con múltiples transiciones de entrada es una fusión condicional.
Los sistemas de reglas de eventos (ER) utilizan una notación similar para implementar un subconjunto restringido de la funcionalidad de la red de Petri en el que hay transiciones y arcos, pero no lugares. Esto significa que el sistema ER de referencia carece de opciones, como las implementadas por divisiones y fusiones condicionales en una red de Petri, y de disyunción implementada por fusiones condicionales. El sistema ER de referencia tampoco permite la retroalimentación.
Mientras que las redes de Petri se utilizan para modelar la lógica del circuito, un sistema ER modela el tiempo y el rastro de ejecución del circuito, registrando los retrasos y las dependencias de cada transición. Esto se utiliza generalmente para determinar qué puertas deben ser más rápidas y cuáles pueden ser más lentas, optimizando el tamaño de los dispositivos en el sistema. [Dimensionamiento 1]
Los sistemas de reglas de eventos repetitivos (RER) agregan retroalimentación al doblar la traza sobre sí misma, marcando el punto de pliegue con una marca de verificación. [dimensionamiento 1] Los sistemas de reglas de eventos extendidos (XER) agregan disyunción. [dimensionamiento 2]
Una regla de producción especifica la red pull-up o pull-down de una compuerta en un circuito QDI y sigue la sintaxis G -> S
en la que G
es una protección como se describió anteriormente y S
es una o más asignaciones sin datos en paralelo como se describió anteriormente. En los estados no cubiertos por las protecciones, se supone que los nodos asignados permanecen en sus estados anteriores. Esto se puede lograr utilizando un estatizador de retroalimentación débil o combinacional (mostrado en rojo). El ejemplo más básico es el elemento C en el que las protecciones no cubren los estados donde A
y B
no tienen el mismo valor.
Existen muchas técnicas para construir circuitos QDI, pero generalmente se pueden clasificar en dos estrategias.
La síntesis formal fue introducida por Alain Martin en 1991. [síntesis 2] El método implica realizar transformaciones sucesivas del programa que han demostrado mantener la corrección del programa. El objetivo de estas transformaciones es convertir el programa secuencial original en un conjunto paralelo de procesos comunicantes, cada uno de los cuales se corresponde bien con una única etapa de la cadena de producción. Las posibles transformaciones incluyen:
Una vez que el programa se descompone en un conjunto de pequeños procesos de comunicación, se expande en expansiones de apretón de manos (HSE) . Las acciones del canal se expanden en sus protocolos constituyentes y los operadores de múltiples bits se expanden en sus implementaciones de circuito. Luego, estos HSE se reorganizan para optimizar la implementación del circuito al reducir el número de dependencias. [síntesis 5] Una vez que se decide la reorganización, se agregan variables de estado para desambiguar los estados del circuito para una codificación de estado completa . [síntesis 6] A continuación, se derivan guardas mínimas para cada asignación de señal, lo que produce reglas de producción. Hay varios métodos para hacer esto, incluido el fortalecimiento de la guarda , el debilitamiento de la guarda y otros. [síntesis 2] Las reglas de producción no son necesariamente implementables en CMOS en este punto, por lo que la reorganización de burbuja mueve las inversiones de señal alrededor del circuito en un intento de hacerlo. Sin embargo, no se garantiza que la reorganización de burbuja tenga éxito. Aquí es donde las puertas complejas atómicas se usan generalmente en programas de síntesis automatizados.
La segunda estrategia, la traducción dirigida por sintaxis , fue introducida por primera vez en 1988 por Steven Burns. Esta busca un enfoque más simple a expensas del rendimiento del circuito al asignar cada sintaxis CHP a una plantilla de circuito compilada a mano. [síntesis 7] La síntesis de un circuito QDI utilizando este método implementa estrictamente el flujo de control según lo dictado por el programa. Esto fue adoptado más tarde por Philips Research Laboratories en su implementación de Tangram. A diferencia del enfoque de Steven Burns que utiliza plantillas de circuitos, Tangram asignaba la sintaxis a un conjunto estricto de celdas estándar, lo que facilitaba tanto el diseño como la síntesis. [síntesis 8]
Un enfoque híbrido introducido por Andrew Lines en 1998 transforma la especificación secuencial en especificaciones paralelas como en la síntesis formal, pero luego utiliza plantillas de canalización predefinidas para implementar esos procesos paralelos similares a la traducción dirigida por sintaxis. [síntesis 9] Lines describió tres familias lógicas eficientes o reorganizaciones .
El medio búfer de condición débil (WCHB) es la más simple y rápida de las familias lógicas con un ciclo de canalización de transición de 10 (o 6 utilizando el supuesto de temporización de medio ciclo). Sin embargo, también está limitado a cálculos más simples porque los cálculos más complejos tienden a necesitar largas cadenas de transistores en la red pull-up del controlador directo. Los cálculos más complejos generalmente se pueden dividir en etapas más simples o manejar directamente con una de las familias de precarga. El WCHB es un medio búfer, lo que significa que una canalización de N
etapas puede contener como máximo N/2
tokens a la vez. Esto se debe a que el restablecimiento de la solicitud de salida Rr
debe esperar hasta después del restablecimiento de la entrada Lr
.
El medio buffer de precarga (PCHB) utiliza lógica dominó para implementar una etapa de procesamiento computacional más compleja. Esto elimina el problema de la red pull-up larga, pero también introduce una bifurcación isocrónica en los datos de entrada que debe resolverse más adelante en el ciclo. Esto hace que el ciclo del procesamiento tenga una duración de 14 transiciones (o 10 utilizando el supuesto de tiempo de medio ciclo).
Los buffers llenos de precarga (PCFB) son muy similares a los PCHB, pero ajustan la fase de reinicio de la reorganización para implementar el almacenamiento en buffer completo. Esto significa que una secuencia de N
etapas PCFB puede contener como máximo N
tokens a la vez. Esto se debe a que se permite que el reinicio de la solicitud de salida Rr
ocurra antes del reinicio de la entrada Lr
.
Junto con las técnicas de verificación normales de pruebas, cobertura, etc., los circuitos QDI pueden verificarse formalmente invirtiendo el procedimiento de síntesis formal para derivar una especificación CHP del circuito. Esta especificación CHP puede luego compararse con la original para comprobar su exactitud. [verificación 1] [verificación 2]