-- Supongamos una frecuencia de entrada de 50 MHz y queremos una frecuencia de salida de 100 Hz y otra de 500 HZ
-- 50000000 / 100 = 500000 cuentas
-- 50000000 / 500 = 100000 cuentas
entity divisor_frecuencia is
port(clkin: in std_logic;
clk100: out std_logic;
clk500: out std_logic);
end divisor_frecuencia;
architecture Behavioral of divisor_frecuencia is
signal clk100i,clk500i: std_logic;
begin
reloj100: process(clkin,reset)
variable contador100: integer;
begin
if(reset = '0') then
contador100 := 0;
clk100i <= '0';
else
if (clkin'event and clkin = '1') then
if (contador100 = 250000) then
clk100i <= not clk100i; -- Invertimos clk100i cada semiperiodo
contador100 := 0;
else
contador100 := contador100 + 1;
end if;
end if;
end if;
end process;
reloj500: process(clkin,reset)
begin
-- Igual que el anterior pero implementando una cuenta apropiada para actuar sobre clk500i
end process;
clk100 <= clk100i;
clk500 <= clk500i;
end Behavioral;