Tengo un reloj del sistema de 100Mhz y me gustaría tener una señal de habilitación de 200Hz para habilitar la máquina de estados. Necesito un divisor de reloj para este proceso y pensé en esto:
clkdiv : process (clk)
begin
if (clk'event and clk = '1') then -- rising clock edge
-- default value
EN <= '0';
clkcntr <= clkcntr - 1;
if clkcntr = 0 then
clkcntr <= X"7A120"; -- 500000 decimal value
EN <= '1';
end if;
end if;
end process clkdiv;
He visto otras implementaciones en Internet que siempre comienzan a dividirse primero con 100Mhz a 2. En mi caso, debería disminuir el tiempo de 250000 para igualar esto, es porque clk es 1-0-1-0-1-0- 1-0, ya que estamos interesados en el flanco ascendente, ¿también debemos considerar los tiempos del flanco descendente? Me alegraría si alguien pudiera demostrar un divisor de reloj adecuado. Luego, cuando termine, me gustaría ingresar a la máquina de estado con una condición if
if EN = '1' then
go into the state machine
end if;
Al final, me gustaría que la duración de mi señal de salida del FSM fuera de 200Hz, ¿sería correcto? ¿Hay otras formas de implementar esto?