Alto asíncrono activo SET & RESET D-FlipFlop

0

Tengo dos módulos como se muestra a continuación. ¿Puedo preguntar cuál es el registro correcto para representar un D-flip flop de Asynchronous active high set / reset (Rising clock edge)? ¿Son ambos lógicamente equivalentes?

Tabla de verdad esperada para mi D-flip Flop

reset  set     clk        q
  1     x       x         0
  0     1       x         1
  0     0   rise-edge     d1
  0     0       0         Qo (previous d1)        

Primer módulo dff_async_RS

module dff_async_RS(q, d1, clk, reset, set);
  input d1, clk, set, reset;
  output q;
  reg q_reg;
  always @ (posedge clk)
    begin
    if (reset)
      q_reg <= 1'b0;
    else if (set)
      q_reg <= 1'b1;
    else
      q_reg <= d1;
    end
  assign q = reset ? 1'b0 : (set ? 1'b1 : q_reg);
endmodule

Segundo módulo dff_async

module dff_async(q, d1, clk, reset, set);
  input d1, clk, set, reset;
  output q;
  reg q;
  always @ (posedge clk or posedge set or posedge reset)
    begin
    if (reset)
      q <= 1'b0;
    else if (set)
      q <= 1'b1;
    else
      q <= d1;
    end
endmodule
    
pregunta Kevin 5059

2 respuestas

0

El problema con tu primer módulo es después de liberar set o reset de nuevo a 0, la salida q vuelve al estado q_reg anterior.

Pruébalo en simulación.

    
respondido por el dave_59
0

Cuando el ajuste o restablecimiento es 'ALTO', independientemente del reloj, la salida debe hacerse en 1 o 0. En el primer caso, cada evento ocurre en el borde positivo del reloj. Así que incluso si el ajuste / reinicio fue 'ALTO', espera hasta que el indicador de posición para cambiar la salida. Así que no es asíncrono.

En el segundo caso, cuando el reinicio / ajuste es 'ALTO', el bloque siempre se pasa inmediatamente y la salida cambia.

    
respondido por el Naveen

Lea otras preguntas en las etiquetas