DI2022802 2021 1 AULA16
Lista de Exercícios para AT2
Parte 1 - VHDL
- O que significa CPLD, FPGA e VHDL?
- Quais as principais vantagens no uso do VHDL?
- Quais as etapas de um ciclo de projeto de sistemas em VHDL?
- Qual a diferença entre uma Entidade (entity) e uma Arquitetura (architecture)?
- O que são os Ports?
- Que tipo de pinos (ports) existem e onde são aplicados?
- O que é uma Descrição comportamental?
- O que é uma Descrição por fluxo de dados?
- O que é uma Descrição estrutural?
- Quais são as regras para a formação dos Identificadores?
- O que é uma constante?
- Qual a diferença de Sinais e de Variáveis?
- Quais os tipos de dados disponíveis em VHDL?
- Projetar e simular:
- Biestável tipo JK com clock e borda de subida, com descrição comportamental.
- Idem, com Preset e Clear assíncronos
- Realizar o projeto de um contador síncrono, com uma sequência pré-definida em VHDL e simular.
- 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;
Outros Exemplos |
---|
--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;
--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;
|