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