Mudanças entre as edições de "PROJETO FINAL - Grupo 2 - SST"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 13: Linha 13:
 
==Pinagem DE2-115==
 
==Pinagem DE2-115==
 
[[Arquivo: pinagem_relogioDigital.png|900px]]
 
[[Arquivo: pinagem_relogioDigital.png|900px]]
 +
 +
 +
==VHDL==
 +
;Descrição:
 +
*A abordagem utilizada foi comportamental.
 +
*O relógio possui 2 estados: st0 e st1. O estado st0 é responsável por realizar a contagem do relógio e permite que sua contagem seja resetada. O estado st1 é responsável pelo ajuste do relógio, quando há a troca de estado, este mantém o relógio parado e através de 3 entradas é possível alterar a hora, o minuto e o segundo.
 +
*As saídas são exibidas em 6 display de 7-segmentos.
 +
*O código possui 2 processos: síncrono e combinacional.
 +
**O primeiro processo define a troca dos estados, que estão atrelados a entrada "Estado" (presente na lista de sensibilidade deste process), quando a entrada "Estado" é '0', assume-se st0 (Contando), quando a entrada "Estado" é '1' assume-se st1 (ajustando). 
 +
**O segundo processo define os estados st0 e st1 através de instruções de seleção (case/when). Possui na lista de sensibilidade o clock, reset e os botões de ajuste de hora/minuto/segundo.
 +
*A transição entre os estados "Contando" e "Ajustando" são independentes.
 +
*A saída de ambos os estados obedecem o princípio da Máquina de Mealy, onde as saídas dependem do estado atual e também das entradas.
 +
 +
{{Collapse top | Código}}
 +
 +
:<syntaxhighlight lang=vhdl>
 +
 +
LIBRARY ieee;
 +
USE ieee.std_logic_1164.all;
 +
 +
ENTITY relogio IS
 +
 +
generic(
 +
 +
fclk: integer := 50000000 --clock freq in Hz
 +
 +
);
 +
port (
 +
     
 +
--A entrada Estado é reponsável pela troca de estados (contando ou ajustando);
 +
--As entradas as,am e ah são os botões de entrada para efetuar o ajuste do segundo/minuto/hora;
 +
--As saídas foram divididas em 6 displays 7-segmentos;
 +
rst, clk, estado, as, am, ah : in std_logic;
 +
dig1, dig2, dig3, dig4, dig5, dig6 : out std_logic_vector (6 downto 0)
 +
     
 +
);
 +
end entity;
 +
 +
architecture funcio of relogio is
 +
 +
type state_type is (st0, st1); --Arquitetura possui 2 estados st0: onde o relógio está contando e
 +
--st1: quando o relógio está parado para ajuste;
 +
signal state : state_type;
 +
 +
begin
 +
 +
-- Processo responsável por atualizar o Estado, st0:contando st1: parado para ajuste;
 +
process (estado)
 +
begin
 +
-- Quando a key "Estado" estiver em '0' o estado atual é st0, e quando estiver em '1' o estado atual é st1
 +
if (estado='0') then
 +
state <= st0;
 +
else
 +
state <= st1;
 +
end if;
 +
 +
end process;
 +
 +
 +
--Processo resposável pela implementação dos Estados st0 e st1
 +
--Este processo é sensível ao clock, reset e os botões de entrada para ajuste(as,am,ah)
 +
process(clk,rst,as,am,ah)
 +
 +
-- Variaveis responsaveis por guarda valores dos contadores. Final 0 esta atrelado ao estaod 0; final 1 esta atrelado ao estado st1;
 +
variable ss0, ss1: integer range 0 to 60;
 +
variable mm0, mm1: integer range 0 to 60;
 +
variable hh0, hh1: integer range 0 to 24;
 +
 +
-- Variavel count e responsavel por realizar a contagem que vai de 0 at´e fclk, que no caso e 50MHz,
 +
  -- ou seja, apos esse periodo a variavel e incrementada em 1.
 +
variable count : integer range 0 to fclk;
 +
 +
--Variaveis responsaveis por guardar valor final do algarismo
 +
variable s1,s2,m1,m2,h1,h2 : integer range 0 to 9;
 +
--Variaveis auxiliares responsaveis por atualizar o horario apos ajuste
 +
variable aux0, aux1, aux2 : integer range 0 to 60;
 +
 +
begin
 +
 +
--Implementação dos estados
 +
case state is
 +
 +
when st0 =>
 +
 +
if (clk'event and clk='1') then -- Quando houver um evento na borda de subida do clk e o clk for igual a 1;
 +
 +
count := count + 1;  --Dispara o contador ou incrementa;
 +
 +
if (rst='0') then  --Se o botão reset estiver em '0', as variáveis do st0 são setadas e a contagem volta para 0;
 +
 +
ss0 := 0;
 +
mm0 := 0;
 +
hh0 := 0;
 +
count :=0;
 +
 +
elsif (count=fclk) then  --Se não, se o coount for igual a freq de clock (50MHz)
 +
 
 +
ss0 := ss0 + 1;  --Incrementa 1 no valor do segundo (ss0)
 +
 +
 +
--Se a variável segundo (ss0) for igual a 60, ele reseta a variável ss0 ('0') e começa contagem
 +
--da variável minuto (mm0);  
 +
if (ss0 = 60) then 
 +
ss0 := 0; -- '60' segundos não aparece, aparece '0'
 +
mm0 := (mm0 + 1);
 +
 +
--Se a variável minuto (mm0) for igual a 60, ele reseta a variável mm0 ('0') e começa contagem
 +
--da variável hora (hh0);
 +
if (mm0 = 60) then
 +
 +
mm0 := 0; -- '60' minutos não aparece, aparece '0'
 +
hh0 := hh0 + 1;
 +
 +
--Se a variável hora (hh0) for igual a 24, ele reseta a variável hh0 ('0')
 +
if (hh0 = 24) then
 +
 +
hh0 := 0; -- '24' minutos não aparece, aparece '0'
 +
 +
end if;
 +
end if;
 +
end if;
 +
 +
count := 0; -- zera o contador;
 +
 +
end if;
 +
 +
end if;
 +
 +
-- Atualizando saida --
 +
s2 := ss0/10; -- dezena /pega a variavel ss0 e divide por dez, o resultado coloca na variavel s2
 +
s1 := ss0 rem 10; -- unidade /pega a variavel ss0 e divide por dez, pega o resto e colocar na variavel s1
 +
 +
m2 := mm0/10; -- dezena /pega a variavel mm0 e divide por dez, o resultado coloca na variavel m2
 +
m1 := mm0 rem 10; -- unidade /pega a variavel mm0 e divide por dez, pega o resto e colocar na variavel m1
 +
 +
h2 := hh0/10; -- dezena /pega a variavel hh0 e divide por dez, o resultado coloca na variavel h2
 +
h1 := hh0 rem 10; -- unidade /pega a variavel hh0 e divide por dez, pega o resto e colocar na variavel h1
 +
 +
 +
when st1 =>
 +
 +
--Se houver uma mudança na borda de descida do botão de ajuste de segundos, ele incrementa a variável ss1
 +
--a partir da variável que estava contando no estado anterior (ss0)
 +
--quando chegar em 60 ele reseta a variável segundos do st1(ss1);
 +
if (falling_edge (as)) then
 +
 +
--aux0: e testada para atualizar o valor apos o ajuste
 +
aux0 := (ss0 + 1);
 +
ss1 := (ss0 + 1);
 +
if (ss1 = 60) then
 +
ss1 :=0;
 +
end if;
 +
end if;
 +
 +
 +
--Se houver uma mudança na borda de descida do botão de ajuste de minuto, ele incrementa a variável mm1
 +
--a partir da variável que estava contando no estado anterior (mm0)
 +
--quando chegar em 60 ele reseta a variável minutos do st1(mm1);
 +
if (falling_edge (am)) then
 +
 +
--aux1: e testada para atualizar o valor apos o ajuste
 +
  aux1 := (mm0 + 1);
 +
mm1 := (mm0 + 1);
 +
if (mm1 = 60) then
 +
mm1 :=0;
 +
end if;
 +
end if;
 +
 +
--Se houver uma mudança na borda de descida do botão de ajuste de  hora, ele incrementa a variável hh1
 +
--a partir da variável que estava contando no estado anterior (hh0)
 +
--quando chegar em 24 ele reseta a variável hora do st1(hh1);
 +
if (falling_edge (ah)) then
 +
 +
--aux2: e testada para atualizar o valor apos o ajuste
 +
    aux2 := (hh0 + 1);
 +
hh1 := (hh0 + 1);
 +
if (hh1 = 24) then
 +
hh1 :=0;
 +
end if;
 +
end if;
 +
 +
--Se o valor de aux0 for ajustado, a variável do st0 (ss0) também é atualizada, para que
 +
--quando o relógio voltar para o estado "contado" ele retorne a contagem de onde o relogio foi ajustado;
 +
if aux0 =(ss0+1) then
 +
ss0 := ss1;
 +
count :=0;
 +
 +
elsif aux1=(mm0+1) then
 +
 +
mm0 := mm1;
 +
count :=0;
 +
 +
elsif aux2=(hh0+1) then
 +
 +
hh0 := hh1;
 +
count :=0;
 +
end if;
 +
 +
-- Atualizando saida --
 +
s2 := ss0/10; -- dezena /pega a variavel ss0 e divide por dez, o resultado coloca na variavel s2
 +
s1 := ss0 rem 10; -- unidade /pega a variavel ss0 e divide por dez, pega o resto e colocar na variavel s1
 +
 +
m2 := mm0/10; -- dezena /pega a variavel mm0 e divide por dez, o resultado coloca na variavel m2
 +
m1 := mm0 rem 10; -- unidade /pega a variavel mm0 e divide por dez, pega o resto e colocar na variavel m1
 +
 +
h2 := hh0/10; -- dezena /pega a variavel hh0 e divide por dez, o resultado coloca na variavel h2
 +
h1 := hh0 rem 10; -- unidade /pega a variavel hh0 e divide por dez, pega o resto e colocar na variavel h1
 +
 +
when others =>
 +
-- Atualizando saida obrigatoriamente para não haver erros de compilação--
 +
s2 := 0; -- dezena
 +
s1 := 0; -- unidade
 +
 +
m2 := 0; -- dezena
 +
m1 := 0; -- unidade
 +
 +
h2 := 0; -- dezenaatoriamente para não haver erros de compilação--
 +
s2 := 0; -- dezena
 +
h1 := 0; -- unidade
 +
 +
end case;
 +
 +
--Implementação do display 7 segmentos:
 +
case s1 is
 +
when 0 => dig1 <=  "0000001"; --126
 +
when 1 => dig1 <=  "1001111"; --48
 +
when 2 => dig1 <=  "0010010"; --109
 +
when 3 => dig1 <=  "0000110";  --121
 +
when 4 => dig1 <=  "1001100"; --51
 +
when 5 => dig1 <=  "0100100"; --91
 +
when 6 => dig1 <=  "0100000"; --95
 +
when 7 => dig1 <=  "0001111";--112
 +
when 8 => dig1 <=  "0000000"; --127 
 +
when 9 => dig1 <=  "0000100";--123
 +
when others => dig1 <= "1111111";
 +
end case;
 +
 +
case s2 is
 +
when 0 => dig2 <= not "1111110"; --126
 +
when 1 => dig2 <= not "0110000"; --48
 +
when 2 => dig2 <= not "1101101"; --109
 +
when 3 => dig2 <= not "1111001";  --121atoriamente para não haver erros de compilação--
 +
s2 := 0; -- dezena
 +
when 4 => dig2 <= not "0110011"; --51
 +
when 5 => dig2 <= not "1011011"; --91
 +
when 6 => dig2 <= not "1011111"; --95
 +
  when others => dig2 <= "1111111";
 +
end case;
 +
 +
case m1 is
 +
when 0 => dig3 <= not "1111110"; --126
 +
when 1 => dig3 <= not "0110000"; --48
 +
when 2 => dig3 <= not "1101101"; --109
 +
when 3 => dig3 <= not "1111001";  --121
 +
when 4 => dig3 <= not "0110011"; --51
 +
when 5 => dig3 <= not "1011011"; --91
 +
when 6 => dig3 <= not "1011111"; --95
 +
when 7 => dig3 <= not "1110000";--112
 +
when 8 => dig3 <= not "1111111"; --127 
 +
when 9 => dig3 <= not "1111011";--123
 +
when others => dig3 <= "1111111";
 +
end case;
 +
 +
case m2 is
 +
when 0 => dig4 <= not "1111110"; --126
 +
when 1 => dig4 <= not "0110000"; --48
 +
when 2 => dig4 <= not "1101101"; --109
 +
when 3 => dig4 <= not "1111001";  --121
 +
when 4 => dig4 <= not "0110011"; --51
 +
when 5 => dig4 <= not "1011011"; --91
 +
when 6 => dig4 <= not "1011111"; --95
 +
when others => dig4 <= "1111111";
 +
end case;
 +
 +
case h1 is
 +
when 0 => dig5 <= not "1111110"; --126
 +
when 1 => dig5 <= not "0110000"; --48
 +
when 2 => dig5 <= not "1101101"; --109
 +
when 3 => dig5 <= not "1111001";  --121
 +
when 4 => dig5 <= not "0110011"; --51
 +
when 5 => dig5 <= not "1011011"; --91
 +
when 6 => dig5 <= not "1011111"; --95
 +
when 7 => dig5 <= not "1110000";--112
 +
when 8 => dig5 <= not "1111111"; --127 
 +
when 9 => dig5 <= not "1111011";--123
 +
when others => dig5 <= "1111111";
 +
end case;
 +
 +
case h2 is
 +
when 0 => dig6 <= not "1111110"; --126
 +
when 1 => dig6 <= not "0110000"; --48
 +
when 2 => dig6 <= not "1101101"; --109
 +
when 3 => dig6 <= not "1111001";  --121
 +
when 4 => dig6 <= not "0110011"; --51
 +
when 5 => dig6 <= not "1011011"; --91
 +
when 6 => dig6 <= not "1011111"; --95
 +
when others => dig6 <= "1111111";
 +
end case;
 +
 +
end process;
 +
   
 +
END ARCHITECTURE;
 +
 +
 +
</syntaxhighlight>
 +
 +
{{Collapse bottom}}

Edição atual tal como às 13h31min de 19 de junho de 2015

Projeto Final - Grupo 2

Alunos: Kamila, Leonardo Oliveira e Renan;

Diagrama de Estados

Diag estados.png

Formas de onda

  • Exemplo da forma de onda sem as saídas dos display para visualização em Decimal:

Wave relogioDigital.png

Pinagem DE2-115

Pinagem relogioDigital.png


VHDL

Descrição
  • A abordagem utilizada foi comportamental.
  • O relógio possui 2 estados: st0 e st1. O estado st0 é responsável por realizar a contagem do relógio e permite que sua contagem seja resetada. O estado st1 é responsável pelo ajuste do relógio, quando há a troca de estado, este mantém o relógio parado e através de 3 entradas é possível alterar a hora, o minuto e o segundo.
  • As saídas são exibidas em 6 display de 7-segmentos.
  • O código possui 2 processos: síncrono e combinacional.
    • O primeiro processo define a troca dos estados, que estão atrelados a entrada "Estado" (presente na lista de sensibilidade deste process), quando a entrada "Estado" é '0', assume-se st0 (Contando), quando a entrada "Estado" é '1' assume-se st1 (ajustando).
    • O segundo processo define os estados st0 e st1 através de instruções de seleção (case/when). Possui na lista de sensibilidade o clock, reset e os botões de ajuste de hora/minuto/segundo.
  • A transição entre os estados "Contando" e "Ajustando" são independentes.
  • A saída de ambos os estados obedecem o princípio da Máquina de Mealy, onde as saídas dependem do estado atual e também das entradas.
Código
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY relogio IS

	generic(
	
		fclk: 	integer := 50000000 --clock freq in Hz

	);
	port (
      
		--A entrada Estado é reponsável pela troca de estados (contando ou ajustando);
		--As entradas as,am e ah são os botões de entrada para efetuar o ajuste do segundo/minuto/hora;
		--As saídas foram divididas em 6 displays 7-segmentos;
		rst, clk, estado, as, am, ah		: in 	std_logic;
		dig1, dig2, dig3, dig4, dig5, dig6 : out std_logic_vector (6 downto 0)
      
	);
end entity;

architecture funcio of relogio is

	type state_type is (st0, st1); --Arquitetura possui 2 estados st0: onde o relógio está contando e 
											--st1: quando o relógio está parado para ajuste;
	signal state : state_type;
	
begin

-- Processo responsável por atualizar o Estado, st0:contando st1: parado para ajuste;
	process (estado)
		begin	
		-- Quando a key "Estado" estiver em '0' o estado atual é st0, e quando estiver em '1' o estado atual é st1
				if (estado='0') then
					state <= st0;
				else
					state <= st1;
				end if;
			
	end process;
	
	
	--Processo resposável pela implementação dos Estados st0 e st1
	--Este processo é sensível ao clock, reset e os botões de entrada para ajuste(as,am,ah)
	process(clk,rst,as,am,ah)
	
	-- Variaveis responsaveis por guarda valores dos contadores. Final 0 esta atrelado ao estaod 0; final 1 esta atrelado ao estado st1;
		variable ss0, ss1: integer range 0 to 60;
		variable mm0, mm1: integer range 0 to 60;
		variable hh0, hh1: integer range 0 to 24; 
	
	-- Variavel count e responsavel por realizar a contagem que vai de 0 at´e fclk, que no caso e 50MHz,
   --	ou seja, apos esse periodo a variavel e incrementada em 1.	
		variable count : integer range 0 to fclk;
		
	--Variaveis responsaveis por guardar valor final do algarismo 	
		variable s1,s2,m1,m2,h1,h2	: integer range 0 to 9;
	--Variaveis auxiliares responsaveis por atualizar o horario apos ajuste 	
		variable aux0, aux1, aux2 : integer range 0 to 60;
		
	begin
	
	--Implementação dos estados
		case state is

			when st0 =>

				if (clk'event and clk='1') then -- Quando houver um evento na borda de subida do clk e o clk for igual a 1;
	
					count := count + 1;  --Dispara o contador ou incrementa;
					
					if (rst='0') then  --Se o botão reset estiver em '0', as variáveis do st0 são setadas e a contagem volta para 0;

						ss0 := 0;
						mm0 := 0;
						hh0 := 0;
						count :=0;
						
					elsif (count=fclk) then   --Se não, se o coount for igual a freq de clock (50MHz)
  
						ss0 := ss0 + 1;   --Incrementa 1 no valor do segundo (ss0)
						
						
						--Se a variável segundo (ss0) for igual a 60, ele reseta a variável ss0 ('0') e começa contagem 
						--da variável minuto (mm0);		  
						if (ss0 = 60) then  
							ss0 := 0; -- '60' segundos não aparece, aparece '0'
							mm0 := (mm0 + 1); 
				
						--Se a variável minuto (mm0) for igual a 60, ele reseta a variável mm0 ('0') e começa contagem 
						--da variável hora (hh0);
							if (mm0 = 60) then
						
								mm0 := 0; -- '60' minutos não aparece, aparece '0'
								hh0 := hh0 + 1;
						
						--Se a variável hora (hh0) for igual a 24, ele reseta a variável hh0 ('0')
								if (hh0 = 24) then
						
									hh0 :=	0; -- '24' minutos não aparece, aparece '0'
						
								end if;
							end if;
						end if;
			
						count := 0; -- zera o contador;
			
					end if;
					
				end if;
				
				-- Atualizando saida --
				s2	:= ss0/10; 			-- dezena /pega a variavel ss0 e divide por dez, o resultado coloca na variavel s2
				s1	:= ss0 rem 10;		-- unidade /pega a variavel ss0 e divide por dez, pega o resto e colocar na variavel s1
	 
				m2	:= mm0/10; 			-- dezena /pega a variavel mm0 e divide por dez, o resultado coloca na variavel m2
				m1	:= mm0 rem 10;		-- unidade /pega a variavel mm0 e divide por dez, pega o resto e colocar na variavel m1
	 
				h2	:= hh0/10; 			-- dezena /pega a variavel hh0 e divide por dez, o resultado coloca na variavel h2
				h1	:= hh0 rem 10;		-- unidade /pega a variavel hh0 e divide por dez, pega o resto e colocar na variavel h1
				
			
			when st1 =>
			
			--Se houver uma mudança na borda de descida do botão de ajuste de segundos, ele incrementa a variável ss1
			--a partir da variável que estava contando no estado anterior (ss0)
			--quando chegar em 60 ele reseta a variável segundos do st1(ss1);
				if (falling_edge (as)) then
				
				--aux0: e testada para atualizar o valor apos o ajuste
					aux0 := (ss0 + 1);	
					ss1 := (ss0 + 1);
						if (ss1 = 60) then
							ss1 :=0;
						end if;
				end if;
				
				
			--Se houver uma mudança na borda de descida do botão de ajuste de minuto, ele incrementa a variável mm1
			--a partir da variável que estava contando no estado anterior (mm0)
			--quando chegar em 60 ele reseta a variável minutos do st1(mm1);
				if (falling_edge (am)) then
				
				--aux1: e testada para atualizar o valor apos o ajuste
		 		   aux1 := (mm0 + 1);
					mm1 := (mm0 + 1);
						if (mm1 = 60) then
							mm1 :=0;
						end if;
				end if;			
	
			--Se houver uma mudança na borda de descida do botão de ajuste de  hora, ele incrementa a variável hh1
			--a partir da variável que estava contando no estado anterior (hh0)
			--quando chegar em 24 ele reseta a variável hora do st1(hh1);
				if (falling_edge (ah)) then
				
				--aux2: e testada para atualizar o valor apos o ajuste
			    	aux2 := (hh0 + 1);
					hh1 := (hh0	+ 1);
						if (hh1 = 24) then
							hh1 :=0;
						end if;
				end if;

				--Se o valor de aux0 for ajustado, a variável do st0 (ss0) também é atualizada, para que 
				--quando o relógio voltar para o estado "contado" ele retorne a contagem de onde o relogio foi ajustado;
				if aux0 =(ss0+1) then
						ss0 := ss1;
						count :=0;
						
					elsif aux1=(mm0+1) then

						mm0 := mm1;
						count :=0;
						
					elsif aux2=(hh0+1) then 
						
						hh0 := hh1; 
					count :=0;
				end if;
				
		-- Atualizando saida --
				s2	:= ss0/10; 			-- dezena /pega a variavel ss0 e divide por dez, o resultado coloca na variavel s2
				s1	:= ss0 rem 10;		-- unidade /pega a variavel ss0 e divide por dez, pega o resto e colocar na variavel s1
	 
				m2	:= mm0/10; 			-- dezena /pega a variavel mm0 e divide por dez, o resultado coloca na variavel m2
				m1	:= mm0 rem 10;		-- unidade /pega a variavel mm0 e divide por dez, pega o resto e colocar na variavel m1
	 
				h2	:= hh0/10; 			-- dezena /pega a variavel hh0 e divide por dez, o resultado coloca na variavel h2
				h1	:= hh0 rem 10;		-- unidade /pega a variavel hh0 e divide por dez, pega o resto e colocar na variavel h1
				
				when others =>
				-- Atualizando saida obrigatoriamente para não haver erros de compilação--
				s2	:= 0; 	-- dezena
				s1	:= 0;		-- unidade
	 
				m2	:= 0; 	-- dezena
				m1	:= 0;		-- unidade
	 
				h2	:= 0; 	-- dezenaatoriamente para não haver erros de compilação--
				s2	:= 0; 	-- dezena
				h1	:= 0;		-- unidade
				
		end case;
		
	--Implementação do display 7 segmentos:	
		case s1 is
		 when 0 => dig1 <=  "0000001"; --126
		 when 1 => dig1 <=  "1001111"; --48
		 when 2 => dig1 <=  "0010010"; --109
		 when 3 => dig1 <=  "0000110";  --121
		 when 4 => dig1 <=  "1001100"; --51
		 when 5 => dig1 <=  "0100100"; --91
		 when 6 => dig1 <=  "0100000"; --95
		 when 7 => dig1 <=  "0001111";--112
		 when 8 => dig1 <=  "0000000"; --127   
		 when 9 => dig1 <=  "0000100";--123
		 when others => dig1 <= "1111111";
	end case;

	case s2 is
		 when 0 => dig2 <= not "1111110"; --126
		 when 1 => dig2 <= not "0110000"; --48
		 when 2 => dig2 <= not "1101101"; --109
		 when 3 => dig2 <= not "1111001";  --121atoriamente para não haver erros de compilação--
				s2	:= 0; 	-- dezena
		 when 4 => dig2 <= not "0110011"; --51
		 when 5 => dig2 <= not "1011011"; --91
		 when 6 => dig2 <= not "1011111"; --95
	  when others => dig2 <= "1111111";
	end case;

	 case m1 is
		 when 0 => dig3 <= not "1111110"; --126
		 when 1 => dig3 <= not "0110000"; --48
		 when 2 => dig3 <= not "1101101"; --109
		 when 3 => dig3 <= not "1111001";  --121
		 when 4 => dig3 <= not "0110011"; --51
		 when 5 => dig3 <= not "1011011"; --91
		 when 6 => dig3 <= not "1011111"; --95
		 when 7 => dig3 <= not "1110000";--112
		 when 8 => dig3 <= not "1111111"; --127   
		 when 9 => dig3 <= not "1111011";--123
		 when others => dig3 <= "1111111";
	end case;

	case m2 is
		 when 0 => dig4 <= not "1111110"; --126
		 when 1 => dig4 <= not "0110000"; --48
		 when 2 => dig4 <= not "1101101"; --109
		 when 3 => dig4 <= not "1111001";  --121
		 when 4 => dig4 <= not "0110011"; --51
		 when 5 => dig4 <= not "1011011"; --91
		 when 6 => dig4 <= not "1011111"; --95
		when others => dig4 <= "1111111";
	end case;

	case h1 is
		 when 0 => dig5 <= not "1111110"; --126
		 when 1 => dig5 <= not "0110000"; --48
		 when 2 => dig5 <= not "1101101"; --109
		 when 3 => dig5 <= not "1111001";  --121
		 when 4 => dig5 <= not "0110011"; --51
		 when 5 => dig5 <= not "1011011"; --91
		 when 6 => dig5 <= not "1011111"; --95
		 when 7 => dig5 <= not "1110000";--112
		 when 8 => dig5 <= not "1111111"; --127   
		 when 9 => dig5 <= not "1111011";--123
		 when others => dig5 <= "1111111";
	end case;

	case h2 is
			 when 0 => dig6 <= not "1111110"; --126
			 when 1 => dig6 <= not "0110000"; --48
			 when 2 => dig6 <= not "1101101"; --109
			 when 3 => dig6 <= not "1111001";  --121
			 when 4 => dig6 <= not "0110011"; --51
			 when 5 => dig6 <= not "1011011"; --91
			 when 6 => dig6 <= not "1011111"; --95
			when others => dig6 <= "1111111";
	end case;
	 
	end process;
    
END ARCHITECTURE;