Mudanças entre as edições de "SST20707-2014-2"
Linha 402: | Linha 402: | ||
− | = | + | =06/10: Código Seqüencial = |
*Conceito de Variável | *Conceito de Variável | ||
*Variável vs. Signal | *Variável vs. Signal |
Edição das 08h14min de 6 de outubro de 2014
Síntese de Sistemas de Telecomunicações: Diário de Aula 2014-2
- Professor: Roberto de Matos
- Encontros: 2ª e 3ª feira às 7:30h
- Grupo no Facebook
Cronograma Semestre 2014-2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- Conceitos
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
- Circuitos Seqüênciais
- Máquinas de Estado
04/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.
05/08: Desenvolvimento com PLDs
- Aula Introdutória:
- Por que dispositivos lógicos programáveis?
- Histórico
- Famílias de Componentes Lógicos Programáveis
- Arquitetura dos FPGAS
- Introdução ao Fluxo de Projeto do Quartus
11/08: Não Houve Aula – Licença Médica
12/08: Não Houve Aula – Licença Médica
18/08: Fluxo Quartus II
- Introdução ao Fluxo de Projeto do Quartus
- Fluxo de projeto esquemáticos com Quartus e Modelsim (Porta AND)
- Exercício Meio-Somador
19/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)
Exemplos VHDL (Entity e Architecture)
- Meio Somador
25/08: Linguagem VHDL - Componentes
Exemplos VHDL (Cont.)
- 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>
26/08: 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>
01/09: Exercícios
- Implementação MUX comportamental e estrtural
- Verificação
02/09: Exercícios (cont.)
- Integração Mux no projeto hierárquico
08/09: Decodificador
Decode 7-seg
- Implementação Decode IFSC:
library IEEE;
use IEEE.Std_Logic_1164.all;
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>
09/09: Decodificador
UPC: Unidade de Processamento Combinacional
15/09: Continuação UPC
16/09: Dia de estudo da Turma
22/09: Prova Combinacional
Desenvolver um projeto hierárquico com módulos em VHDL que implemente o circuito abaixo. Esse circuito executa seis instruções de comparação (maior, igual, menor, menor e igual, diferente, menor e igual) a partir de duas entradas (A e B). As instruções de comparação são selecionadas por 3 chaves (SW[17..15]), enquanto o valor dos operandos, com 4 bits cada, são dados pelas chaves SW[3..0] (A) e SW[7..4] (B). As saídas do circuito são o LEDG(0), que indica se a operação selecionada é verdadeira (ligado) ou falsa (desligado), e o Display de 7 segmentos, que indica a operação que está sendo executada pelos códigos apresentados na tabela abaixo.
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.
23/09: Correção da Proval
29/04: Introdução ao Código Seqüencial
- Seqüencial vs. Combinacional
- Exemplo Flip-Flop RS
- Lista de Sensibilidade
- Exercícios:
- Registradores de 4 e 8 Bits
30/04: Introdução ao Código Seqüencial (cont.)
- Exercícios:
- Registrador Genérico
- UPC com Registradores
- Lista de sensibilidade avançada
- Exemplo:
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>
- 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;
process
begin
wait on A,C;
if A'event then
wait for 1 ns;
elsif C'event then
wait for 3 ns;
end if;
B <= A;
B <= '0';
C <= A and '1';
C <= not A;
D <= C;
end process;
end circuit;
</syntaxhighlight>
- test.do:
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>
06/10: Código Seqüencial
- Conceito de Variável
- Variável vs. Signal
- Estruturas de Controle
- Exercícios:
- Contador até 10
- Temporizador 60 segundos
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" or "next statement"
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>
CASE
- Sintaxe Simplificada:
[ label: ] case expression is
when choice1 =>
sequence-of-statements
when choice2 => \_ optional
sequence-of-statements /
...
when others => \_ optional if all choices covered
sequence-of-statements /
end case [ label ] ;
</syntaxhighlight>
- Exemplo:
case my_val is
when 1 =>
a:=b;
when 3 =>
c:=d;
do_it;
when others =>
null;
end case;
</syntaxhighlight>