Mudanças entre as edições de "SST20707-2013-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 441: Linha 441:
 
   end loop;
 
   end loop;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
= 29/10: Exercício Código Sequencial =
 +
* Contado 10-bits
 +
* Temporizador

Edição das 06h29min de 29 de outubro de 2013

Síntese de Sistemas de Telecomunicações: Diário de Aula 2013-2

Professor: Roberto de Matos
Encontros: 3ª feira 9:40 e 6ª feira 7:30
Atendimento paralelo: 4ª feira das 13:30 às 15:20.

Assuntos trabalhados

Apoio Desenvolvimento

Slides

16/08: Apresentação

  • Apresentação do professor.
  • Apresentação dos alunos: Nome, perfil, preferências, etc.
  • Apresentação da disciplina: conteúdo, bibliografia e avaliação.
  • Aula Introdutória:
    • Por que dispositivos lógicos programáveis?
    • Histórico

20/08: Desenvolvimento com PLDs

  • Famílias de Componentes Lógicos Programáveis
  • Arquitetura dos FPGAS
  • Introdução ao Fluxo de Projeto do Quartus

23/08: Laboratório Quartus

  • Fluxo de projeto esquemáticos com Quartus e Modelsim (Porta AND)
  • Exercício: Projeto, Simulação e Teste do meio-somador

27/08: Introdução à Linguagem VHDL

  • Finalização do fluxo de projeto do Meio somador no Quartus e Modelsim, utilização a entrada de esquemático.
  • Apresentação da Linguagem VHDL
  • Conceitos de entidade (entity) e arquitetura (architecture)

30/08: Projetando com VHDL

  • Estudo de caso: Meio Somador em VHDL

03/09: Projetando com VHDL

  • Exercício: Manipulação do LCD utilizando VHDL

06/09: Código Concorrente (WHEN, SELECT)

WHEN

  • Sintaxe Simplificada:

signal_name <= value_expr_1 when boolean_expr_1 else value_expr_2 when boolean_expr_2 else value_expr_3 when boolean_expr_3 else ... value_expr_n </syntaxhighlight>

  • Exemplo:

x <= a when (s="00") else b when (s="01") else c when (s="10") else

	d;

</syntaxhighlight>

SELECT

  • Sintaxe Simplificada:

with select_expression select

    signal_name <=	value_expr_1 when choice_1,

value_expr_2 when choice_2, value_expr_3 when choice_3, ... value_expr_n when choice_n; </syntaxhighlight>

  • Exemplo:

with s select x <= "0001" when "00", "0010" when "01", "0011" when "10", "0100" when others; </syntaxhighlight>

10/09: Componentes (COMPONENT, PORT MAP)

  • Sintaxe Simplificada:

--Declaração----------------------------------------------------------

COMPONENT component_name [IS] [GENERIC ( const_name: const_type := const_value; ...);] PORT ( port_name: port_mode signal_type; ...); END COMPONENT [component_name];


--Instanciação----------------------------------------------------------

label: [COMPONENT] component_name [GENERIC MAP (generic_list) ] PORT MAP (port_list);

</syntaxhighlight>

  • Exemplo:

--Declaração----------------------------------------------------------

COMPONENT nand_gate IS PORT ( a, b: IN STD_LOGIC; c: OUT STD_LOGIC); END COMPONENT;


--Instanciação---------------------------------------------------------

nand1: nand_gate PORT MAP (x, y, z); --mapeamento posicional nand2: nand_gate PORT MAP (a=>x, b=>y, c=>z); --mapeamento nominal

</syntaxhighlight>

  • Exemplo GENERIC:

--Declaração----------------------------------------------------------

COMPONENT xor_gate IS GENERIC (N: INTEGER := 8); PORT ( a: IN STD_LOGIC(1 TO N); b: OUT STD_LOGIC); END COMPONENT;


--Instanciação----------------------------------------------------------

xor1: xor_gate GENERIC MAP (16) PORT MAP (x, y); --map. posicional xor2: xor_gate GENERIC MAP (N=>16) PORT MAP (a=>x, b=>y); --map. nominal

</syntaxhighlight>

13/09: Componentes (continuação)

  • Exercício utilizando o "decodificador" LCD e o debouncer.
  • Arquivos de apoio.


Componentes-decode.png


17/09: Não houve aula

  • Palestra Sinapse da Inovação

20/09: Componentes (continuação)

  • Exercício de componentes utilizando o exemplo do LCD Decode.

24/09: Suspensa

  • Convocação do professores pela Direção de Ensino

27/09: Projeto MUX 4x1

  • Projeto e simulação do MUX estrutural e comportamental.

01/10: Projeto do Decode de 7 Segmentos

  • Projeto e simulação do Decode de 7 segmentos para a escrita de "IFSC"

04/10: Apresentação do 1º Projeto

Documentação do Projeto:

  • Deve ser preparado um arquivo compactado (*.zip, *.rar) contendo o seguinte:
    • Arquivo *.qar com todos os VHDL do projeto (topo_upc.vhd, op_or.vhd, op_xor.vhd, op_soma.vhd, op_id.vhd, mux_4x1.vhd, decode_7seg.vhd);
    • Arquivos *.do de todos os módulos (test_X.do e wave_X.do, sendo X é a identificação do módulo testado);
    • Relatório
    • OBS: Se o email voltar utilize o email alternativo: roberto@eel.ufsc.br
  • O Relatório deve conter o seguinte:
    • Identificação do autor
    • Tabela verdade para cada componente;
    • Diagrama de blocos com sinais de entrada e saída para cada componente;
    • Diagramas de forma de ondas extraídos diretamente do ModelSim para cada componente;
    • Descrição das ferramentas utilizadas e fluxo de projeto;

Avaliação

  • O trabalho deverá ser desenvolvido individualmente.
  • O trabalho deverá chegar na caixa de entrada do email do professor com o assunto SST-UCP_Nome_Aluno até o dia 18/10/2013 às 23:59h, impreterivelmente.
  • A apresentação e demonstração do funcionamento por intermédio de simulação e prototipação será realizada em data a ser definida.
  • Durante a apresentação, os alunos deverão estar aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretará em anulação da nota do trabalho.
  • As explicações durante a demonstração do projeto funcionando são fundamentais para a avaliação.
  • Trabalhos copiados resultarão em nota zero para todos os alunos envolvidos. Poderá ser utilizado a ferramenta MOSS como auxílio na identificação de situações de plágio.

Objetivo

Desenvolver um projeto hierárquico com módulos em VHDL que implementem uma Unidade de Processamento Combinacional (UPC) capaz de realizar as funções lógicas OU e XOR, a função aritmética de SOMA e a geração do ID baseado na matrícula sobre dois operandos de 8 bits e apresentar o resultado em dois displays de 7 segmentos e 8 LEDs da DE2-115.


Diagrama upc.png


  • A UPC terá o seguinte funcionamento:
    • Entrar com o operando A nas chaves SW (15-8) e o operando B nas chaves SW (7-0)
    • Entrar com a escolha da operação (OP) a ser executada nas chaves (17-16)
    • Disponibilizar na saída (Diplays e LEDs) o resultado da operação.
  • Requisitos:
    • O projeto deverá ser desenvolvido fora horário de aula.
    • Todos os módulos devem ser implementados como componentes e instanciados no arquivo topo.
    • O componente MUX deve ter a implementação de duas arquiteturas: Estrutural e Comportamental.
    • Deve haver somente um componente Decode e duas instanciações.
    • Componente ID: A operação ID deve manipular os quatro últimos números da matrícula do aluno (------XYH-L). Quando o valor da entrada A for o XY (hexadecimal) e a operação selecionada for o ID os displays devem mostrar o valor HL. Qualquer outro valor de entrada deve gerar o valor FF no display.

Cronograma

  • 04/10: Apresentação dos objetivos do trabalho.
  • 11/10: Aula para retirada de dúvidas. Observação: O projeto já deve estar encaminhado, lembrem que nesse dia, já se passou metade do prazo para entrega.
  • 18/10: Prazo final para entrega do trabalho.

Horários do Laboratório

  • Previsão (precisa confirmar disponibilidade dos Labs):
    • Segunda: 10:00h às 20:00h
    • Terça: 14:00h às 20:00h
    • Quarta: 16:00h às 18:00h
    • Quinta: 14:00h às 20:00h

08/10: Apoio Projeto

11/10: Introdução ao Código Seqüencial

  • Seqüencial vs. Combinacional
  • Exemplo Flip-Flop RS
  • Lista de Sensibilidade

library IEEE; use IEEE.STD_LOGIC_1164.all; entity test_proc is

 port(
   data_in : in std_logic;
   data_out: out std_logic
 );

end test_proc;

architecture circuit of test_proc is

 signal A,B,C,D: std_logic;

begin

 A <= data_in;
 data_out <= D;
 
 --Version 1             --Version 2
 process(A)               --process (A,C)
 begin  
   B <= A;
   B <= '0';
   C <= A and '1';
   C <= not A;
   D <= C;
 end process;

end circuit; </syntaxhighlight>

15/10: Introdução ao Código Seqüencial (cont.)

  • Lista de Sensibilidade (reentrada no process)
  • test_proc.vhd (não funciona no Quartus):

library IEEE; use IEEE.STD_LOGIC_1164.all; entity test_proc is

 port(
   data_in : in std_logic;
   data_out: out std_logic
 );

end test_proc;

architecture circuit of test_proc is

 signal A,B,C,D: std_logic;

begin

 A <= data_in;
 data_out <= D;
 
 --Version 1		--Version 2
 process		--process        
 begin			--begin
   wait on A,C;	--	wait on A,C;

-- wait for 2 ns;

   B <= A;
   B <= '0';
   C <= A and '1';
   C <= not A;
   D <= C;
 end process;

end circuit; </syntaxhighlight>

  • test.do:

if {[file exists work]} {

   vdel -lib work -all

} vlib work vcom -93 -work work {test_proc.vhd} vsim work.test_proc

add wave -noupdate /test_proc/data_in add wave -noupdate /test_proc/A add wave -noupdate /test_proc/B add wave -noupdate /test_proc/C add wave -noupdate /test_proc/D add wave -noupdate /test_proc/data_out

force -freeze sim:/test_proc/data_in 0 @10ns,1 @20ns,0 @30ns run 40ns </syntaxhighlight>

18/10: NÃO HOUVE AULA

  • Debate eleição

22/10: NÃO HOUVE AULA

  • Palestra SNCT

25/10: Código Seqüencial

  • Conceito de Variável
  • Variável vs. Signal
  • Estruturas de Controle

Variável vs. Sinal

library ieee; use ieee.std_logic_1164.all;

entity sig_var is port( d1: in std_logic; res1, res2: out std_logic); end sig_var;

architecture behv of sig_var is

 signal sig_s1: std_logic;

begin

 proc1: process(d1)	
   variable var_s1: std_logic;
 begin

var_s1 := d1; res1 <= var_s1;

 end process;
 
 proc2: process(d1)
 begin

sig_s1 <= d1; res2 <= sig_s1;

 end process;

end behv; </syntaxhighlight>

Estruturas de Controle

IF

  • Sintaxe Simplificada:
[ label: ] if  condition1  then
                sequence-of-statements
           elsif  condition2  then      \_ optional
                sequence-of-statements  /
           elsif  condition3  then      \_ optional
                sequence-of-statements  /
           ...
           else                         \_ optional
                sequence-of-statements  /
           end if [ label ] ;

</syntaxhighlight>

  • Exemplo:
if a=b then
    c:=a;
elsif b<c then
    d:=b;
    b:=c;
else
    do_it;
end if;

</syntaxhighlight>

LOOP

  • Sintaxe Simplificada:
[ label: ] loop
                sequence-of-statements -- use exit statement to get out
           end loop [ label ] ;
[ label: ] for variable in range loop
                sequence-of-statements
           end loop [ label ] ;
[ label: ] while  condition  loop
                sequence-of-statements
           end loop [ label ] ;

</syntaxhighlight>

  • Exemplo:
 loop
   input_something;
   exit when end_file;
 end loop;
 for I in 1 to 10 loop
   AA(I) := 0;
 end loop;
 while not end_test loop
   input_something;
 end loop;

</syntaxhighlight>

29/10: Exercício Código Sequencial

  • Contado 10-bits
  • Temporizador