Mudanças entre as edições de "SST20707-2014-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 244: Linha 244:
  
 
[https://docs.google.com/forms/d/1C4aY81UxvwRzU4WIF8oRPJ5Y6uyessPq_Z3yijEh6s8/viewform Cesup]
 
[https://docs.google.com/forms/d/1C4aY81UxvwRzU4WIF8oRPJ5Y6uyessPq_Z3yijEh6s8/viewform Cesup]
 +
 +
 +
= 14/04: Código Seqüencial =
 +
*Conceito de Variável
 +
*Variável vs. Signal
 +
*Estruturas de Controle
 +
 +
==Variável vs. Sinal==
 +
:<code>
 +
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:
 +
:<code>
 +
[ 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:
 +
:<code>
 +
if a=b then
 +
    c:=a;
 +
elsif b<c then
 +
    d:=b;
 +
    b:=c;
 +
else
 +
    do_it;
 +
end if;
 +
</syntaxhighlight>
 +
 +
=== LOOP ===
 +
*Sintaxe Simplificada:
 +
:<code>
 +
[ 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:
 +
:<code>
 +
  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>

Edição das 14h17min de 14 de abril de 2014

Síntese de Sistemas de Telecomunicações: Diário de Aula 2014-1

Professor: Roberto de Matos
Encontros: 2ª e 3ª feira às 13:30
Atendimento paralelo: 2ª feira das 15:40 às 17:30.

Assuntos trabalhados

Apoio Desenvolvimento


Slides

10/02: 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

11/02: Desenvolvimento com PLDs

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

17/02: Laboratório Quartus

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

18/02: 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)

24/02: Linguagem VHDL

Exemplos VHDL (Entity e Architecture)

  • Meio Somador
  • LCD and Switch

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);
  • 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>


10/03: 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>

Exercícios

  • Implementação MUX comportamental e estrtural
  • Verificação

10/03: Exercícios: Decode 7-seg e UPC

Decode 7-seg

  • Implementação Decode IFSC:

entity decodIFSC is port (C: in std_logic_vector(2 downto 0);

     F:  out std_logic_vector(6 downto 0)
    );

end decodIFSC;

architecture decod_bhv of decodIFSC is Begin

 with C select 
 F <= "1001111" when "000", 	-- I
      "0001110" when "001",	-- F
      "0010010" when "010", 	-- S
      "1000110" when "011",	-- C
      "1111111" when others;

end decod_bhv;

</syntaxhighlight>


  • "Virtual Function" em arquivo *.do:

vlib work vcom -93 -work work {../../decodIFSC.vhd} vsim work.decodifsc

virtual type {{0b1001111 seg_I} {0b0001110 seg_F} {0b0010010 seg_S} {0b1000110 seg_C} {0b1111111 seg_others}} d7seg_ifsc_type

virtual function {(d7seg_ifsc_type)/decodIFSC/F} display_virtual

add wave -position end sim:/decodifsc/C add wave -position end sim:/decodifsc/F add wave display_virtual

force -freeze sim:/decodifsc/C 000 0 run force -freeze sim:/decodifsc/C 001 0 run force -freeze sim:/decodifsc/C 010 0 run force -freeze sim:/decodifsc/C 011 0 run force -freeze sim:/decodifsc/C 100 0 run </syntaxhighlight>

UPC: Unidade de Processamento Combinacional

Diagrama upc2.png


31/03: Não Houve Aula - Reunião Inova Telecom

07/04: Prova Combinacional

Desenvolver um projeto hierárquico com módulos em VHDL que implemente o circuito abaixo. Esse circuito controla 3 canais de áudio com prioridade. Os canais de áudio são “simulados” por chaves. A ordem decrescente de prioridade das entradas é A, B e C. O bloco de prioridade deve selecionar (SelOut) corretamente a entrada do MUX que deve ser chavetada para saída. Além disso, a saída F deve mostrar nos LEDs a saída selecionada. O decodificador de 7 segmentos deve decodificar a saída SelOut e mostrar no display “A”, “b” ou “C”, dependendo da saída selecionada.

Todos os módulos devem ter arquivos de teste (*.do), inclusive o topo. O teste do decodificador deve incluir um “virtual type” para simplificar a simulação.

Priority.png


CESUP

Cesup


14/04: 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>