use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity segundo is
port ( pulso : inout std_logic:='0';
clk : in std_logic);
end entity;
architecture divisor of segundo is
signal count : integer :=1;
begin
process(clk) begin
if(clk'event and clk='1') then
count <=count+1;
if(count = 50000000) then --count = frec de reloj/frec deseada
PULSO <= not PULSO;
count <=1;
end if;
end if;
end process;
end architecture;
Nota: Variando el valor de count, se puede utilizar el componente como divisor de frecuencia y obtener cualquier frecuencia menor a la del reloj que se esté usando.
16 comentarios:
Hola que tal, gracias por compartir tu programa. Tengo una duda: porque a PULSO le asignas su negación??. El puerto inout de PULSO es la salida de 1HZ verdad??.
Para darle un duty cycle del 50%, si, es 1 Hz, medio segundo en alto y medio en bajo para completar un ciclo por segundo.
Hola, oye tengo una duda para que es ese inout PULSO? esa es la salida de la frecuencia deseada o que es?
Así es, es la salida como claramente se muestra en el diagrama.
Hola, como hago si quiero tener 2 salidas en el divisor de frecuencia? una salida sera mi LSB y la otra MSB. gracias
¿Dos salidas a diferentes frecuencias?
Que tal amigo gracias por compartir el codigo si yo quiero crear un temporizador que solo dure no se digamos que 4 min, tendira que modificar esta linea?
if(count = 50000000) then
y colocar lo equivalente a 4 min en lugar del 50000000, seria a si?
Podrías hacerlo asi, Victor, pero para frecuencias del orden de ciclos por minuto creo que sería una forma muy ineficiente porque la razón entre las frecuencias te daria un número enorme. Lo mejor sería mantener el divisor a 1 Hz y despues hacer una sentencia if (contador == 240), donde contador incrementa en cada flanco de subida de PULSO.
Hola oye que chido que compartas tu prgrama, estoy empezando en VHDL, oye el pulso como lo direcciono a un puerto para checar la señal en el osciloscopio? espero tu respuesta.
Que tal Ulises, eso depende de tu implementación física, a que dispositivo vas a cargar el programa?
Hola, tengo una duda, voy a trabajar en una coolrunnerII cuya frecuencia es 8Mhz y necesito que trabaje a 1segundo. Como haría? Gracias.
Hola, me gustaría que me explicaras el codigo paso a paso, te dejo mi correo marioamorales21@gmail.com
Hola, quiero crear un programa en vhdl que únicamente genere un pulso de 10 us, estoy pensando en usar el DCM de la tarjeta Spartan, pero no sé si sea la mejor idea. Creo que este código me puede servir, pero tengo dudas. Gracias por la respuesta.
como puedo hacer para utilizar esa frecuencia obtenida de 1hz como entrada de clock de un contador ?
debo crear otro process dentro de la misma entity?
saludos
Ahí mismo tienes un contador,en count
Amigo si tengo en la tarjeta un reloj de 8MHZ y quiero obtener una frecuencia de 11hz que variables deberia cambiar
Publicar un comentario