Flip flop D estructural en Verilog

module dFlipFlop(
    input clk,
    input d,
    output q
    );
wire w1,w2,q_n;

assign w1 = ~(d & clk);
assign w2 = ~(~d & clk);

assign q = ~(w1 & q_n);
assign q_n = ~(w2 & q);

endmodule

¿Funcionará este módulo como un flip flop D en mi fpga? ¿Alguna sugerencia? Actualmente no tengo mi FPGA, pero estoy tratando de averiguar si este diseño vale la pena o no.

FYI: escribe un pestillo D, no un flip flop activado por borde
Antes de hacer preguntas como esta, debe aprender la definición de un flip-flop y luego pensar en cómo puede implementarlo, lo que escribe aquí no es un flip-flop, es un pestillo como mencionó Greg.

Respuestas (2)

Podría funcionar, pero es difícil decir qué hará el sintetizador con eso. Es una idea mucho mejor usar un bloque siempre cuando quieras usar un reloj.

No, no como un flip-flop. Es un pestillo D.

La diferencia ocurre cuando el reloj está alto. Un flip-flop registrará la entrada, d, en el borde del reloj. El pestillo d permitirá que el valor registrado cambie cuando el reloj esté alto.

Una tabla de verdad de D-Latch se vería así:

Clk  D  |  Q(t+1)
-----------------
 0   x  |   Q(t)
 1   0  |    0
 1   1  |    1

x = no me importa (no importa lo que sea).

Un flip-flop d cambiaría solo en el borde (o algún tiempo después, dependiendo de la demora).

Diseño digno? -- Como sabrá, este no es el método más simple y, por lo general, no sería un método recomendado para crear un latch o un flip-flop de anuncios.