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
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
0