22 votos

¿Por qué es preferible el disparo por flancos al disparo por niveles?

Intento entender por qué se prefiere el disparo por flancos al disparo por niveles. En mi libro no se explica claramente. Después de buscar en Internet, he llegado a la conclusión de que el disparo por flancos es insensible a los fallos, mientras que el disparo por niveles es sensible. ¿Qué significa esto?

Tampoco soy capaz de entender lo siguiente: "Si el reloj es sensible al nivel, el nuevo \$Q_n\$ puede precipitarse a través de la red lógica y cambiar la salida. Para evitarlo, necesitamos un impulso corto que capture la salida y la mantenga constante. Pero tal pulso corto no es fácil de crear, por lo tanto optamos por el disparo por flanco. El problema de la realimentación se resuelve porque no hay tiempo suficiente para que la nueva salida corra de vuelta a la entrada dentro de la duración de un solo flanco ascendente".

No entendía por qué la salida no se precipitaba en el disparo por nivel y por qué necesitamos un pulso corto para mantener la salida.

En segundo lugar, el problema de la realimentación, ya que la duración del disparo por nivel es mayor que la del disparo por flanco, en el caso del primero, la salida se realimentaría de nuevo a la entrada y seguiría haciéndolo mientras el reloj estuviera activo. ¿Cuál es el problema de realimentación?

Pero, ¿cómo se resolverá en la activación de bordes? Si el tiempo de subida o bajada es muy corto, ¿cómo podrá propagarse la salida a través de todas las puertas? ¿Es así, una vez que se aplica el disparo por flanco, la salida se propagará a través de todas las puertas y las siguientes entradas se considerarán sólo en el siguiente flanco de reloj?

14voto

Steve Paulo Puntos 8263

Aunque un borde es un momento bien definido en el tiempo, no es cierto decir que el disparo de nivel tampoco tiene un momento bien definido en el tiempo. Lo tiene. Hay un momento bien definido en el tiempo en el que el nivel del reloj cae, las entradas del circuito sincronizado se muestrean y ya no se admiten más cambios en las entradas.

El problema con el disparo por nivel es que mientras el nivel del reloj es alto, las entradas cambian las salidas. En los circuitos que tienen realimentación (las salidas se conectan de nuevo a las entradas) el disparo por nivel provoca el caos, porque el nivel es lo suficientemente amplio (medio ciclo de reloj) como para que la salida pueda realimentar las entradas dentro del mismo periodo.

Así que para cuando se produce el momento bien definido en el que el reloj cae y se supone que cada dispositivo debe instantanearse y mantener su estado hasta el siguiente nivel, ya se ha producido el caos y los circuitos se encuentran en estados impredecibles. Esto es inaceptable. En los circuitos secuenciales, queremos que las salidas producidas en el período de reloj \$t\$ sólo se tendrá en cuenta para calcular los estados del periodo de reloj \$t + 1\$ . También queremos la propiedad agradable que podemos reducir la velocidad el reloj, y que no se rompa el circuito secuencial. En la activación por niveles, ralentizar el reloj juega en nuestra contra. Cuanto más ralenticemos el reloj, más tiempo dejaremos para una retroalimentación sin restricciones.

La primera solución obvia que se nos ocurre es acortar el nivel hasta el punto de que sea imposible que se produzca una realimentación no deseada (y mantener corto el nivel de "encendido", aunque ralenticemos arbitrariamente el periodo del reloj). Supongamos que pulsamos el reloj de 0 a 1 y de vuelta a 0 muy rápidamente, de modo que los dispositivos con reloj aceptan sus entradas, pero las salidas no tienen tiempo suficiente para correr a través del bucle de realimentación para cambiar esas entradas. El problema con esto es que los pulsos estrechos son poco fiables, y básicamente requieren una respuesta que puede ser varios órdenes de magnitud más rápida que la frecuencia del reloj. Podríamos encontrarnos con que necesitamos un pulso de un nanosegundo de ancho, aunque el sistema funcione a sólo 1 Mhz. Entonces nos encontramos con el problema de distribuir impulsos limpios, nítidos y de un ancho de nanosegundo suficiente a través de un bus diseñado para 1 Mhz.

El siguiente paso lógico, entonces, es hacer que los dispositivos generen el impulso estrecho por sí mismos como la derivada temporal del flanco de reloj. Cuando el reloj pasa de un nivel a otro, los propios dispositivos pueden generar internamente un pulso corto que provoque el muestreo de las entradas. No tenemos que distribuir ese pulso por sí mismo a través del bus de reloj.

Así que, al final, puedes considerar que todo se desencadena por niveles. El disparo por flanco es un truco que permite a los dispositivos crear un disparo por nivel muy fino que es más rápido que todos los bucles de realimentación externos, permitiendo a los dispositivos aceptar entradas rápidamente, y luego cerrar la entrada a tiempo antes de que sus salidas cambiantes cambien los valores de las entradas.


También podemos hacer una analogía entre la señal "enable" (reloj disparado por nivel) y una puerta de una embarcación que mantiene la presión del aire. El disparo por nivel es como abrir una puerta, que permite la salida del aire. Sin embargo, podemos construir una esclusa de aire que conste de dos (o más) puertas, que no se abran simultáneamente. Esto es lo que ocurre si dividimos el reloj de nivel en varias fases.

El ejemplo más sencillo es el flip-flop maestro-esclavo . Consiste en dos flip flops D disparados por nivel conectados en cascada. Pero la señal de reloj está invertida, por lo que la entrada de uno está activada mientras que la del otro está desactivada y viceversa. Esto es como una puerta de esclusa. En conjunto, el flip flop nunca está abierto para que la señal pueda pasar libremente. Si tenemos realimentación desde la salida del flip-flop de vuelta a la entrada, no hay problema porque cruza a una fase de reloj diferente. El resultado final es que el flip-flop maestro-esclavo exhibe un comportamiento disparado por flanco. Es útil estudiar el flip-flop maestro-esclavo porque tiene algo que decir sobre la relación entre el disparo por nivel y por flanco.

5voto

Duncan Smart Puntos 9195

Para entender por qué es preferible el disparo por flanco, imagina un sumador de 8 bits conectado a un registro, sumando constantemente 1 al valor del registro, con un pulsador conectado al pin de habilitación del registro.

Si el pin de habilitación del registro es sensible al nivel, entonces el contenido del registro se incrementará constantemente mientras dure la pulsación del botón. El siguiente estado del registro no será determinista para una pulsación dada del botón. Esto se debe a que el sumador puede incrementar el registro muchas veces antes de que puedas retirar el dedo - en otras palabras, la realimentación abandona el registro y vuelve al sumador demasiado rápido.

Si el pin de activación fuera sensible al flanco, el contenido del registro se incrementaría exactamente una vez cada vez que se pulsara el botón, sin importar el tiempo que se mantuviera pulsado (suponiendo que la entrada estuviera correctamente desbobinada). Sería imposible que la salida del registro volviera al sumador a tiempo para cualquier comportamiento no determinista.

3voto

Alex Andronov Puntos 178

El disparo por flanco es bueno para los relojes, porque permite que el valor emitido por un latch en respuesta a un flanco de reloj (por ejemplo, ascendente) se utilice en el cálculo de lo que debe hacer en el siguiente flanco de reloj ascendente. Si se está construyendo un circuito secuencial, como un contador, utilizando una serie de trinquetes activados por flanco, se pueden mezclar arbitrariamente componentes lógicos rápidos y lentos, siempre que, para cada camino posible, el tiempo de propagación menos la cantidad en que el reloj del trinquete receptor se retrasa respecto al del emisor, se garantice que es mayor que el tiempo de espera del receptor, y el tiempo de ciclo más la cantidad en que el reloj del trinquete receptor se retrasa respecto a los emisores, menos el tiempo de propagación, se garantice que es mayor que el tiempo de preparación del receptor.

Por el contrario, construir un circuito para contar pulsos en una sola entrada sin utilizar latches activados por flanco requeriría ciertas garantías sobre las velocidades relativas de algunas partes del circuito. Un enfoque común solía ser convertir una señal de reloj entrante (ClkIn) en un par de señales de reloj no solapadas (Phi1 y Phi2). Phi1 es verdadero cuando ClkIn es alto y ha sido alto durante algún tiempo mínimo garantizado . Phi2 es alto cuando ClkIn es bajo y ha sido baja durante un tiempo mínimo garantizado . Cuando ClkIn pase de bajo a alto, Phi2 pasará a bajo antes de que Phi1 pase a alto; lo mismo ocurrirá cuando pase de alto a bajo. Uno podría construir un contador teniendo dos conjuntos de latches (que llamaré Count1 y Count2). Cada vez que Phi1 es alto, Count1 engancha Count2. Cada vez que Phi2 es alto, Count2 engancha (Count1+1). Si Phi1 y Phi2 subieran a la vez, o con muy poco tiempo entre ellos, el valor del contador se volvería indeterminado, pero siempre que se mantenga la separación adecuada, el contador funcionará muy bien. Los sistemas de dos fases de reloj a menudo tienen una generosa cantidad de separación diseñada; siempre que todo sea lo suficientemente rápido, tal separación puede evitar problemas con la desviación del reloj.

Internamente, muchos latches activados por flanco pueden considerarse como un par de latches maestro/esclavo conectados de forma que el maestro activa la entrada cuando el reloj está en el estado anterior al flanco, y el esclavo activa la entrada del maestro cuando el reloj está en el estado posterior. Las señales que alimentan los dos latches deben tener una relación adecuada, pero si se producen en la misma vecindad que los latches, no es necesario sobredimensionar la separación tanto como sería necesario si las dos fases del reloj se enviaran a través de un área más amplia.

Ten en cuenta que, aunque el disparo por flanco es bueno para los relojes, hay otros fines para los que es menos bueno. A veces es ventajoso para eventos periódicos en interrupciones, siempre que no haya dos eventos que compartan la misma señal disparada por flanco. El disparo por flanco es pésimo para las interrupciones compartidas, y en algunos casos puede ser problemático incluso con las no compartidas, a menos que haya una forma de sondear el estado del cable de interrupción. El disparo por nivel también puede ser ventajoso en casos en los que una señal estroboscópica esté activa en el mismo ciclo que alguna información que deba ser enclavada, pero en los que la información tenga una ruta de cálculo más larga que la estroboscópica. Si la información es algo así como una dirección para un chip de memoria asíncrona, que esté disponible en algún momento durante un ciclo de reloj puede ser mejor que tener que esperar hasta el comienzo del siguiente ciclo de reloj.

2voto

user100808 Puntos 16

Aunque otras respuestas han cubierto casi todo lo que hay que decir sobre su pregunta, para hacerlo más claro he añadido algunos diagramas y una breve explicación.

Imagina que quieres diseñar un circuito que incluya algún tipo de realimentación. Digamos A = A.B (básicamente una puerta AND con realimentación). Si lo implementas usando un simple latch sensible al nivel que almacena el valor de A, tu circuito se verá algo como esto enter image description here

Esto puede crear un problema. Cuando el reloj está alto, el latch se vuelve transparente, y la puerta AND calcula el nuevo valor de A and B . Pero el valor se devuelve al latch, y como el latch sigue siendo transparente (CLK sigue alto), el nuevo valor de A AND B se calcula. Esto es lo que comúnmente se denomina Condición de carrera lo que crea los "glitches" (altos y bajos inesperados en la salida) que mencionas.

Una solución a este problema sería mantener el pulso CLK muy corto, lo suficientemente corto como para que una vez generada la salida de la puerta AND, el latch se desactive antes de que el valor se retropropague a la entrada de nuevo. Debería ser intuitivo ver por qué esto puede ser difícil de lograr. Dependería de la velocidad de conmutación del latch (finalmente, un latch también está hecho de puertas combinacionales), de la longitud del cable y de cientos de parámetros más.

Una segunda opción más factible es utilizar un elemento sensible al flanco (un flip flop en este caso), que es básicamente un par de latches conectados de forma muy inteligente.

enter image description here

Básicamente, cuando el CLK es alta, el latch U1 es transparente, lo que lleva el valor lógico de la entrada A a la salida del latch U1, cuando la señal CLK es LOW, el latch U2 se vuelve transparente, y un nuevo valor de A AND B se calcula. Pero este valor se propagará a la entrada de la puerta AND sólo cuando el latch U1 se vuelva transparente (CLK es HIGH), y en consecuencia el latch U1 se vuelva transparente (CLK es LOW). Lo que equivale básicamente a decir que el circuito es ahora sensible al flanco (el valor de salida cambia sólo en el flanco negativo del reloj).

Esto evita el problema de Condición de carrera explicado anteriormente, y por eso se prefiere el disparo por niveles al disparo por flancos.

1voto

Glenn-- Puntos 116

Como han dicho otros, el límite es un momento muy concreto. Todos sabemos que los circuitos digitales pueden sufrir fallos en los que la salida de una puerta es errónea, ya que sólo unas pocas de sus entradas han llegado a ella, las otras señales están en camino y tardan más debido al camino más largo (la electricidad viaja bastante rápido, pero aún así 3x10^8 m/s tarda un poco de tiempo en recorrer los cables). Si tenemos una unidad de nivel trigerred, su salida se verá afectada por glitches. Al hacer que las cosas se activen por los bordes tenemos una ventana de tiempo muy estrecha en la que "pueden pasar cosas", en otras palabras, el circuito sólo cambiará su estado (los valores en los diferentes cables dentro del circuito, incluyendo la salida) en ciertos instantes bien definidos en el tiempo. Tenga en cuenta la frase "instantes en el tiempo", ya que esto es lo que define el comportamiento de un circuito secuencial formado por flip flops.

A estas alturas no estarás al tanto de algo llamado "análisis de temporización", pero te lo explicaré un poco. Cuando hacemos circuitos digitales, queremos simularlos para ver cómo se comportarán y si este comportamiento se ajusta a lo que queremos que haga. En el análisis de temporización comprobamos si las señales son capaces de llegar a un determinado punto del circuito en el tiempo requerido. Si se retrasan demasiado, el circuito no funcionará correctamente. Al utilizar bloques de circuito activados por flanco en lugar de activados por nivel, el análisis de temporización resulta muy sencillo, ya que sabemos exactamente cuándo pueden suceder las cosas en el circuito. Esto significa que el diseño del circuito también es más fácil. Recuerda que en el mundo real te encontrarás con latches de disparo por nivel muy raramente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X