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