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
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
=Lista de Exercícios para AT2=
+
=Lista de Exercícios para AT3=
  
 
==Parte 1 - VHDL==
 
==Parte 1 - VHDL==
Linha 21: Linha 21:
 
#Realizar o projeto de um contador síncrono, com uma sequência pré-definida em VHDL e simular.
 
#Realizar o projeto de um contador síncrono, com uma sequência pré-definida em VHDL e simular.
 
#Comentar os exemplos:
 
#Comentar os exemplos:
;Exemplo 1
+
##Exemplo 1<syntaxhighlight lang=vhdl>  
<syntaxhighlight lang=vhdl>  
 
 
library ieee;
 
library ieee;
 
use ieee.std_logic_1164.all;
 
use ieee.std_logic_1164.all;
Linha 44: Linha 43:
 
end if;
 
end if;
 
end process;
 
end process;
end Ex1;
+
end Ex1;</syntaxhighlight>
 
+
##Exemplo 2 <syntaxhighlight lang=vhdl>  
</syntaxhighlight>
 
;Exemplo 2
 
<syntaxhighlight lang=vhdl>  
 
 
library ieee;
 
library ieee;
 
use ieee.std_logic_1164.all;
 
use ieee.std_logic_1164.all;
Linha 76: Linha 72:
 
end if;
 
end if;
 
end process;
 
end process;
END teste;
+
END teste;</syntaxhighlight>
 
+
##Exemplo 3 <syntaxhighlight lang=vhdl>  
</syntaxhighlight>
 
;Exemplo 3
 
<syntaxhighlight lang=vhdl>  
 
 
library ieee;
 
library ieee;
 
use ieee.std_logic_1164.all;  
 
use ieee.std_logic_1164.all;  
Linha 115: Linha 108:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
{{collapse top|Outros Exemplos}}
+
==Parte 2 - Simulador==
  
::Exemplo 4: VIGIA
+
# O que é o ModelSIM?
<syntaxhighlight lang=vhdl>
+
# Para que serve o ModelSIM?
--1 - VIGIA
+
# O que é o ''Jumpstart'' que aparece na primeira vez que se executa o ModelSIM?
LIBRARY ieee;
+
# O que é um ''testbench''?
USE ieee.std_logic_1164.all;
+
# O que eu devo fazer para rodar um simulação? Onde devo clicar?
ENTITY Vigia IS
+
# O que é ''Wave''? Esse termo é utiliza pra quê?
PORT( clk : IN STD_LOGIC;
+
# O que é "passo da simulação"?
      SensorA, SensorB : IN STD_LOGIC;
+
# O que é "tempo de simulação"?
      Multa_Vel, Multa_Comp : OUT STD_LOGIC);
+
# Tente simular o seguinte código VHDL abaixo. É importante estabelecer um passo de simulação na ordem 100 ps. Perceba também que, quando ele atinge a contagem de 15 ele para de contar. Tente resolver esse problema alterando o range e/ou mudando a forma com que as informações são enviadas para o saída.<syntaxhighlight lang=vhdl>
END Vigia;
+
library ieee;
 +
use ieee.std_logic_1164.all;  
 +
use ieee.std_logic_arith.all;
  
ARCHITECTURE Intuitiva OF Vigia IS
+
entity CONTADOR is
    TYPE STATE_TYPE IS (Espera,
+
port(
        Verificando_Velocidade,
+
CLK: in  std_logic;
        Verificando_Tamanho,
+
    RESET: in  std_logic;
        Multa_Velocidade,
+
ENABLE: in  std_logic;
        Multa_Tamanho,
+
Q: out std_logic_vector (3 downto 0)
    Erro);
+
);
    SIGNAL Estado: STATE_TYPE;
+
end CONTADOR;
    SIGNAL Cronometro: INTEGER RANGE 0 to 31;
 
  
 +
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;</syntaxhighlight>
 +
# Tente simular o seguinte código:<syntaxhighlight lang=vhdl>
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 +
ENTITY mux4x1 is
 +
    port(i0, i1, i2, i3: in bit;
 +
        a0, a1: in bit;
 +
        y: out bit);
 +
END mux4x1;
 +
 +
ARCHITECTURE teste of mux4x1 is
 
BEGIN
 
BEGIN
     PROCESS (clk)
+
     y <= i0 when a1='0' and a0='0' else
    BEGIN
+
        i1 when a1='0' and a0='1' else
        IF clk'EVENT AND clk = '1' THEN
+
        i2 when a1='1' and a0='0' else
            Multa_Vel <= '0';
+
        i3;
            Multa_Comp <= '0';
+
END teste;          
            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>
 
</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
+
==Parte 3 - Software Quartus==
    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}}
+
# O que é um Ambiente de Software EDA?
 +
# Um software EDA normalmente possui quatro entrada de dados do projeto. Quais são e para que servem?
 +
# Qual a maneira mais fácil de criar um projeto no software Quartus?
 +
# O que é um diagrama esquemático?
 +
# O que é a ferramenta "símbolos" (componentes)?
 +
# Quais as bibliotecas principais de "componentes"?
 +
# Como se divide a biblioteca "Primitives".
 +
# Quais os três tipos de "pinos"?
 +
# Nos projetos, porque usar  Ciclone II - EP2C35F672C6?
 +
# Por que o nome do projeto deve ser o mesmo que da entidade (entity)?
 +
# Para que eu devo "compilar" meu projeto?
 +
# Para que simular meu projeto?
 +
# Na configuração da simulação, para que definir "End Time" e "Grid Size"?
 +
# Ao rodar a simulação eu posso configurá-la para ''Timing'' ou ''Functional''? Qual a diferença entre os dois tipos de simulação?
 +
# Desenvolvimento via diagrama esquemático, utilizando portas lógicas discretas, a montagem de um circuito combinacional capaz de executar a seguinte operação: <math>S(A,B,C,D)=(A.B) \oplus (C.D)</math>
 +
# Desenvolva via diagrama esquemático, utilizando FF tipo D (CI 7474), a montagem de um circuito do contador Johnson de 4 bits. Simule o funcionamento do circuito
 +
#Desenvolva via diagrama esquemático, um circuito MUX de 4 entradas. Simule o funcionamento do circuito.
 +
#Desenvolva via diagrama esquemático, um circuito do contador em anel de 4 saídas com clear e preset em apenas um dos FF. Simule o funcionamento do circuito.
  
  

Edição atual tal como às 13h17min de 6 de setembro de 2021

Lista de Exercícios para AT3

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:
    1. 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;
      
    2. 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;
      
    3. 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;
      

Parte 2 - Simulador

  1. O que é o ModelSIM?
  2. Para que serve o ModelSIM?
  3. O que é o Jumpstart que aparece na primeira vez que se executa o ModelSIM?
  4. O que é um testbench?
  5. O que eu devo fazer para rodar um simulação? Onde devo clicar?
  6. O que é Wave? Esse termo é utiliza pra quê?
  7. O que é "passo da simulação"?
  8. O que é "tempo de simulação"?
  9. Tente simular o seguinte código VHDL abaixo. É importante estabelecer um passo de simulação na ordem 100 ps. Perceba também que, quando ele atinge a contagem de 15 ele para de contar. Tente resolver esse problema alterando o range e/ou mudando a forma com que as informações são enviadas para o saída.
    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;
    
  10. Tente simular o seguinte código:
    library ieee;
    use ieee.std_logic_1164.all;
     
    ENTITY mux4x1 is
        port(i0, i1, i2, i3: in bit;
             a0, a1: in bit;
             y: out bit);
    END mux4x1;
     
    ARCHITECTURE teste of mux4x1 is
    BEGIN
        y <= i0 when a1='0' and a0='0' else
             i1 when a1='0' and a0='1' else
             i2 when a1='1' and a0='0' else
             i3;
    END teste;
    

Parte 3 - Software Quartus

  1. O que é um Ambiente de Software EDA?
  2. Um software EDA normalmente possui quatro entrada de dados do projeto. Quais são e para que servem?
  3. Qual a maneira mais fácil de criar um projeto no software Quartus?
  4. O que é um diagrama esquemático?
  5. O que é a ferramenta "símbolos" (componentes)?
  6. Quais as bibliotecas principais de "componentes"?
  7. Como se divide a biblioteca "Primitives".
  8. Quais os três tipos de "pinos"?
  9. Nos projetos, porque usar Ciclone II - EP2C35F672C6?
  10. Por que o nome do projeto deve ser o mesmo que da entidade (entity)?
  11. Para que eu devo "compilar" meu projeto?
  12. Para que simular meu projeto?
  13. Na configuração da simulação, para que definir "End Time" e "Grid Size"?
  14. Ao rodar a simulação eu posso configurá-la para Timing ou Functional? Qual a diferença entre os dois tipos de simulação?
  15. Desenvolvimento via diagrama esquemático, utilizando portas lógicas discretas, a montagem de um circuito combinacional capaz de executar a seguinte operação:
  16. Desenvolva via diagrama esquemático, utilizando FF tipo D (CI 7474), a montagem de um circuito do contador Johnson de 4 bits. Simule o funcionamento do circuito
  17. Desenvolva via diagrama esquemático, um circuito MUX de 4 entradas. Simule o funcionamento do circuito.
  18. Desenvolva via diagrama esquemático, um circuito do contador em anel de 4 saídas com clear e preset em apenas um dos FF. Simule o funcionamento do circuito.



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