¿Cómo reinicio mis registros en la salida de Digital Clock Manager?

0

Estoy usando un SPARTAN 3E y he usado el núcleo DCM para generar un reloj de 50 Mhz a 25 Mhz para impulsar el PUERTO VGA. La lógica de reinicio que estoy usando se muestra aquí.

DigitalClockManager instance_name (
.CLKIN_IN(CLK_50MHZ), 
.RST_IN(rst_in), 
.CLKFX_OUT(clk),         //25 Mhz
.CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT), 
.CLK0_OUT(), 
.LOCKED_OUT(LOCKED), 
.STATUS_OUT(STATUS)
);      
BUFG buffer (.I(CLKIN_IBUFG_OUT), .O(CLKIN)); 

RESET LOGIC:

    reg LOCKED_R;
reg [3 : 0] SR; 
always @ (posedge CLKIN)
begin
    if(RESET)
    begin
    SR [3 : 0]  <= 4'b111;
    LOCKED_R <=0;
    end

else 
begin
LOCKED_R <= LOCKED;
if(LOCKED < LOCKED_R | STATUS [1] ) // H to L on LOCKED | CLKIN UNSTABLE
SR <= {1'b1 , SR[3 : 1]};
else 
SR <= {1'b0 , SR[3 : 1]};
end
end

assign rst_in    = ( (SR[2] | SR[1] | SR[0]) || RESET);

Ahora, no estoy seguro de cómo implementar el restablecimiento para todos los demás registros en el diseño.

    always @ (posedge clk) 
begin  
   if (LOCKED && !STATUS[1])
    begin 
           //GOOD TO GO
    end
    else

    begin
     //RESET
    end
end

Si el pulso de la señal RESET dura un período más corto que el necesario para afirmar la señal bloqueada, (lo que probablemente será el caso debido a la puerta OR en rst_in), los registros nunca se restablecerán.

¿Sedesencadenaelalways@(posedgeclk)inclusocuando(LOCKED&&!STATUS 1 ) ¿no es alto? Si es así, ¿por qué la otra parte no activa y configura los registros a los valores predeterminados?

    
pregunta Ahmed Ali Abbasi

1 respuesta

0

Creo que su lógica es correcta, excepto que pretende implementar un reinicio asíncrono. Es decir, el reinicio es independiente del reloj. Esto no se refleja en el código anterior y se puede arreglar agregando las señales BLOQUEADAS y ESTADO en la lista de sensibilidad del proceso.

siempre @ (bloqueado o estado o mensaje de posición)

    
respondido por el dst

Lea otras preguntas en las etiquetas