Mudanças entre as edições de "DI2022802 2021 1 AULA16"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 114: Linha 114:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
{{collapse top|Outros Exemplos}}
 
 
::Exemplo 4: VIGIA
 
<syntaxhighlight lang=vhdl>
 
--1 - VIGIA
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.all;
 
ENTITY Vigia IS
 
PORT( clk : IN STD_LOGIC;
 
      SensorA, SensorB : IN STD_LOGIC;
 
      Multa_Vel, Multa_Comp : OUT STD_LOGIC);
 
END Vigia;
 
 
ARCHITECTURE Intuitiva OF Vigia IS
 
    TYPE STATE_TYPE IS (Espera,
 
        Verificando_Velocidade,
 
        Verificando_Tamanho,
 
        Multa_Velocidade,
 
        Multa_Tamanho,
 
    Erro);
 
    SIGNAL Estado: STATE_TYPE;
 
    SIGNAL Cronometro: INTEGER RANGE 0 to 31;
 
 
BEGIN
 
    PROCESS (clk)
 
    BEGIN
 
        IF clk'EVENT AND clk = '1' THEN
 
            Multa_Vel <= '0';
 
            Multa_Comp <= '0';
 
            CASE Estado IS
 
                WHEN Espera =>
 
                    IF SensorA = '1' THEN
 
                        IF SensorB = '0' THEN
 
                            Estado <= Verificando_Velocidade;
 
                        ELSE
 
                            Estado <= Erro;
 
                        END IF;
 
                    END IF;
 
                WHEN Verificando_Velocidade =>
 
                    IF SensorA = '1' THEN
 
                        IF SensorB = '0' THEN
 
                            Cronometro <= Cronometro + 1;
 
                        ELSE
 
                            IF Cronometro < 8 OR Cronometro > 24 THEN
 
                                Estado <= Multa_Velocidade;
 
                            ELSE
 
                                Estado <= Verificando_Tamanho;
 
                            END IF;
 
                        END IF;
 
                    ELSE
 
                        IF SensorB = '0' THEN
 
                            Estado <= Espera;
 
                            Cronometro <= 0;
 
                        ELSE
 
                            Estado <= Erro;
 
                        END IF;
 
                    END IF;
 
                WHEN Verificando_Tamanho =>
 
                    IF SensorA = '1' THEN
 
                        IF SensorB = '1' THEN
 
                            Cronometro <= Cronometro -1;
 
                            IF Cronometro = 0 THEN
 
                                Estado <= Multa_Tamanho;
 
                            END IF;
 
                        ELSE
 
                            Estado <= Erro;
 
                        END IF;
 
                    ELSE
 
                        Estado <= Espera;
 
                        Cronometro <= 0;
 
                    END IF;
 
                WHEN Multa_Velocidade =>
 
                    Multa_Vel <= '1';
 
                WHEN Multa_Tamanho =>
 
                    Multa_Comp <= '1';
 
                WHEN Erro =>
 
                    Multa_Vel <= '1';
 
                Multa_Comp <= '1';
 
            END CASE;
 
        END IF;
 
END PROCESS;
 
END Intuitiva;
 
</syntaxhighlight>
 
::Exemplo 5: RECEPTOR
 
<syntaxhighlight lang=vhdl>
 
--2 – RECEPTOR
 
-- Receptor serial
 
entity Receptor is
 
    port( data_in, clock, limpa: in bit;
 
          pronto, ocupado: out bit;
 
          data_out: buffer bit_vector(7 downto 0));
 
end Receptor
 
 
architecture Receptor of Receptor is
 
    TYPE STATE_TYPE IS ( Espera,
 
                        Start_bit,
 
                        Recebendo,
 
                        Pronto);
 
    SIGNAL Estado: STATE_TYPE;
 
    SIGNAL Cronometro: INTEGER RANGE 0 to 7;
 
    SIGNAL Conta_bits: INTEGER RANGE 0 to 7;
 
process
 
begin
 
    if clock'event and clock = '1' then
 
    CASE Estado IS
 
        WHEN Espera =>
 
            IF Data_in = '0'then
 
                Cronometro <= 0;
 
                Ocupado <= '1';
 
                Estado <= Start_bit;
 
            ELSE
 
                Ocupado <= '0';
 
            END IF;
 
        WHEN Start_bit =>
 
            IF Cronometro < 4 then
 
                Cronometro = Cronometro+1;
 
            ELSE
 
                Cronômetro = 0;
 
                Conta_bits =0;
 
                Estado <= Recebendo;
 
            END IF;
 
        WHEN Recebendo =>
 
            IF Conta_bits < 6 then
 
                IF Cronometro < 3 then
 
                    Cronometro = Cronometro+1;
 
                ELSE
 
                    Cronômetro = 0;
 
                    Conta_bits = Conta_bits+1;
 
                    Data_out(0)<= Data_out(1);
 
                    Data_out(1)<= Data_out(2);
 
                    Data_out(2)<= Data_out(3);
 
                    Data_out(3)<= Data_out(4);
 
                    Data_out(4)<= Data_out(5);
 
                    Data_out(5)<= Data_out(6);
 
                    Data_out(6)<= Data_out(7);
 
                    Data_out(7)<= Data_in;
 
                END IF;
 
            ELSE
 
                Estado <= Pronto;
 
                Pronto <= '1';
 
            END IF;
 
        WHEN Pronto =>
 
            IF Limpa = 0 Then
 
                Ocupado <= '0';
 
                Pronto <= '0';
 
                Estado <= Espera;
 
            END IF;
 
    END CASE;
 
    END IF;
 
end process;
 
end Receptor;
 
</syntaxhighlight>
 
 
{{collapse bottom}}
 
  
  

Edição das 13h07min de 6 de setembro de 2021

Lista de Exercícios para AT2

Parte 1 - VHDL

  1. O que significa CPLD, FPGA e VHDL?
  2. Quais as principais vantagens no uso do VHDL?
  3. Quais as etapas de um ciclo de projeto de sistemas em VHDL?
  4. Qual a diferença entre uma Entidade (entity) e uma Arquitetura (architecture)?
  5. O que são os Ports?
  6. Que tipo de pinos (ports) existem e onde são aplicados?
  7. O que é uma Descrição comportamental?
  8. O que é uma Descrição por fluxo de dados?
  9. O que é uma Descrição estrutural?
  10. Quais são as regras para a formação dos Identificadores?
  11. O que é uma constante?
  12. Qual a diferença de Sinais e de Variáveis?
  13. Quais os tipos de dados disponíveis em VHDL?
  14. Projetar e simular:
    1. Biestável tipo JK com clock e borda de subida, com descrição comportamental.
    2. Idem, com Preset e Clear assíncronos
  15. Realizar o projeto de um contador síncrono, com uma sequência pré-definida em VHDL e simular.
  16. Comentar os exemplos:
Exemplo 1
 
library ieee;
use ieee.std_logic_1164.all;

entity FF_D is
	port
	(
		D	: in  std_logic;
		clk	: in  std_logic;
		Q	: out std_logic
	);
end FF_D;

architecture Ex1 of FF_D is
begin
-- Update the register output on the clock's rising edge
process (clk)
begin
	if (rising_edge(clk)) then
		Q <= D;
	end if;
end process;
end Ex1;
Exemplo 2
 
library ieee;
use ieee.std_logic_1164.all;
 
ENTITY ff_jk is
    port(j,k,clk: in bit;
         q: out bit);
END ff_jk;
 
ARCHITECTURE teste of ff_jk is
BEGIN

process(clk)
variable temp : bit :='0';
begin
	if( falling_edge(clk) ) then
		if (j='1' and k='0') then
			temp:='1';
		elsif (j='0' and k='1') then
			temp:='0';
		elsif (j='1' and k='1') then
			temp:= not temp;
		else
			temp:=temp;
		end if;
		q<=temp;
	end if;
end process;
END teste;
Exemplo 3
 
library ieee;
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all;

entity CONTADOR is
port(
	CLK:	in  std_logic;
    	RESET:	in  std_logic;
	ENABLE:	in  std_logic;
	Q:	out std_logic_vector (3 downto 0)
);
end CONTADOR;

architecture CONTADOR_arq of CONTADOR is 
begin
	process(CLK,RESET)
		variable X: integer range 0 to 15;
	begin
		if (RESET = '1') then
			X := 0;

		elsif (CLK'event and CLK='1') then
			if (ENABLE = '1') then
				X := X + 1;
			end if;
		end if;

		Q <= conv_std_logic_vector(X, 4);

	end process;
end CONTADOR_arq;



Icone voltar.png Icone menu.png Icone prox.png