Reloj VHDL
Nombre de archivo: digital_clock.vhd
biblioteca ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all
entidad reloj_digital es
puerto(
reset, clk: in std_logic;
hora, minitue, segundo: out std_logic_vector(7 downto 0); p>
p>
hex0, hex1, hex2, hex3, hex4, hex5: out std_logic_vector(6 downto 0));
end digital_clock
arquitectura uno; de digital_clock es p>
señal clk _count: std_logic_vector(22 abajo a 0);
señal clkm: std_logic
señal segundo1, segundo2: std_logic_vector(3 abajo a 0);
señal minitue1, minitue2: std_logic_vector(3 abajo a 0);
señal hora1, hora2: std_logic_vector(3 abajo a 0);
comenzar; p>
hora(7 hasta 0) lt;= hora2(3 hasta 0) amp hora1 (3 hasta 0);
minitue(7 hasta 0) lt;= minitue2(3 hasta 0) ) amp; minitue1( 3 hasta 0);
segundo(7 hasta 0) lt;= segundo2(3 hasta 0) amp segundo1(3 hasta 0);
proceso( clk)
comenzar
si (clk'event y clk ='1') entonces
clk_count lt = clk_count 1; > finalizar si;
finalizar proceso;
clkm lt;= clk_count(22);
------------- ----- ------
proceso(clkm)
comenzar
si(reset='1') entonces
hora2lt;="0000"; hora1lt;="0000"; minitue2lt;="0000";="0000".segundo2lt;="0000";="0000"; p> elsif (clkm 'evento y clkm='1') entonces
if (hora2 = "0101" y hora1 = "1001" y minitue2=" 0101" y
minitue1 = "1001" y segundo2 = "0101" y segundo1 = "1001") luego
hora2 lt; = "0000"; hora1 lt; = "0000"; minitue1 lt;="0000"; segundo2 lt;="0000"; segundo1 lt;="0000";
elsif(hora1 = "1001" y minitue2 = "0101" y minitue1 = "1001" y segundo2 = "0101" y segundo1 = "1001") entonces
hora2 lt;= hora2 lt;hora1 lt;="0000";minitue2 lt;="0000";minitue1 lt;="0000 "segundo2lt;="0000".segundo1lt;="0000";
elsif(minitue2 ="0101" y minitue1 ="1001" y segundo2 ="0101" y segundo1 ="1001") luego
hora1 lt;= hora1 1;minitue2 lt;="0000";minitue1 lt;="0000";segundo2lt;="0000";segundo1lt;="0000"
elsif(minitue1 ="1001" y second2 ="0101" y second1 ="1001") entonces
minitue2 lt;=minitue2 1;minitue1 lt;="0000"; second2lt;="0000" ; second1lt;="0000";
elsif(segundo2=" 0101" and second1="1001")then
minitue1 lt;=minitue1 1;segundo2lt;="0000" ; second1lt;="0000";
elsif(segundo1="1001")entonces
second2lt;= second2 1;segundo1lt;="0000";
else
segundo1lt; = segundo1
finalizar si
finalizar si
finalizar el proceso; >-----------------------
proceso(hora2, hora1, minitue2, minitue1, segundo2, segundo1)
comenzar
caso segundo1(3 hasta 0) es
cuando "0000" =gt;hex0(6 hasta 0) lt;="1000000";
Cuando "0001" =gt; hex0(6 hasta 0) lt;="1111001";
Cuando "0010" =gt.hex0(6 hasta 0) lt;="0100100" ;
Cuando "0011" =gt; hex0(6 hasta 0) lt;="0110000";
Cuando "0100" =gt; "0011001";
cuando "0101" =gt; hex0(6 hasta 0) lt;="0010010";
cuando "0110" =gt; ) lt;="0000010";
cuando "0111" =gt; hex0( 6 hasta 0) lt;="1111000";
cuando "1000" =gt; (6 abajo a 0) lt;="0000000";
cuando "1001" =gt; hex0(6 abajo a 0) lt;="0010000";
cuando other=gt ; hex0(6 abajo a 0) lt;="0010000";
cuando otros =gt; hex0(6 abajo a 0) lt;="0010000";
cuando otros =gt ; hex0(6 hasta 0) lt;="1000000";
fin de caso;
caso segundo2(3 hasta 0) es
cuando "0000" =gt;hex1(6 hasta 0) lt;="1000000";
fin de caso;
caso segundo2(3 hasta 0) es
cuando " 0000" =gt; hex1(6 hasta 0) lt;="1000000";
Cuando "0001" =gt; hex1(6 hasta 0) lt;="1111001";
Cuando "0010" =gt; hex1(6 hasta 0) lt;="0100100";
Cuando "0011" =gt; hex1(6 hasta 0) lt;="0110000";
Cuando "0100" =gt; hex1(6 hasta 0) lt;="0011001";
Cuando "0101" =gt; 0010010";
cuando otros =gt; hex1(6 hasta 0) lt;="1000000";
fin de caso;
caso minitue1(3 hasta 0) es
cuando "0000" =gt.hex2(6 hasta 0) lt;="1000000";
cuando "0001" =gt; hex2(6 hasta 0) lt;="1111001";
cuando "0010" =gt; hex2(6 hasta 0) lt;="0100100";
cuando "0011" =gt; 6 hasta 0) lt;="0110000";
cuando "0100" =gt; hex2(6 hasta 0) lt;="0011001";
cuando "0101" = gt;
hex2( 6 hasta 0) lt;="0010010";
cuando "0110" =gt; hex2( 6 hasta 0) lt;="0000010"
cuando "0111 " =gt; hex2( 6 hasta 0) lt; ="1111000";
Cuando "0111" =gt; hex2( 6 hasta 0) lt; ="1111000";
Cuando "1000" =gt; hex2(6 hasta 0) lt;="0000000";
Cuando "1001" =gt; hex2(6 hasta 0) lt;="0010000"; p> p>
cuando other=gt;hex2(6 hasta 0) lt;="1000000";
finaliza el caso;
caso minitue2(3 hasta 0) es
p>
Cuando "0000" =gt; hex3(6 abajo a 0) lt;="1000000";
Cuando "0001" =gt3(6 abajo; 0) lt;="1111001 ";
Cuando "0010" =gt; hex3(6 abajo a 0) lt;="0100100";
Cuando "0011" =gt; hex3(6 hasta 0) lt ;="0110000";
cuando "0100" =gt; hex3(6 hasta 0 ) lt;="0011001";
cuando "0101 " =gt; hex3(6 hasta 0 ) lt;="0010010";
cuando otros =gt; hex3(6 hasta 0 ) lt;="1000000";
fin case;
caso hora1(3 hasta 0) es
cuando "0000" =gt; hex4(6 hasta 0) lt;="1000000";
cuando "0001" =gt ; hex4(6 hasta 0) lt;="1111001";
cuando "0010" =gt; hex4(6 hasta 0) lt;="0100100"; p>
cuando" 0011" =gt; hex4(6 hasta 0) lt;="0100100";
Cuando "0011" =gt; hex4(6 hasta 0) lt; hex4(6 hasta 0) lt ;="0110000";
cuando "0100" =gt; hex4(6 hasta 0) lt;="0011001";
cuando "0101 " =gt; hex4(6 hasta 0) lt;="0010010";
cuando "0110" =gt; hex4(6 hasta 0) lt;="0000010";
cuando "0111" =gt ; hex4(6 hasta 0) lt;="1111000";
cuando "1000" =gt; hex4(6 hasta 0) lt;= hex4(6 hasta 0)
0) lt;="0000000";
cuando "1001" =gt; hex4(6 hasta 0) lt;="0010000";
cuando otro=gt; 6 abajo a 0) lt;=" 1000000";
fin del caso;
caso hora2(3 abajo a 0) es
cuando "0000" =gt; hex5(6 hasta 0) lt;="1000000";
cuando "0001" =gt; hex5(6 hasta 0) lt;="1111001";
cuando "0010 " " =gt; hex5(6 hasta 0) lt;="0100100";
Cuando "0011" =gt; hex5(6 hasta 0) lt;="0110000";
Cuando "0011" =gt; hex5(6 hasta 0) lt;="0110000";
Cuando "0100" =gt; ;
Cuando "0101" =gt; hex5(6 hasta 0) lt;="0010010";
Cuando other =gt; 1000000";
fin de caso;
final de proceso;
fin de uno;
---- - Verificado en placa DE2. la frecuencia del reloj es un poco alta, puedes agregar más bits a clk_count para ajustar