Verilog Práctico

Capítulo 7. Flip-Flop tipo D

Publicado el 20 de febrero de 2021

Actualizado el 17 de marzo de 2023


Un flip-flop es un dispositivo básico de memoria, capaz de almacenar un bit.

En este tutorial aprenderemos a modelar distintos tipos de Flip-Flops tipo D. Empezaremos por el más sencillo e iremos añadiendo funcionalidades. 

Otros tipos de flip-flop son SR y JK, pero los  de tipo D son los más empleados en diseño electrónico.

Código Verilog de un flip-flop sencillo,  tipo D activado por flanco ascendente de reloj.

Simularemos la entrada D con el sw1, para visualizar las salidas asignaremos los ledes LED0 y LED1 a Q y Qn respectivamente. El Archivo PCF queda como sigue. 

Subimos el código a la Alhambra FPGA y vemos que al pulsar el sw1, el LED0 se pone a 1 y el LED1 se pone a 0. Al soltar el sw1 el LED0 se apaga y el LED1 se ilumina.


El flip-flop que hemos descrito no es muy útil en la práctica, ya que almacena el dato apenas durante un ciclo de reloj.

2. Flip-Flop tipo D con pulsador de carga

En el siguiente ejemplo vamos a introducir una mejora al flip-flop anterior. Añadiremos un multiplexor 2-1 en la entrada D. El multiplexor nos permite seleccionar el dato introducimos en el flip-flop, entre in y Q, de manera de al pulsar load cargamos un nuevo dato y en reposo  el flip-flop mantiene el dato actual.

Código Verilog

Con el sw1 seleccionamos el dato a introducir en el flip-flop. Con el sw2 damos el comando de  load. Las salidas las mostramos en los ledes LED0 y LED1

El archivo .pcf queda como en la imagen siguiente. 

3. Flip-Flop tipo D con Reset asíncrono

Seguimos mejorando el diseño de nuestro flip-flop. A veces puede interesar reiniciar las salidas  a un estado conocido. Añadiremos un pulsador de reset para poner la salida a Q = 0 en cualquier momento, además lo modelamos de manera que sea activo a nivel bajo. 

Para dar el comando de reset, nos ayudamos de un pulsador externo conectado en el pin D13 de la Alhambra FPGA. Como es una señal activa a nivel bajo, conectamos el pulsador a GND y en la entrada del pin D13 conectamos una resistencia pull-up de 1K2. 

Código Verilog

Archivo .pcf

4. Flip-Flop tipo D con reset asíncrono y set síncrono

Otra forma de inicializar un registro a un estado conocido es poner su salida a 1 mediante un pulsador de set. Para ver las diferentes opciones a la hora de añadir señales, modelaremos este pulsador de manera que sea síncrono con la señal de reloj y activo a nivel alto. 

Conectamos el pulsador set en la entrada D12 como se muestra en el esquema siguiente. 

Código Verilog

Archivo .pcf 

En la práctica real, las señales asíncronas no siempre son recomendables, ya que son más  propensas a activaciones espureas o glitches. Para minimizar este tipo de problemas, se recomienda sincronizar las señales set y reset con la señal de reloj y además modelar el circuito de manera que sean activas a nivel bajo.


Aquí hemos tratado todas las posibilidades para ver las distintas opciones y cómo implementar cada una de ellas. También se puede hacer que el flip-flop sea sensible al flanco de bajada del reloj simplemente escribiendo negedge clk en la declaración always, pero eso seguro que ya lo sabíais.