SST20707-2014-1
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
- Introdução aos dispositivos lógicos programáveis
- Introdução à tecnologia FPGA
- Introdução a linguagem VHDL
Apoio Desenvolvimento
Slides
- Slides de Introdução
- Fluxo de Projeto Quartus
- Introdução à Linguagem VHDL
- Componentes em VHDL
- Mux e Decode
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
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.
CESUP