Tengo una placa Altera DE2 que genera un reloj de 50 MHz y estoy tratando de escribir un módulo verilog que pueda reducirlo a 1 Hz. ¿Cómo puedo hacer esto?
Tengo una placa Altera DE2 que genera un reloj de 50 MHz y estoy tratando de escribir un módulo verilog que pueda reducirlo a 1 Hz. ¿Cómo puedo hacer esto?
Es bastante simple, solo necesitamos construir un gran contador. Queremos que nuestro reloj de salida sea 50 millones de veces más lento que nuestro reloj de entrada. Para generar un ciclo de salida completo necesitamos alternar la salida dos veces. Por lo tanto, queremos cambiar la salida cada 25 millones de ciclos.
En general, el mejor tipo de contador que se usa para este tipo de cosas es un contador de "cuenta regresiva a cero" Realizaremos una cuenta regresiva en el rango de 24999999 (uno menos de 25 millones) a cero, luego repetiremos. Cada vez que nuestro contador llega a cero, cambiamos la salida. Nuestro contador debe tener al menos 25 bits para adaptarse a este rango de valores.
reg [24:0] counter;
output reg clkout;
input clkin
initial begin
counter = 0;
clkout = 0;
end
always @(posedge clkin) begin
if (counter == 0) begin
counter <= 24999999;
clkout <= ~clkout;
end else begin
counter <= counter -1;
end
end
Lea otras preguntas en las etiquetas verilog intel-fpga