Red de conocimiento informático - Aprendizaje de código fuente - Reloj VHDL

Reloj VHDL

--Código fuente 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>

hex0, hex1, hex2, hex3, hex4, hex5: out std_logic_vector(6 downto 0));

end digital_clock

arquitectura uno; de digital_clock es

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

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>

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";

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