Estoy empezando a aprender la codificación verilog en la universidad y hasta ahora no tuve tantos problemas. Creo que tengo lo básico a la perfección. Pero acabo de golpear una pared de ladrillos con este. Estaba experimentando con modelos de comportamiento y terminé teniendo este problema.
Es fácil hacer un flip flop en D con un reinicio desencadenado de nivel síncrono como este
always @(posedge clk)
begin
if(clr) begin
q <= 1'b0;
end
else begin
q <= d;
end
end
O hacer un flip flop D con reinicio síncrono desencadenado como este
always @(posedge clk or posedge clr)
begin
if(clr) begin
q <= 1'b0;
end
else begin
q <= d;
end
end
¿Pero cómo puedo hacer un nivel desencadenado pero reinicio asíncrono? No puedo hacer
always @(posedge clk or clr)
porque eso sería oring dos tipos incompatibles, por lo que se producirá un error al realizar la síntesis RTL. No puedo hacer
always @(posedge clk)
begin
q <= d;
end
always @(clr)
begin
q <= 1'b0;
end
ya que eso requeriría múltiples fuentes para manejar q, nuevamente un problema en la síntesis de RTL.
Entonces, mi pregunta es, ¿es posible o no un reinicio D-flip con reinicio desencadenado asíncrono? Tanto en verilog como en lógica digital.