Contador en vhdl con divisor de frecuencia

#1
Hola a todos los colaboradores del foro:), estoy aprendiendo a programar en vhdl y hace poco compre una nexys 3 en la cual estoy probando un programa sencillo como un contador de 4 bits, el problema es el divisor de frecuencia ya que la nexys 3 trabaja con 100 Mhz (CLk) y en la fpga en realidad solo veo, los led prendidos aquí dejo mi código por si alguien me puede ayudar.
Código:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity contadorvhdl is
    Port ( 
           rst : in  STD_LOGIC;
           cnt_out : out  STD_LOGIC_VECTOR (3 downto 0);
              clock: in std_logic;
              freq200:out std_logic);
end contadorvhdl;

architecture Behavioral of contadorvhdl is

signal cnt: std_logic_vector (3 downto 0);
signal cont: integer range  0 to 50000000:=0;
signal clk:std_logic;


begin

 
freq200<=clk;
process (clock,rst,cnt)

begin
 if rst='1' then
 cnt<= "0000";
    elsif  rising_edge (clock) then
 
 cnt<=cnt +'1';
  end if;
  
 if clock'event and clock = '0' then
        if cont =   50000000 then
            clk <= not clk;
            cont <= 0;
        else
            cont <= cont + 1;
        end if;
    end if;
end process;

 cnt_out<=cnt;
 
 
end Behavioral;
 
Última edición por un moderador:
#2
Hola,
En un proceso no debería de haber más de una sentencia de reloj. En tu diseño tienes dos sentencias de reloj dentro del proceso:
Código:
   elsif  [COLOR="Red"]rising_edge (clock)[/COLOR] then
....
   if [COLOR="Red"]clock'event and clock[/COLOR] = '0' then
El capítulo 5 de este libro (http://hdl.handle.net/10115/4045)
te puede ayudar a saber cómo poner las sentencias de reloj dentro de un proceso, y en el siguiente a hacer contadores.

Saludos
 

Temas similares

Arriba