[MÚSICA] Hola. Pasamos a ver flip-flops de gatillado por flanco y no por nivel. Como vimos antes, Los latches cambian de estado mientras el nivel del clock sea 1 o el nivel del clock sea 0, dependiendo del latch. Y eso puede ser un problema porque puede haber glitches, puede haber cambios rápidos que produzcan errores. Entonces, sería ideal tener un circuito que cambia solamente en un flanco una vez por ciclo de reloj. Ese bloque circuital se llama flip-flop, solo actualiza el valor cuando hay un cambio de reloj, cuando hay un cambio de 0 a 1 o cuando hay un cambio de 1 a 0, dependiendo del flip-flop. Entonces, algunos flip-flops operan con flancos positivos. ¿Qué es un flanco positivo? Es un flanco de subida, es un cambio de 0 a 1. Entonces, eso es un flanco positivo. Y hay otros que cambian con flanco negativo, o sea, que son sensibles a la entrada únicamente cuando hay un flanco negativo, esto es cuando mi reloj está en 1 y baja a 0. Bien. ¿Cómo hacemos ese circuito? Una posible implementación es una cascada de dos latches, que se llama maestro esclavo. No voy hacer alusión a lo que significa por la connotación que tiene el esclavo y el maestro. No corresponde para esta clase, en algunas partes se habla más de mother and son, o madre e hijo, para mantener de MS, de master slave. Pero no voy a referirme a eso, voy a dejarlo para lectura de cada uno. Entonces, tenemos el latch maestro aquí y tenemos el latch esclavo. Y la salida del latch maestro va conectada al latch esclavo, y el reloj del latch maestro negado va al latch esclavo. El símbolo de este flip-flop es este. Tiene una entrada D, tiene una entrada de clock. La entrada de clock está marcada con ese símbolo, con ese triángulo. Tiene aquí una burbuja, eso significa que esto opera con flancos negativos. Y esta es la salida Q y la salida Q negada. Perfecto. ¿Cómo funciona esto? Buena pregunta. Si quieren pausan, piénsenlo un poco y vuelvan. A ver. Este circuito consiste en dos latches tipo D. Cuando el clock vale 1, el latch maestro sigue al input de D. Aquí el latch maestro. Sigue al input D cuando el clock vale 1. Mientras que el clock esclavo no va a cambiar. Porque si esto está en 1, esto está en 0. Al revés, si el clock vale 0, el latch esclavo cambia, pero el latch maestro no cambia. Entonces, como Qm se mantiene constante cuando el clock vale 0, el valor del latch esclavo va a seguir un valor que no cambia. Qs se queda con el valor que tenía Qm. Qs está aquí, se queda con el valor que tenía Qm justo antes o justo cuando el clock cambia de 1 a 0. Y eso permite que nuestro flip-flop sea sensible a flancos y no a niveles. A ver, veámoslo con un diagrama de tiempo. Aquí está el clock, va subiendo y va bajando. Cuando el clock está arriba, mi D puede pasar a Qm. Perfecto. Ahí pasó mi D a Qm. Cuando el clock está bajo, da lo mismo lo que ocurra con D, Qm no va a cambiar. Cuando bajé en el momento en el que bajé, Qm puede pasar a Qs. Cuando bajé, Qm puede pasar a Qs. Esta es la salida Q igual a Qs, entonces baja el clock y cuando el clock estaba abajo, Qm pasa a Qs. Eso es lo que ocurre exactamente en este tiempo. Qm pasa a Qs. Entonces, si se fijan, lo que ocurrió aquí es que cuando mi clock tuvo un flanco negativo, mi D apareció en Q. Todo el resto del tiempo da lo mismo cuánto valga D, Q se va a mantener. Luego aquí hay otro flanco negativo. Cuando ocurre este flanco negativo, nuevamente, mi D pasa a Qs. Entonces, solamente ocurren cambios cuando hay un flanco negativo. Y eso se logra, como dije, con esta cascada de dos latches. Es una forma ingeniosa de hacer que un circuito sea sensible a flancos. Esta es un posible implementación de un flip-flop de gatillado por flanco. En este caso, el símbolo es distinto. El símbolo, a diferencia de este, que es un símbolo que tiene una burbuja aquí. Este símbolo no tiene burbuja porque este es un flip-flop gatillado por flanco positivo, que yo diría que es el flip-flop más común. Esto que están viendo aquí es el flip-flop más común. Y es un flip-flop que cuando hay un flanco positivo aquí, D pasa a la salida y Q es la salida negada. Y cuando no hay un flanco positivo, la salida se mantiene. Oye, pregunta, ¿qué pasa si cambiamos las compuertas NAND de este circuito por compuertas NOR? Si hacen eso, van a terminar con un flip-flop de gatillado por flanco negativo. Oye, ¿cómo funciona este circuito? Bueno, aquí hay un latch. Eso ahí es un latch. Esto de aquí es otro latch cuya entrada viene de esta salida y aquí hay otro latch adicional, que es el que genera Q y Q negado. Claro, este lo identificamos, es como un set reset. Sí hemos visto antes, lo hemos visto. Bueno, ¿cómo hacer esto en Verilog? La palabra posedge en la lista de sensibilidad de un bloque always me permite sensibilidad al flanco positivo. Entones, lo que hacemos aquí es module flipflop con entrada D y clock y con salida Q. Q es un registro porque guarda valor y siempre que haya un cambio positivo en el clock, siempre que haya un flanco positivo, Q va a valer D y eso es todo. Con eso you tenemos resulto nuestro flip-flop en Verilog. Existe otra forma de hacerlo, que es con flancos negativos. En ese caso, usamos la palabra negedge. Comparemos latch y flip-flops. El primero que está aquí con este símbolo corresponde a un latch, que va a cambiar solo cuando clock vale 1. Este otro símbolo corresponde a un flip-flop de gatillado por flanco positivo y este otro es un flip-flop de gatillado por flanco negativo. Eso aparece aquí en la burbuja. Aquí hay un diagrama de tiempo sencillo. Aquí está el reloj y aquí está mi entrada que varía en forma arbitraria. Mientras el reloj vale 1, el latch va a cambiar igual que mi entrada, va a hacer un reflejo de mi entrada. Mientras haya un flanco positivo, [AUDIO_EN_BLANCO] mi flip-flop de gatillado por flanco positivo va a cambiar. Y mientras haya un flanco negativo, mi flip-flop de gatillado por flanco negativo, que es este último, va a cambiar su valor. Al igual que en latches, los flip-flops también tienen tiempo de setup y tiempo de hold que uno tiene que respetar y ese tiempo de setup y tiempo de hold debe ser respetado en torno al flanco, es decir, si tengo un flanco positivo, mi tiempo de setup se mide desde el flanco positivo hacia atrás, el tiempo de hold se mide desde el flanco positivo hacia delante. Eso, muy bien. Hoy aprendimos entonces flip-flop de gatillado por flanco de subida, gatillados por flanco de bajada, aprendimos una implementación circuital sencilla, aprendimos cómo implementarlo en Verilog y aprendimos la diferencia entre latch y flip-flop. Muy bien. Gracias por ver esta clase.