Cómo utilizar el lenguaje Verilog HDL para implementar la detección de períodos de secuencias de ondas cuadradas
clk2,
rst_2,
período);
entrada clk,clk2,rst_2;
período de salida [9:0];
período reg [9:0];
reg clk_1d;
reg cnt[9: p> p>
cable clk_pos;
siempre @ ( posedge clk2 o negedge rst_2 ) comienza
si ( rst_2 == 1'b0 ) comienza
clk_1d <= 1'b0;
fin
más comenzar
clk_1d <= clk;
fin
fin
asignar clk_pos = clk & (~clk_1d);
siempre @ ( posedge clk2 o negedge rst_2 ) comenzar
if ( rst_2 == 1' b0 ) comenzar
cnt[9:0] <= 10'd0;
finalizar
else if ( clk_pos == 1' b1 ) comenzar p>
cnt[9:0] <= 10'd0;
fin
si no comienza
cnt[9:0] < = cnt [9:0] + 10'd1;
fin
fin
siempre @ ( posedge clk2 o negedge rst_2 ) comienzo
si (rst_2 == 1'b0) comienza
período[9:0] <= 10'd0;
final
si no (clk_pos == 1'b1 ) comenzar
período[9:0] <= cnt[9:0];
finalizar
si no comenzar
;
end
end
endmodule
Nota adicional: El período de reloj a medir es como máximo 1024 veces el frecuencia de reloj.
Buena suerte,
Timoteo