Circuitos Digitales - crnometro con VHDL

 
Vista:

crnometro con VHDL

Publicado por binario (1 intervención) el 18/04/2007 22:38:03
CRONOMETRO SINCRONO

necesito que le echen un vistazo a este cronometro aver si de momento tiene buena pinta, esk es mi primor trabajo.

NOTA : es solo un cronometro de 4 displays pero solo tengo exo de momento un bloque, es decir para el primer display

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY bloque_1 IS
PORT ( reset,clk,x : IN STD_LOGIC;
a : OUT STD_LOGIG_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC);
END bloque_1;

ARCHITECTURE bloque_1_a OF bloque_1 IS
TYPE estados IS (0,1,2,3,4,5,6,7,8,9);
SIGNAL e_actual:estados;
BEGIN
PROCESS(reset,clk)
BEGIN
IF reset='0' THEN
e_actual <= 0;
ELSIF(clk'EVENT AND clk='1')THEN
CASE e_actual IS
WHEN 0 =>
IF x='0' THEN e_actual<=0;
ELSE e_actual<=1;
END IF;
WHEN 1 =>
IF x='0' THEN e_actual<=1;
ELSE e_actual<=2;
END IF;
WHEN 2 =>
IF x='0' THEN e_actual<=2;
ELSE e_actual<=3;
END IF;
WHEN 3 =>
IF x='0' THEN e_actual<=3;
ELSE e_actual<=4;
END IF;
WHEN 4 =>
IF x='0' THEN e_actual<=4;
ELSE e_actual<=5;
END IF;
WHEN 5 =>
IF x='0' THEN e_actual<=5;
ELSE e_actual<=6;
END IF;
WHEN 6 =>
IF x='0' THEN e_actual<=6;
ELSE e_actual<=7;
END IF;
WHEN 7 =>
IF x='0' THEN e_actual<=7;
ELSE e_actual<=8;
END IF;
WHEN 8 =>
IF x='0' THEN e_actual<=8;
ELSE e_actual<=9;
END IF;
WHEN 9 =>
IF x='0' THEN e_actual<=9;
ELSE e_actual<=0;
END IF;
END CASE;
END IF;
END PROCESS;

PROCESS ( e_actual, x)
BEGIN
CASE e_actual IS
WHEN 0 =>
a <= "0000" ;
y <= '0';
WHEN 1 =>
a <= "0001" ;
y <= '0';
WHEN 2 =>
a <= "0010" ;
y <= '0';
WHEN 3 =>
a <= "0011" ;
y <= '0';
WHEN 4 =>
a <= "0100" ;
y <= '0';
WHEN 5 =>
a <= "0101" ;
y <= '0';
WHEN 6 =>
a <= "0110" ;
y <= '0';
WHEN 7 =>
a <= "0111" ;
y <= '0';
WHEN 8 =>
a <= "1000" ;
y <= '0';
WHEN 9 =>
a <= "1001" ;
y <='1';
END CASE ;
END PROCESS ;
END bloque_1_a

las salidas "a" ---> iran a un BCD 7 segmentos
la salida "y" ----> ira a la entrada del siguiente bloque para acer la funcion de la X
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Diseño de un cronómetro síncrono en VHDL

Publicado por Alejandro (117 intervenciones) el 28/08/2023 15:56:58
El código VHDL que has proporcionado parece estar en la dirección correcta para implementar un cronómetro síncrono utilizando un bloque para controlar el conteo en un display de 7 segmentos. Sin embargo, hay algunos detalles que podrían mejorarse y ajustarse:

1. Sintaxis: Hay algunos errores de sintaxis en tu código, como "STD_LOGIG_VECTOR" en lugar de "STD_LOGIC_VECTOR" y "Y <='1'" en lugar de "Y <= '1'". Asegúrate de que estos errores de sintaxis se corrijan para que el código pueda compilar correctamente.

2. Nombres de señales y puertos: Asegúrate de seguir una convención de nomenclatura coherente para las señales y puertos. Por ejemplo, los nombres de señales y puertos en VHDL generalmente están en minúsculas. Esto hace que el código sea más legible y siga las convenciones de estilo estándar.

3. Comportamiento del bloque: El bloque que has implementado parece encargarse del conteo y la generación de la salida para un display de 7 segmentos. Sin embargo, mencionaste que tienes varios displays, así que tendrás que replicar y conectar este bloque para cada uno de los displays en tu cronómetro.

4. Uso de tipos enumerados: Para los estados, puedes definir un tipo enumerado en lugar de usar enteros directamente. Esto hace que el código sea más legible y fácil de entender. Por ejemplo:

1
2
TYPE estados IS (s0, s1, s2, ..., s9);
SIGNAL e_actual : estados;

5. Comentarios: Añadir comentarios detallados a tu código puede ayudar a otros y a ti mismo a entender mejor su funcionamiento, especialmente a medida que el diseño se vuelve más complejo.

6. Combinacional vs. Secuencial: Ten en cuenta que el bloque que maneja la generación de salida para los displays es secuencial, mientras que la lógica que controla el estado y el cambio de estado es combinacional. Esto podría afectar la sincronización de las señales y podría requerir algunos ajustes dependiendo de la frecuencia de reloj y otros detalles de la implementación.

Recuerda que este es solo un primer paso en la implementación de tu cronómetro y que hay más trabajo por hacer para conectar todos los bloques y completar la funcionalidad completa del cronómetro. Además, te sugiero realizar pruebas exhaustivas en un entorno de simulación antes de llevarlo a una plataforma de hardware real.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar