Necesita ayuda para capturar el período de una forma de onda. (Verilog)

-1

Mi código requiere que almacene el valor del período de una señal de entrada en un registro. Me he burlado del código de abajo para registrar el período, pero todavía no puedo confirmar que funcione. En tu experiencia, ves algo que está inmediatamente mal con eso. Estoy tratando de aprender a usar los modelos en este momento, por favor, perdóname. Sys_clk es un reloj de 50MHz y el in_signal con el que estoy trabajando ahora es de 2Hz, pero eso puede cambiar.

Entradas deseadas: reloj del sistema, RST del controlador, una señal de frecuencia desconocida y ciclo de trabajo inferior a 50MHz (la frecuencia es constante).

Salida deseada: un valor de período registrado en forma decimal

<!-- language: verilog -->
module t_sampler(input wire in_signal, input sys_clk, output reg [31:0] total_T);

reg [31:0] pos_length;
reg [31:0] neg_length;
reg pos_cntstop;
reg neg_cntstop;


always @ (posesge sys_clk) begin

if (in_signal) begin
       pos_length <= pos_length + 1;
           end
    else begin pos_length <= pos_length;
               pos_cntstop <= 1;
         end
if (!in_signal) begin
       neg_length <= neg_length + 1;
           end
    else begin neg_length <= neg_length;
               neg_cntstop <= 1;
         end
if (neg_cntstop && pos_cntstop) begin

     total_T <= neg_length + pos_length;
     neg_cntstop <= 0;
     neg_length  <= 0;
     pos_cntstop <= 0;
     pos_length  <= 0;

     end
end
endmodule
    
pregunta Metaeyo

1 respuesta

0

Hay varios elementos que deberá abordar.

Suponiendo que la señal de entrada es asíncrona con la señal del reloj, deberá usar un par de flop-flops para sincronizar los bordes de entrada con el reloj. Puede agregar un tercer flip-flop y decodificar para crear un impulso de ciclo de 1 reloj que se produce en cada flanco ascendente de la señal de entrada.

Esto simplificará su circuito contador; solo necesitará un contador, porque contar los relojes entre los dos pulsos corresponderá a un período.

Como menciona Prakesh en los comentarios anteriores, deberá bloquear los resultados del contador porque el valor del contador seguirá cambiando con cada ciclo de reloj.

    
respondido por el B Pete

Lea otras preguntas en las etiquetas