Multiplicador de Frecuencias en VHDL

El semestre esta semana ya empezo.. obviamente con nuevas cosas por cumplir... este año espero poder presentar otro proyecto pa la feria, y poder ganarme algo por lo menos como en la anterior feria. SERIA GENIAL SI LOS DE LA IEA den por lo menos certificados de primer lugar por lo menos que de alguna manera sirve de curriculum.

Bueno sin mas chachara.. les presento como realizar un multiplicador de frecuencias en vhdl, implementado solo en simulacion tanto en xilinx como en altera. (esto lo respondi hace algun tiempo en forosdeelectronica.com pero no lo puse por aca por alguna razon que no me acuerdo).


El codigo vhdl esta muy extenso se puede reducir las lineas de programa. podemos cambiar a gusto el numero multilplicador en programa, tambien se lo podria hacer por seleccion externa con
los switch de la tarjeta altera o spartan.

Código:
-- multiplica por "n" un valor de frecuencia de entrada. salida=entrada*n
library ieee;
use ieee.std_logic_1164.all;

entity m_frec is
generic (n: integer:=4); --Define numero N multiplicador
port ( entrada: in std_logic;
clk_27Mhz:in std_logic;
salida: out std_logic);
end m_frec;

architecture rtl of m_frec is
signal cuenta,cuenta2,div,M: integer:=0;
signal f_in,f_sal:std_logic;
begin
process (clk_27Mhz)
begin
if (clk_27Mhz'event and clk_27Mhz = '1') then
f_in <= entrada;
end if;
end process;
process (f_in,clk_27Mhz)
begin
if (f_in = '1') then
cuenta <= 0;
elsif (clk_27Mhz'event and clk_27Mhz = '0') then
cuenta <= cuenta + 1;
end if;
end process;
process (f_in)
begin
if (f_in'event and f_in = '1') then
M <= cuenta;
end if;
end process;
div <= (M-1)/N;
process (clk_27Mhz)
begin
if (Clk_27Mhz'event and Clk_27Mhz = '1') then
if (cuenta2 = div) then
cuenta2 <= 0;
f_sal <= not f_sal;
else cuenta2 <= cuenta2 + 1;
end if;
end if;
end process;
salida <= f_sal;
end rtl; 

Generando las ondas prueba (observar las imagenes), en el programa en quartus II, observamos que efectivamente se multiplico por 4. Ahora bien,en tu caso podemos multiplicar la frecuencia de entrada por cualquier numero n (yo lo probe con 2,3,4,...10) cuando n=7 hay un ligero error.
nota: lo simule en timing, para observar un comportamiento un poco mas"real" de lo que sucederia.