4 votos

Cómo implementar de manera eficiente un único pulso de salida de una larga entrada sobre Altera?

Tengo un reloj rápido y un interruptor llamado 'listo'. Cuando el interruptor está volteado (listo va ALTO), me gustaría que la salida de pcEn para producir un pulso que dura sólo un ciclo de reloj. pcEn sólo la salida de otro pulso la próxima vez listo se va de ALTA de nuevo.

El siguiente código simula correctamente, pero, desafortunadamente, no es synthesizable. Tenga en cuenta que el espacio es una consideración importante, así que me preguntaba si es posible llevarlo a cabo sin el uso de una máquina de estado (que utiliza una gran cantidad de lógica de los elementos).

module control
(
    output logic pcEn,
    input clock, ready
);

always_ff @(negedge clock)
    pcEn <= 1'b0;

always_ff @(posedge ready)
    pcEn <= 1'b1;

endmodule

6voto

GSerg Puntos 33571

Mi técnica más habitual es la implantación de una 2-etapa de sincronizador para llevar el asincrónica de entrada en el reloj de sincronización del dominio y, a continuación, utilice uno de los más flip-flop como el detector de bordes. Dependiendo de la lógica que uso en el último estado de cuenta, usted puede detectar flancos de subida, caída de los bordes o de ambos.

module control
(
    output logic pcEn,
    input clock, ready
);
    reg r1, r2, r3;

    always @(posedge clock) begin
        r1 <= ready;    // first stage of 2-stage synchronizer
        r2 <= r1;       // second stage of 2-stage synchronizer
        r3 <= r2;       // edge detector memory
    end

    pcEn <= r2 && !r3;   // pulse on rising edge
endmodule

1voto

Flory Puntos 1911

La costumbre de formación para alternar a pulso a lo largo de las líneas de

module flip (output logic pcEn, input clock, input ready);
reg state;
always_ff @(posedge clock)
      state <= ready;
assign pcEn = state != ready;
endmodule

Si ready es de la demanda externa es digno de limpieza para alinear con un borde de reloj con un registro único escenario por primera vez. No hay necesidad para el reset. Si vas a contar la salida, también es necesario abordar el interruptor de rebote.

A la dirección de Daves comentario: modificado para tener registrados de salida pcEn y a desencadenar en el flanco de subida.

module flip (output reg pcEn, input clock, input ready);
reg state;
always_ff @(posedge clock) begin
      state <= ready;
      pcEn  <= state != ready && ready;
end
endmodule

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X