Soy nuevo en FPGA y VHDL. Se suponía que el siguiente código era 5MHz
pero obtengo 4.167MHz
en mi alcance.
La placa FPGA que tengo es un Mojo v3
que tiene un reloj 50MHz
.
¿Qué estoy haciendo mal?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity clock is
port (
clk_50mhz : in std_logic;
rst : in std_logic;
clk_out : out std_logic
);
end clock;
architecture Behavioral of clock is
signal prescaler : unsigned(4 downto 0);
signal clk_out_i : std_logic;
begin
gen_clk : process(clk_50mhz, rst)
begin -- process gen_clk
if rst = '1' then
clk_out_i <= '0';
prescaler <= (others => '0');
elsif rising_edge(clk_50mhz) then -- rising clock edge
if prescaler = X"5" then -- (50_000_000 / 5_000_000) / 2
prescaler <= (others => '0');
clk_out_i <= not clk_out_i;
else
prescaler <= prescaler + "1";
end if;
end if;
end process gen_clk;
clk_out <= clk_out_i;
end Behavioral;