Exponsor

CURSO TÉCNICO INSTALADOR DE ENERGÍA SOLAR TÉRMICA

Visita el siguiente enlace: http://enersolartermica.blogspot.com.es/ ¡No pierdas esta magnifica oportunidad de poder formarte en esta profesión con gran demanda de empleo! Ahora por oferta de lanzamiento y por tiempo limitado puedes adquirir este curso por solo 9,95€, cuando su valor de mercado es de 49€.

sábado, 28 de marzo de 2009

PROBLEMAS RESUELTOS SOBRE CONTADORES , FLIP-FLOP (J-K): PARTE 3ª

PROBLEMA: La siguiente tabla de secuencias dá la impresión de pertenecer a un contador de peso 1-1'-2-5. Confirmar si esto es cierto.



A continuación calculamos el número decimal equivalente producido por este contador según el peso asignado a cada flip-flop J-K:



El contador proporcionado no puede ser un contador con peso 1-1'-2-5, ya que en el orden en el cual ocurren las transiciones estas no dan un total que asciende continuamente de uno en uno. Después de 6 unidades acumuladas el conteo salta hasta 8, regresa a 7 y salta hasta 9, como se ha destacado en números rojos en la última tabla.


PROBLEMA: Construír una tabla de secuencias para un contador con peso 1-1'-3-6.

La especificación proporcionada requiere del uso de cuatro flip-flops J-K, cada uno con salidas Q1, Q1', Q3 y Q6 respectivamente especificadas según el peso que se le va a dar a cada combinación. La tabla de secuencias que requiere un circuito de esta naturaleza es la siguiente:




PROBLEMA
: Construír una tabla de secuencias para un contador con peso 1-2-2'-4.

Empezando, como siempre, con el estado "0000", y yendo hacia arriba en conteo ascendente, la tabla de secuencias deberá ser como la que se muestra a continuación:



Puesto que este contador recorre 10 estados diferentes antes de regresar a la condición original Q1Q2Q2'Q4=0000, se puede utilizar como un contador decimal.


PROBLEMA: Encontrar el peso de un contador (o, lo que es lo mismo, determinar los pesos A, B, C y D de los flip-flops con los que está construído) cuya tabla de secuencias es la siguiente:



Podemos determinar el peso de este contador con la ayuda de la siguiente tabla:



La metodología para la construcción de esta tabla es que para la determinación del peso de cada uno de los flip-flops del contador hay que seguir paso a paso cada uno de sus estados, asignándole un peso numérico a cada flip-flop según se vaya requiriendo, con la asignación acumulativa yendo de la izquierda hacia la derecha en la tabla.

Al inicio, con todos los flip-flops en el estado "0", no hay ninguna contribución de ellos al peso numérico del contador, el cual se puede decir que se encuentra en el estado cero.

Cuando el contador ha salido del estado "0000" y ha pasado al estado "1000", como el conteo debe ser siempre ascendente esto significa que tenemos que darle al primer flip-flop un peso numérico de 1, lo cual es puesto en la columna "Conclusión" dándole a A el peso A=1.

Cuando el contador pasa del estado "1000" al estado "0100", si hemos de mantener la cuenta decimal ascendente esto significa que tenemos que darle al segundo flip-flop un peso numérico de 2. Cada vez que se "encienda" el segundo flip-flop con un "1" contribuirá un peso numérico de 2, lo cual es puesto en la columna "Conclusión" dándole a B el peso B=2.

Cuando el contador pasa del estado "0100" al estado "1100", el conteo decimal acumulativo es 3, porque cada uno de los dos primeros flip-flops contribuye con un peso numérico de 1 y de 2, respectivamente, o sea que 1+2=3.

Cuando el contador pasa del estado "1100" al estado "1010", puesto que el número decimal que sigue debe ser 4 y el primer flip-flop ya está contribuyendo con un peso numérico de 1, esto significa que el tercer flip-flop necesariamente debe tener un peso numérico de 3, lo cual es puesto en la columna "Conclusión" dándole a C el peso C=3.

Procediendo de la misma manera, concluímos que el cuarto flip-flop también tiene que tener un peso numérico de 3 al igual que el tercer flip-flip, lo cual es puesto en la columna "Conclusión" dándole a D el peso D=3. Entonces el contador tiene un peso de 1-2-3-3', en donde ponemos la comilla en el cuarto elemento para distinguirlo del tercer elemento que también tiene el mismo peso numérico.


PROBLEMA: El Glitch. Obtener la salida obtenida por la siguiente configuración bajo un tren simétrico de pulsos en la terminal de entrada C. Suponiendo que cada elemento lógico introduce un pequeño retardo de tiempo, ¿qué diferencia habrá entre la salida actual y la salida calculada inicialmente? (Sugerencia: Ignorar el retardo de tiempo introducido por el bloque NOR, el cual es irrelevante para lo que se descubrirá en este problema.)




Puesto que se están usando las salidas QA y QB, es conveniente suponer que la configuración está inicialmente en el estado QAQB=00. Empezando con esta suposición y trabajando sobre el diagrama esquemático del circuito, encontramos que los estados del mismo en las transiciones que se llevan a cabo ocurren en el siguiente orden:

Primera transición: El estado es QAQB=10.

Segunda transición: El estado es QAQB=01.

Tercera transición: El estado es QAQB=11.

Cuarta transición: El estado es QAQB=00.

A la cuarta transición el circuito regresa a su estado original QAQB=00, de modo que no es necesario continuar con el análisis.

El siguiente paso es construír una tabla de secuencias usando la información obtenida:



A continuación se muestra el diagrama de tiempos para esta secuencia (el diagrama en el primer renglón corresponde a la entrada de los pulsos de "reloj", el segundo renglón corresponde a la salida QA, el tercer renglón corresponde a la salida QB y el cuarto renglón corresponde a la salida del NOR):



Considerando que cada elemento lógico introduce un pequeño retardo de tiempo (el flip-flop A con respecto a la señal de entrada y el flip-flop B con respecto a la señal que le está siendo puesta por el flip-flop A), el diagrama de tiempos actual será como sigue ignorando el retardo de tiempo introducido por el propio bloque NOR (obsérvese el desfase entre QA y QB y la consecuencia del desfase entre estas señales al entrar al NOR, considerando que cuando ambas entradas a un NOR son "0" la salida del NOR se vuelve "1"):



Comparando la salida actual con la salida esperada idealmente, se puede apreciar la presencia de unos "picos" (encuadrados en línea roja) que no aparecían en el cálculo original. Cada "pico" se conoce como un glitch. Puesto que todos los circuitos lógicos en existencia poseen un retardo de tiempo inherente en su construcción, existen innumerables diseños que irremediablemente producirán glitches. La forma de determinar si un diseño puede producir glitches o no es seguir el método utilizado en este problema, que consiste en obtener el diagrama de tiempos para dicho diseño y luego aplicar los retardos de tiempo señalados en las hojas de las especificaciones técnicas para los elementos usados en el diseño. Cualquier posibilidad de glitch aparecerá inmediatamente de esta manera.

Si un diseño produce glitches, existen varias alternativas para remediar el problema, entre las cuales está utilizar otro tipo de diseño (los circuitos secuenciales síncronos en general tienen menos posibilidades de padecer este tipo de problema que los circuitos secuenciales asíncronos) o introducir retardos de tiempo donde sea necesario para eliminar los glitches. Naturalmente, si todo está bajo el control de un "reloj maestro", siempre es posible usar dicho control para esperar el tiempo suficiente para que los glitches hayan desaparecido al estabilizarse el sistema en cierto estado.


PROBLEMA: Dado el siguiente contador, contestar las preguntas que se dan:



1) ¿Cuál es el módulo del contador?

2) ¿Cuál es el peso del contador?

Empezamos suponiendo que la configuración está inicialmente en el estado Q1Q2Q3Q4=0000. Trabajando sobre el diagrama del circuito, encontramos que los estados después de cada una de las transiciones que cambian al estado del contador son:

Primera transición: El estado es Q1Q2Q3Q4=1000.

Segunda transición: El estado es Q1Q2Q3Q4=0100.

Tercera transición: El estado es Q1Q2Q3Q4=1100.

Cuarta transición: El estado es Q1Q2Q3Q4=0110.

Quinta transición: El estado es Q1Q2Q3Q4=1110.

Sexta transición: El estado es Q1Q2Q3Q4=0101.

Séptima transición: El estado es Q1Q2Q3Q4=1101.

Octava transición: El estado es Q1Q2Q3Q4=0111.

Novena transición: El estado es Q1Q2Q3Q4=1111.

Décima transición: El estado es Q1Q2Q3Q4=0000.

Puesto que el contador recorre diez estados diferentes para regresar a la condición inicial, es un contador módulo-10.

Procedemos ahora a determinar el peso del contador:



Para la determinación del peso, seguimos paso a paso cada estado del contador, asignándole un peso numérico a cada flip-flop según se vaya requiriendo, con la asignación acumulativa yendo de la izquierda hacia la derecha.

Al inicio, con todos los flip-flops en el estado "0", no hay ninguna contribución al peso numérico del contador, el cual se puede decir que se encuentra en el estado cero.

Cuando el contador ha salido del estado "0000" pasa al estado "1000", y como el conteo debe ser decimal ascendente, esto significa que tenemos que darle al primer flip-flop un peso numérico de 1, lo cual es puesto en la columna "Conclusión".

Cuando el contador pasa del estado "1000" al estado "0100", si hemos de mantener la cuenta decimal ascendente esto significa que tenemos que darle al segundo flip-flop un peso numérico de 2. Cada vez que se "encienda" el segundo flip-flop con un "1" contribuirá un peso numérico de 2, lo cual es puesto en la columna "Conclusión".

Cuando el contador pasa del estado "0100" al estado "1100", el conteo decimal acumulativo es 3, porque cada uno de los dos primeros flip-flops contribuye con un peso numérico de 1 y de 2, respectivamente, o sea que 1+2=3.

Cuando el contador pasa del estado "1100" al estado "0110", puesto que el número decimal que sigue debe ser 4, y el segundo flip-flop ya está contribuyendo con un peso numérico de 2, esto significa que el tercer flip-flop necesariamente debe tener también un peso numérico de 2.

Procediendo de la misma manera, concluímos que el cuarto flip-flop debe tener un peso numérico de 4.

Entonces, el peso del contador es 1-2-2'-4.

Estudiando el contador, se nota que está compuesto por dos secciones. La primera es básicamente un contador módulo-2 (o contador binario) realizada por el primer flip-flop. La segunda que le sigue es básicamente un contador módulo-5 (o contador quinario) realizada por los siguientes tres flip-flops. Por lo tanto, este contador recibe el nombre de contador bi-quinario y su importancia radica en que es un contador base 10 o base decimal.


PROBLEMA: El Bucket Brigade. Analizar el siguiente circuito construyendo una tabla de secuencias para el mismo. Supóngase que al empezar el circuito está en el estado Q1Q2Q3Q4=1000. (Obsérvese que, en contra de lo acostumbrado en los circuitos lógicos anteriores, estamos usando la salida complementaria del primer flip-flop y no su salida normal Q) ¿Cuál es el módulo de este contador?



Siendo la condición inicial Q1Q2Q3Q4=01000, los estados sucesivos después de cada transición serán los siguientes:

Primera transición: El estado es Q1Q2Q3Q4=0100.

Segunda transición: El estado es Q1Q2Q3Q4=0010.

Tercera transición: El estado es Q1Q2Q3Q4=0001.

Cuarta transición: El estado es Q1Q2Q3Q4=1000.

La tabla de secuencias que resume el comportamiento del circuito es la siguiente:



Puesto que el contador recorre cuatro estados diferentes para así regresar a la condición inicial, es un contador módulo-4. Todos los elementos de esta configuración (con la excepción del primero, el cual está "invertido" en sus conexiones con respecto a los demás) están conectados de igual manera. Esto sugiere que se puede construír un contador módulo-N cualesquiera utilizando un número N de flip-flops para construírlo bajo esta configuración, aunque la salida del circuito no será simétrica. Nótese que el Bucket Brigade se puede usar como un contador de anillo.

El nombre "Bucket Brigade" deviene del significado de la palabra inglesa "bucket" que significa "cubeta", o sea, "la brigada de la cubeta", en referencia a una cubeta de agua que se iban pasando los miembros de la brigada del uno al otro haciéndola de bomberos para tratar de apagar un incendio, excepto que aquí la "cubeta" es un "1" lógico.


PROBLEMA: Diseñar, empleando el método que sea, un contador que produzca la siguiente secuencia:



Puesto que cada uno de los estados mostrado por la tabla de secuencias es diferente, no habiendo un estado igual a otro, este problema se presta a su resolución retroalimentando la salida de una memoria ROM a su entrada, de modo tal que cada estado contenido en cualquier domicilio sea a su vez el domicilio del ROM que contenga el siguiente domicilio que la vez será el siguiente estado del contador.

De la tabla de secuencias podemos primeramente construír la tabla requerida de la memoria ROM:



Esta es la especificación del ROM. Podemos acomodar los valores en la forma acostumbrada, con los domicilios en orden binario ascendente:



Con esto tenemos todo lo necesario para "quemar" un ROM y construír, agregando una compuerta de flip-flops D, el circuito secuencial deseado.


PROBLEMA: Diseñar, empleando el método que sea, un contador que produzca la siguiente secuencia:



Aunque a primera vista pueda resultar tentador recurrir a la técnica de emplear un ROM en el cual cada estado sea el domicilio del ROM que contenga el siguiente domicilio que la vez sea el siguiente estado del contador, una inspección detallada de la tabla de secuencias revela que esto no será posible, ya que del segundo renglón que además de ser el estado "000" correspondería al domicilio "000" en donde tenemos el siguiente estado "010" (que a su vez sería el domicilio del siguiente estado) se contraviene con el séptimo renglón en el cual se le pide al domicilio "000" apuntar a otro estado, hacia el estado "001". En pocas palabras, se le pediría al mismo domicilio del ROM apuntar hacia dos domicilios diferentes, y esto es algo que el ROM no puede hacer. Esto nos lleva a considerar utilizar un contador binario ascendente conectando sus salidas hacia un circuito lógico combinatorio o hacia un ROM. Lo haremos primero tratando de conectar las salidas del contador binario hacia un circuito combinatorio. Con esto, estamos requiriendo hacer la siguiente conversión de una secuencia binaria a una secuencia prefijada de antemano:



Esto es relativamente fácil de lograr mediante una red de lógica combinatoria que transforme los estados de la secuencia binaria en los estados de la secuencia dada. Cada valor requerido para formar la secuencia deseada se puede obtener a través de los minterms producidos por los estados de la secuencia binaria como se muestra a continuación (obsérvese que a estas alturas estamos hablando ya no de una tabla de secuencias sino en realidad de tres Tablas de Verdad diferentes):



Para Q'1 tenemos, usando minterms:

Q'1 = Q1Q2Q3 + Q1Q2Q3

Q'1 = Q1Q2(Q3 + Q3)

Q'1 = Q1Q2

Q'1 = (Q1 + Q2)'

Esta es una función NOR (obsérvese el uso de la notación alterna al final para indicar el inverso).

Q'2 = Q1Q2Q3 + Q1Q2Q3 + Q1Q2Q3 + Q1Q2Q3

Q'2 = (Q1 + Q1)Q2Q3 + (Q1 + Q1)Q2Q3

Q'2 = Q2Q3 + Q2Q3

Esta es una función OR-EXCLUSIVO.

Q'3 = Q1Q2Q3 + Q1Q2Q3

Q'3 = Q1Q3(Q2 + Q2)

Q'3 = Q1Q3

Esta es una función AND.

El diagrama del contador se muestra a continuación:




PROBLEMA: ¿Cuántos estados denegados tiene un Bucket Brigade de 4 bits? ¿De n bits? ¿De 5 bits? ¿De 6 bits?

Comparamos primero la secuencia natural del Bucket Brigade de 4 bits:



con todos sus estados posibles:



Podemos ver que hay doce posibles estados denegados. Conociendo la forma en la cual trabaja el Bucket Brigade, observamos que no hay ninguna manera en la cual se pueda "sacar" por sí solo de cualquiera de los doce posibles estados denegados. Concluímos pues que un Bucket Brigade de 4 bits tendrá doce estados denegados.

En general, un Bucket Brigade de n bits tendrá una secuencia natural de n estados, esto de un total de 2n estados posibles. Tendrá por lo tanto 2n-n estados denegados.

Sobre esta fórmula general, un Bucket Brigade de 5 bits tendrá 25-5 = 27 estados denegados.

Del mismo modo, un Bucket Brigade de 6 bits tendrá 26-6 = 58 estados denegados.


PROBLEMA: Analizar el siguiente contador.



Suponiendo que el contador está inicialmente en la condición Q1Q2Q3Q4=0000 al empezar, observamos al trabajar sobre el diagrama en cada etapa lo siguiente:

Primera transición: El estado es Q1Q2Q3Q4=1000.

Segunda transición: El estado es Q1Q2Q3Q4=0100.

Tercera transición: El estado es Q1Q2Q3Q4=1100.

Cuarta transición: El estado es Q1Q2Q3Q4=0010.

Quinta transición: El estado es Q1Q2Q3Q4=1010.

Sexta transición: El estado es Q1Q2Q3Q4=0110.

Séptima transición: El estado es Q1Q2Q3Q4=1110.

Octava transición: El estado es Q1Q2Q3Q4=0001.

Novena transición: El estado es Q1Q2Q3Q4=1001.

Décima transición: El estado es Q1Q2Q3Q4=0000.

La secuencia nos revela inmediatamente que este es un contador binario decimal con peso 1-2-4-8; esto es, un contador binario BCD.

Este tipo de contador desempeña un papel vital en el uso práctico de los circuitos lógicos, ya que nos permite contar en el sistema decimal usando una secuencia binaria. Si a la terminal "reloj" la designamos "contar" y a la terminal de "salida" la designamos "llevar", funcionalmente el circuito presentará el siguiente aspecto:



Si conectamos las salidas del contador binario BCD a un indicador luminoso de siete segmentos mediante un decodificador, tendremos una unidad de conteo digital decimal:



Esta unidad es el bloque fundamental de los contadores electrónicos usados en las carátulas digitales de los televisores, de los hornos de microondas, de los relojes despertadores, de los sintonizadores de radio, en fin, las aplicaciones son inagotables.

Para construír un contador de 3 dígitos decimales, por ejemplo, basta con conectar tres unidades como la de arriba en serie. La terminal "llevar" de la primera unidad se conecta a la terminal "contar" de la segunda unidad y la terminal "llevar" de la segunda unidad se conecta a la terminal "contar" de la tercera unidad. La terminal "llevar" de la tercera unidad se puede utilizar para indicar un sobreflujo S. Tomando en cuenta que un conteo ascendente procede de derecha a izquierda, el contador aparecerá de la siguiente manera:



La terminal de sobreflujo se puede utilizar para "limpiar" el contador además de indicar la presencia del mismo sobreflujo.

Un diseño de este tipo no sería muy útil en la práctica porque este contador es asíncrono, los flip-flops J-K que lo componen no son activados simultáneamente por la misma señal de "reloj", y por lo tanto no es el circuito más rápido posible. Se puede modificar este diseño para convertirlo en un contador binario BCD síncrono. Y se puede refinar aún más para convertirlo en un contador que no sólo sea capaz de contar "hacia arriba" (up counter) sino también hacia abajo (down counter). Como puede suponerse, el diseño final de algo como lo último resultará algo elaborado. Afortunadamente, no es necesario esforzarse en un proyecto de esta naturaleza, ya que es posible adquirir en el mercado a un precio sumamente bajo un circuito integrado que tenga todas estas virtudes, como el 4510:



en el cual las salidas BCD Q1, Q2, Q4 y Q8 aparecen en las terminales 6, 11, 14 y 2, respectivamente, con la terminal de "contar" (reloj) en la terminal 15 y la terminal de "llevar" (Carry Out) en la terminal 7. El conteo será ascendente si la terminal 10 (Up/Down) tiene puesto un "cero" y será descendente si tiene puesto un "1". El contador se puede "cargar" con un número predeterminado a través de las terminales 4, 12, 13 y 3, identificadas como L1, L2, L4 y L8, para lo cual hay que poner un "1" momentáneamente en la terminal 1 (Load); y también puede ser puesto en "ceros" poniendo un "1" en la terminal 1 (RST).


PROBLEMA: Derivar para un flip-flop J-K las ecuaciones Boleanas de sus entradas J y K en función de Qn (el estado del flip-flop J-K previo a una transición) y de Qn+1 (el estado del flip-flop J-K después de que ha ocurrido una transición al siguiente estado).

La postulación de este problema puede al principio parecer desconcertante, dado que hasta este momento hemos estado acostumbrados a pensar en J y K como entradas que sirven para condicionar al flip-flop J-K hacia su siguiente estado. Sin embargo, en principio, no hay nada que nos detenga para llevar a cabo este procedimiento. Una forma de verlo es como el tratar de determinar los valores que deben tener J y K para producir las transiciones deseadas de un estado a otro.

Más importante aún es la sutileza de lo que está por llevarse a cabo, ya que vamos a transformar una tabla de secuencias en una Tabla de Verdad. Aquí veremos que el paso que separa una tabla de secuencias para un circuito secuencial de una Tabla de Verdad es en realidad un paso muy endeble.

Empezamos pues usando una tabla de secuencias que describa en forma completa las propiedades del flip-flop J-K:



Con un simple reacomodo de las columnas podemos ver a J y K como "salidas" Boleanas en función de las "entradas" Qn y Qn+1:



Obtenemos primero J en función de Qn y Qn+1 de por medio de minterms:

J = QnQn+1 + QnQn+1 + QnQn+1 + QnQn+1

J = Qn(Qn+1 + Qn+1) + QnQn+1

J = QnQn+1 + Qn

Obtenemos ahora K usando el mismo procedimiento:

K = QnQn+1 + QnQn+1 + QnQn+1 + QnQn+1

K = QnQn+1 + Qn(Qn+1 + Qn+1)

K = Qn + QnQn+1


PROBLEMA: Diseñar, usando flip-flops J-K, un contador síncrono cuya secuencia natural de estados sea la siguiente:



Una inspección preliminar de este problema nos indica que tratar de llevar a cabo su solución por intuición únicamente puede ser bastante difícil. Optamos entonces por recurrir a un método más formal desprovisto de "trucos".

Para empezar, podemos preparar unas tablas de secuencias en las cuales relacionamos los estados del contador previos a una transición con los estados del contador después de que ha ocurrido una transición:



Usando minterms, encontramos que para este contador:


Q1n+1 = Q1nQ2n + Q1nQ2n

Q1n+1 = Q1n(Q2n + Q2n)

Q1n+1 = Q1n


Q2n+1 = Q1nQ2n + Q1nQ2n


Usando los resultados del problema anterior, podemos obtener las entradas requeridas por el primer flip-flop J-K del contador:

J1 = Q1nQ1n+1 + Q1n

J1 = Q1n(Q1n) + Q1n

J1 = Q1n


K1 = Q1n + Q1nQ1n+1

K1 = Q1n + Q1nQ1n

K1 = Q1n

Obtenemos ahora las entradas requeridas por el segundo flip-flop J-K del contador:

J2 = Q2nQ2n+1 + Q2n

J2 = Q2n(Q1nQ2n +Q1nQ2n) + Q2n

J2 = Q2nQ1nQ2n + Q1nQ2n + Q2n

J2 = Q1nQ2n + Q2n

Usando el mapa de Karnaugh, es posible simplificar aún más esta expresión:

J2 = Q1n + Q2n

Ahora procedemos a la obtención de K2:

K2 = Q2n + Q2nQ2n+1

K2 = Q2n + Q2n(Q1n + Q2n)(Q1n + Q2n)

K2 = Q2n + Q2n(Q1nQ1n + Q1nQ2n + Q1nQ2n + Q2nQ2n)

K2 = Q2n + Q2n(Q1nQ2n + Q1nQ2n)

K2 = Q2n + Q1nQ2n

Esta expresión también se puede simplificar usando el mapa de Karnaugh:

K2 = Q1n + Q2n

Tomando en cuenta los resultados obtenidos, el diseño del contador toma el siguiente aspecto:



Observamos que en el primer flip-flop J-K, las salidas complementarias están conectadas de modo invertido a las entradas J y K. Esto ocasiona que el primer flip-flop J-K actúe como un simple divisor binario o flip-flop T. Pero podemos obtener la misma acción con J=0 y K=0, lo cual simplifica el diseño. En general, cuando las salidas están conectadas en forma inversa a las entradas, estas entradas se pueden reemplazar con la condición J=0 y K=0, aprovechando la enorme versatilidad del flip-flop J-K para ello. El segundo flip-flop se presta también a esta simplificación. El diseño toma entonces el siguiente aspecto:



La siguiente simplificación es obvia. El diseño toma por fin su aspecto final:




PROBLEMA: Derivar para un flip-flop D la ecuación de su entrada D en función de Qn (el estado del flip-flop D previo a una transición) y de Qn+1 (el estado del flip-flop D después de que ha ocurrido una transición al siguiente estado).

Tomando en cuenta las propiedades del flip-flop D, desarrollamos primero una tabla de secuencias que describa el comportamiento para el cual queremos encontrar su expresión Boleana:



Usando minterms, la "salida" D del flip-flop en función de Qn y de Qn+1 será:

D = QnQn+1 + QnQn+1

D = Qn+1(Qn + Qn)

D = Qn+1


PROBLEMA: En un problema anterior se pidió diseñar, utilizando flip-flops J-K, un contador capaz de poder generar la siguiente tabla de secuencias:



Resolver el mismo problema usando flip-flops D
.

Usando los resultados de los dos problemas anteriores, tenemos primero que las entradas requeridas por cada flip-flop D del contador están dadas por las siguientes relaciones:

D1 = Q1n+1

D1 = Q1n

D2 = Q2n+1

D2 = Q1nQ2n + Q1nQ2n

Podemos ver que para D2 la salida es simplemente la de un NOR-EXCLUSIVO.

El contador toma entonces el siguiente aspecto:



Notamos a simple vista que resulta más económico construír el contador del problema original con flip-flops J-K que con flip-flops D.

Sin embargo, éste es un caso particular. Recuérdese cómo resultaba más sencillo construír un registro de transferencia con flip-flops D que construírlo con flip-flops J-K.

No existe una regla general que nos indique de antemano qué tipo de flip-flop producirá el diseño más económico, el diseño que requiera una cantidad menor de componentes. En la práctica, es necesario ensayar varios diseños y seleccionar de entre ellos el mejor.


PROBLEMA: Determinar si el siguiente contador es simétrico o asimétrico.



Obtenemos primero la secuencia natural del contador que es la siguiente:



La salida del circuito está determinada por el último flip-flop, Q3. El diagrama de tiempos de la salida del último flip-flop, obtenida directamente de la secuencia del contador arriba expuesta, junto con los pulsos de "reloj" a la entrada del circuito que producen dicha salida, es como sigue:



Puesto que un contador es simétrico solo si la forma de la señal de salida es simétrica para una entrada igualmente simétrica y uniforme de pulsos, podemos ver que que el contador es asimétrico, con una asimetría 3:2.

viernes, 27 de marzo de 2009

PROBLEMAS RESUELTOS SOBRE CONTADORES , FLIP-FLOP (J-K): PARTE 2ª

PROBLEMA: Diseñar un registro de transferencia con capacidad de 3 bits, del tipo entrada-serial salida-paralela, usando flip-flops D.

Este tipo de diseño es extremadamente sencillo. Tomando en cuenta que en la salida paralela se extraen todos los bits de información al mismo tiempo, el diseño en cuestión será como sigue:



En este caso, para introducir una palabra binaria, vamos colocando bit por bit dicha palabra en la terminal de "Entrada", avanzando simultáneamente dicha palabra dentro del registro de transferencia. Una vez introducida en el mismo, la podemos sacar en forma paralela activando la terminal de lectura R (Read). Es importante agregar que los bloques AND que están haciendo la función de una compuerta en realidad son optativos, porque de cualquier manera una vez adentro del registro de transferencia la palabra binaria está disponible para su lectura inmediata.

Un circuito de esta naturaleza es tan útil, que inclusive es puesto a la venta en circuitos integrados comerciales como el CD4015:



fabricado con tecnología CMOS, el cual contiene dos registros de transferencia independientes de 4 bits, e inclusive cada uno de los dos registros tiene su propia terminal de reloj. Otro circuito integrado más reciente de este tipo lo es el CD4094, de ocho bits, también fabricado con tecnología CMOS:



Este tipo de circuitos integrados se pueden conectar en "cascada" para aumentar la capacidad de los mismos. Así se pueden conectar dos circuitos integrados CD4094 de la manera siguiente:




PROBLEMA: Diseñar un contador de "Anillo Caminante" de cuatro bits usando flip-flops D.

Considerando que el contador de "Anillo Caminante" es un registro de transferencia con el complemento de las salidas del último flip-flop alimentando las entradas del primer flip-flop (que es a lo que equivale el "cruzar" las salidas del último flip-flop antes de conectarlas a las entradas del primero), el diseño será como sigue, tomando como base el diseño llevado a cabo en un problema previo con flip-flops J-K:




PROBLEMA: Diseñar un registro recirculante con tres bits de capacidad, del tipo entrada-serial salida-serial, usando flip-flops D.

Un diseño con las características pedidas, capaz de poder dar la "autorización" para ir metiendo una palabra binaria en forma serial dentro del mismo activando la terminal W (Write) y desactivándola cuando la palabra ya está metida y será puesta a "recircular", es el siguiente:



En este caso, para introducir una palabra binaria en el registro recirculante a través de la terminal de entrada In, activamos primero con un "1" la terminal de "escribir" W (Write), metiendo dicha palabra en forma serial bit por bit dentro del circuito con varias transiciones en la terminal de "reloj". Una vez introducida la palabra dentro del registro recirculante, desactivamos la terminal de escritura W con un "0", con lo cual el circuito trabajará como un registro recirculante sin perder la información almacenada.


PROBLEMA: Diseñar un registro de transferencia para almacenar un número decimal en sistema BCD, de rapidez óptima, usando flip-flops D. Diseñar asimismo un registro para una calculadora electrónica con capacidad para seis dígitos.

Considerando que la representación decimal de un número en sistema BCD requiere de cuatro bits para su representación, y que el registro de transferencia más rápido posible es el de entrada-paralela y salida-paralela o pipo (parallel-in parallel-out), el diseño deberá ser como sigue:



Puesto que la calculadora electrónica utiliza el sistema BCD (por lo menos para mostrarle el número al usuario en sistema decimal que pueda entender en lugar del lenguaje de "unos" y "ceros" usado por la máquina), si esta es de seis dígitos deberá poder almacenar seis cifras en sistema BCD, usando cuatro bits para almacenar cada cifra decimal. Esto sugiere que podemos usar el diseño pipo de arriba como bloque fundamental. Tomando en cuenta que en toda calculadora los números van entrando de izquierda a derecha, desplazándose todos los números un espacio a la vez para poder ir entrando en el registro de la calculadora, el registro tomará el siguiente aspecto:



Este tipo de registro recibe en ocasiones el nombre de registro de almacenamiento. En la mayoría de las calculadoras hay varios de este tipo. Uno de ellos es el que mantiene los números decimales que le están siendo mostrados al usuario. Otro de ellos es uno al que simplemente se le conoce como la memoria (de la cual puede haber varias), a la cual tenemos acceso con alguna tecla como "M+" ó "M-".


PROBLEMA: Subrutinas Denegadas. Supóngase que un contador de anillo caminante con capacidad de almacenamiento de 3 bits hecho a base de flip-flops D incurre en la condición Q1Q2Q3=101. ¿Qué ocurre en este contador después de varias transiciones producidas por un tren de pulsos en la terminal de "reloj"?

Analizamos primero lo que ocurre después de varias transiciones empezando con la condición Q1Q2Q3=101 que es la siguiente:



Primera transición:



El estado del contador después de la primera transición es Q1Q2Q3=010.

Segunda transición:



El estado del contador después de la segunda transición es Q1Q2Q3=101.

Tercera transición:



El estado del contador después de la primera transición es Q1Q2Q3=010.

Hasta este punto, el análisis nos ha dado suficiente información.

El contador cambia del estado 101 al estado 010 y viceversa, y no hay forma en la cual se pueda sacar a sí mismo de estos dos estados.

Los dos estados en los que está atorado el contador de anillo caminante son ejemplos de lo que comúnmente se conoce como subrutinas denegadas (disallowed subroutines), las cuales pueden ocasionar innumerables problemas si no se les reconoce a tiempo. Esto que ocurre al nivel de la máquina refleja algo que también puede ocurrir cuando se está elaborando un programa computacional, en donde un "salto incondicional" de una instrucción del programa a otra puede eventualmente después de varios pasos conducir a la misma instrucción que produjo el salto, atorando al programa en un bucle perpetuo del que no podrá salir. Este problema a nivel de la programación de las computadoras fue eliminado en gran parte con la introducción del concepto de la programación estructurada por Edward W. Dijkstra, el cual hizo ver que los saltos incondicionales en un lenguaje de alto nivel no son realmente necesarios, pudiendo por lo tanto ser corregidos por el programador por una buena práctica de programación. Pero ningún programador por bueno que sea puede corregir algo que está sucediendo al nivel de la máquina, dentro de sus circuitos.

Todo estado que pueda conducir a un contador a una subrutina denegada es conocido como un estado denegado (disallowed state).

El contador de anillo caminante puede incurrir en cualquiera de estos dos estados denegados de varias maneras. Esta condición puede empezar cuando inicialmente se le aplica energía al sistema. En este caso, el problema se puede solucionar con un pequeño retardo de tiempo al aplicar energía al sistema, durante el cual se pueden "limpiar los registros". Para esto, cada flip-flop D debe poseer una terminal R (reajuste) que lo ponga en el estado Q=0 al ser activado el circuito. El diagrama adecuado para este flip-flop sería el siguiente:



Con esta modificación, el contador tendrá el siguiente aspecto:



La activación de la terminal para "limpiar" todo poniendo cada uno de los flip-flops en el estado Q=0 pondrá al contador en el estado Q1Q2Q3=000.

Ocasionalmente, se desea tener la opción de poder poner al contador en la condición Q1Q2Q3=111 además de poderlo poner en la condición Q1Q2Q3=000. Para esto, cada flip-flop D utilizado debe poseer, además de la terminal R, una terminal S que lo ponga en el estado Q=1 al ser activada (esto es reminiscente del comportamiento del flip-flop R-S sobre el cual se basan estos flip-flops más sofisticados). El diagrama propio para este tipo de flip-flop sería el siguiente:



Obsérvese que la cercanía de la terminal S a la terminal Q sugiere que al ser activada la terminal S, el "1" pasa directamente a su terminal más cercana que es Q, siendo este el estado que adquiere el flip-flop con la activación de S. La Tabla de Verdad de este último flip-flop D mejorado, para la acción de las terminales R y S deberá ser, basada en las propiedades de R y S aquí indicadas:



En esta tabla de verdad no se toma en cuenta para nada los valores que haya previamente ni en la terminal de entrada D ni en la terminal de salida Q, porque las terminales S y R son absolutas y toman prioridad sobre cualquier otra condición previa en la que haya estado el flip-flop. Obsérvese también que no está permitido activar al mismo tiempo S y R, lo cual conduce a una inconsistencia lógica de propósitos.

Frecuentemente es posible usar los mismos estados en los cuales se puede dar origen a una subrutina denegada para "limpiar los registros" de una manera automática al empezar. Siguiendo esta filosofía, el contador de anillo caminante puede tomar la siguiente configuración:



Con la modificación arriba mostrada, en el caso de que el contador incurra en la condición Q1Q2Q3=010 automáticamente será forzado a entrar en el estado 000.

La técnica de usar los mismos estados denegados para "limpiar los registros" eliminando cualquier posibilidad de ellos se puede aplicar a muchas otras situaciones similares, sobre todo aquellas que puedan considerarse críticas. De cualquier manera, considerando el aumento en la complejidad del circuito, puede ser preferible irse a la limpieza de todo directamente accediendo a todas las terminales R de los flip-flops del circuito al arrancar la máquina con sus operaciones, que es lo que se acostumbra a hacer.


PROBLEMA: Determinar si el contador que se muestra tiene estados denegados.



Analizamos primero la secuencia natural que recorre el contador suponiendo que este está inicialmente en la condición Q1Q2Q3=000. Trabajando sobre el diagrama del circuito, obtenemos cada uno de sus estados después de las transiciones que le son aplicadas a la terminal de "reloj", los cuales resultan ser:

Primera transición: El estado es Q1Q2Q3=100.

Segunda transición: El estado es Q1Q2Q3=110.

Tercera transición: El estado es Q1Q2Q3=011.

Cuarta transición: El estado es Q1Q2Q3=001.

Quinta transición: El estado es Q1Q2Q3=000.

Puesto que en la quinta transición el contador regresa a su estado original, no es necesario proseguir con el análisis.

Para encontrar los posibles estados denegados en el contador, comparamos los estados de su secuencia natural con todos los estados posibles que no están incluídos en la secuencia normal del contador:

Secuencia Natural



Estados Posibles



Vemos entonces que hay tres posibles estados denegados:

Q1Q2Q3=010

Q1Q2Q3=101

Q1Q2Q3=111

Falta ver si el contador se puede "sacar" a sí mismo de cada uno de estos estados. Para esto, hay que analizar el comportamiento del contador empleando cada uno de los tres posibles estados denegados como condición inicial.

Posible estado denegado Q1Q2Q3=010

Condición inicial: Q1Q2Q3=001.

Primera transición: Q1Q2Q3=101.

Segunda transición: Q1Q2Q3=110. (El contador resume su operación normal, ya que este es uno de los estados propios pertenecientes a la secuencia natural del contador.)

Tercera transición: Q1Q2Q3=011.

Posible estado denegado: Q1Q2Q3=101

Condición inicial: Q1Q2Q3=0101.

Primera transición: Q1Q2Q3=110.

Segunda transición: Q1Q2Q3=011. (El contador resume su operación normal, ya que este es uno de los estados propios pertenecientes a la secuencia natural del contador.)

Posible estado denegado Q1Q2Q3=111

Condición inicial: Q1Q2Q3=111.

Primera transición: Q1Q2Q3=011.

Segunda transición: Q1Q2Q3=001. (El contador resume su operación normal, ya que este es uno de los estados propios pertenecientes a la secuencia natural del contador.)

Puesto que el contador puede recuperar su secuencia natural de cualquier estado posible en el que se encuentre, concluímos que el contador no tiene estados denegados.


PROBLEMA: ¿Cuántos estados denegados tiene un contador de anillo caminante de 4 bits, si es que los tiene? ¿Cuántos estados denegados tendrá un contador de anillo caminante de n bits en general, si es que los tiene?

Comparamos primero la secuencia natural del contador de anillo caminante de 4 bits con todos sus estados posibles:

Secuencia Natural



Estados Posibles



Podemos ver que hay ocho posibles estados denegados. Falta comprobar si el contador se puede "sacar" por sí solo de cada uno de estos estados. Empezamos el análisis con el estado Q1Q2Q3Q4=0100. Teniendo en cuenta la forma en la cual trabaja el contador de anillo caminante, obtenemos la siguiente secuencia resultante:



Encontramos que el contador no se puede "sacar" a sí mismo del estado Q1Q2Q3Q4=0100, incurriendo en una subrutina denegada, la cual por cierto contiene todos los estados restantes que faltaban de estudiar.

Concluímos pues que un contador de anillo caminante de cuatro bits contiene ocho estados denegados, o sea, todos los estados restantes posibles que no están incluídos en su secuencia natural de estados.

En general, un contador de anillo caminante de n bits tendrá una secuencia natural de 2n estados, esto de un total de 2n estados posibles. El contador de anillo caminante de n bits tendrá por lo tanto 2n-2n estados denegados.


PROBLEMA: Usando flip-flops D y una memoria ROM, diseñar una máquina secuencial que pueda producir una secuencia de 16 estados diferentes, siendo cada estado un estado de 4 bits.

Como se señaló en el texto principal de este capítulo, existen varias técnicas, algunas de ellas algo sofisticadas, para diseñar circuitos que mediante el empleo de flip-flops J-K y combinaciones de funciones lógicas básicas produzcan ciertas secuencias predeterminadas de números binarios. Pero antes de invertir una cantidad inusual de tiempo tanto en el aprendizaje de dichas técnicas como en la aplicación de las mismas, vale la pena tomar en cuenta otras alternativas apoyadas por el bajo costo de algunos circuitos integrados "estándard". Además de la técnica que ya fue descrita en el texto principal usando una memoria ROM en combinación con un contador binario de conteo ascendente, hay otra técnica que recurre también al empleo de memorias ROM para lograr obtener secuencias de números binarios pero sin necesidad de tener que recurrir a un contador binario ascendente. La idea esencial detrás de esta técnica consiste en que cada dato almacenado bajo cada domicilio se convierta a su vez en el siguiente domicilio de donde el ROM sacará el siguiente dato, lo cual resultará en la secuencia específica de números binarios deseada. La idea esencial está bosquejada en el siguiente diagrama, empleando para ello un ROM con capacidad para almacenar 16 palabras de 4 bits de longitud cada una:



Para que esta idea pueda funcionar, es necesario interponer una compuerta que detenga temporalmente los datos que D0D1D2D3 que están siendo puestos en la entrada de domicilios A0A1A2A3 del ROM, porque de otra manera se establecería una carrera en la cual la palabra binaria puesta en la entrada del ROM sacaría de inmediato el dato especificado por dicho domicilio que sería puesto de inmediato a la entrada del ROM sacando de inmediato el siguiente dato iniciándose así la carrera incontrolable. Esta es precisamente la función de las compuertas: eliminar cualquier posibilidad de carreras incontrolables. Además, queremos controlar la velocidad de nuestra máquina secuencial bajo la acción de "pulsos" de un reloj maestro que traiga a la máquina bajo nuestro control. Esto lo podemos lograr fácilmente usando cuatro flip-flops D conectados para formar un registro de transferencia del tipo entrada-paralela salida paralela:



Para la construcción de este circuito, aquí podríamos utilizar un circuito integrado como el 4035, el cual es precisamente un registro de transferencias de entrada-paralela salida-paralela, adecuado a este propósito.


PROBLEMA: Analizar el comportamiento del flip-flop J-K conectado de la siguiente manera:



Suponiendo que el flip-flop está inicialmente en la condición Q=0, después de la primera transición tomará el estado Q=1. A la segunda transición regresará al estado Q=0 y así sucesivamente.

Este elemento es mejor conocido como el flip-flop T, y su diagrama esquemático es simplificado a la siguiente configuración, con una sola terminal de entrada designada como T (toggle):



En virtud de que este componente carece de entradas, y sólo puede ciclar entre dos estados entre cada pulso de reloj, sus aplicaciones son extremadamente limitadas y se incluye aquí únicamente a manera de información. Un circuito de este tipo, sin la adición de una terminal extra de "limpieza" (clear) que permita ponerlo en un estado fijo anticipable, carece de uso práctico excepto como "divisor de frecuencia" de pulsos rectangulares. Además, pocos diseñistas estarían dispuestos a la adquisición de flip-flops T cuando por prácticamente el mismo precio se pueden adquirir circuitos integrados con la misma cantidad de flip-flops J-K ó flip-flops D que son mucho más versátiles.