Mudanças entre as edições de "DLP1-EngTel (página)"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 41: Linha 41:
 
::Ver pag. 413 a 422 de <ref name="PEDRONI2010a"> PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657 </ref>
 
::Ver pag. 413 a 422 de <ref name="PEDRONI2010a"> PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657 </ref>
 
::Ver pag. 495 a 499 de <ref name="PEDRONI2010b"> PEDRONI, Volnei A. '''Circuit Design and Simulation with VHDL'''; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p.  ISBN  9780262014335 </ref>
 
::Ver pag. 495 a 499 de <ref name="PEDRONI2010b"> PEDRONI, Volnei A. '''Circuit Design and Simulation with VHDL'''; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p.  ISBN  9780262014335 </ref>
 
;Aula 2 (16 Ago):
 
*Introdução aos dispositivos lógicos programáveis:
 
:* Arquitetura de FPGAs (Xilinx e Altera): CLB, LAB, RAM, DSP, Clock, PLL, I/O
 
::*[[Conhecendo os dispositivos lógicos programáveis]]
 
:* Vizualização no Chip Planner de um projeto. (importante todos alunos terem acesso a [[IFSC-CLOUD]]
 
::Ver pag. 419 a 431 de <ref name="PEDRONI2010a" />
 
::Ver pag. 499 a 501 de <ref name="PEDRONI2010b" />
 
::Ver pag. 418 a 429 de <ref name="PEDRONI2010a"> PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657 </ref>
 
 
;Aula 3 (18 Ago):
 
:* Fabricantes de DLPs/FPGAs e familias de DLPs atuais.
 
::*[https://www.altera.com/products/fpga/overview.html ALTERA] - Stratix, Arria, Cyclone, Max
 
::*[https://www.xilinx.com/products/silicon-devices/fpga.html Xilinx] - Virtex, Kintex, Artix, Zynq (SoC)
 
::*[http://www.microsemi.com/products/fpga-soc/fpgas Microsemi] - Igloo
 
::*[http://www.latticesemi.com/Products.aspx#_D5A173024E414501B36997F26E842A31 Lattice]  - ECP, iCE, Mach
 
:* Preços
 
::* [https://www.altera.com/buy/devices.html ALTERA], [https://www.arrow.com/en/products/search?prodLine=FPGAs&amp;q=FPGA ARROW],[http://www.digikey.com/product-search/en/integrated-circuits-ics/embedded-fpgas-field-programmable-gate-array/2556262?k=fpga Digikey]
 
:* Historia, processo de produção dos chips.
 
::*[https://www.semiwiki.com/forum/content/1535-brief-history-fabless-semiconductor-industry.html A Brief History of the Fabless Semiconductor Industry]
 
::*[http://www.semiwiki.com/forum/content/1539-brief-history-tsmc.html Taiwan Semiconductor Manufacturing Corporation (TSMC)], [http://www.globalfoundries.com/ GLOBALFOUNDRIES
 
::*[https://www.linkedin.com/pulse/free-copy-fabless-transformation-semiconductor-industry-daniel-nenni-1 Fabless: The Transformation of the Semiconductor Industry, 2014] - Download free
 
::*[https://en.wikipedia.org/wiki/14_nanometer 14nm FinFET Technology], [https://www.youtube.com/watch?v=gLPscTDAaZU Samsung & Globalfounfries], [https://www.youtube.com/watch?v=Jctk0DI7YP8 Funcionamento do FinFET], [https://www.youtube.com/watch?v=W3rfVpkNquA Produção do FinFET], [https://www.youtube.com/watch?v=d9SWNLZvA8g]
 
::*[https://www.youtube.com/watch?v=UvluuAIiA50 Processo de fabricação de um chip]
 
 
===Unidade 2===
 
;Aula 3 (22 Ago) - Introdução ao VHDL e ambienta EDA - QUARTUS
 
* Estrutura do código VHDL
 
:* Declaração das bibliotecas e pacotes '''LIBRARY''' / '''PACKAGE'''
 
<i>
 
library library_name;
 
use library_name.package)name.all;
 
</i>
 
 
:* '''ENTITY'''
 
<i>
 
entity entity_name is
 
  [generic (
 
    cons_name1: const_type const_value;
 
    cons_name2: const_type const_value;
 
    ...
 
    cons_nameN: const_type const_value);]
 
  [port (
 
    signal_name1: mode signal_type;
 
    signal_name2: mode signal_type;
 
    ...
 
    signal_nameN: mode signal_type);]
 
  [declarative_part]
 
[begin
 
  statement_part]
 
end [entity] [entity_name];
 
</i>
 
 
:* '''ARCHITECTURE'''
 
<i>
 
architecture arch_name of entity_name is
 
  [declarative_part]
 
begin
 
  statement_part
 
end [architecture] [arch_name];
 
</i>
 
* Exemplo - Declaração de uma porta NAND em VHDL
 
<syntaxhighlight lang=vhdl>
 
library std;
 
use std.standard.all;
 
 
entity nand_gate is
 
port (a, b: in bit; x: out bit);
 
end entity;
 
 
architecture nome_arch of nand_gate is
 
begin
 
x <= a nand b;
 
end architecture;
 
</syntaxhighlight>
 
 
<!--
 
<center>[[Arquivo:VHDL_nand_gate.png| 400 px]]</center>
 
<center> Figura 2.1 - Declaração de uma porta NAND em VHDL </center>
 
-->
 
 
* Exemplo 2.2 (VHDL) - programação de um flip-flop
 
<syntaxhighlight lang=vhdl>
 
-- Declaração das bibliotecas e pacotes
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.all;
 
 
-- Especificação de todas as entradas e saídas do circuito
 
ENTITY flip_flop IS
 
  PORT (d, clk, rst: IN STD_LOGIC;
 
  q: OUT STD_LOGIC);
 
END;
 
 
 
-- Descrição de como o circuito deve funcionar
 
ARCHITECTURE flip_flop OF flip_flop IS
 
BEGIN
 
  PROCESS (clk, rst)
 
  BEGIN
 
  IF (rst='1') THEN
 
    q <= '0';
 
  ELSIF (clk'EVENT AND clk='1') THEN
 
    q <= d;
 
  END IF;
 
  END PROCESS;
 
END;
 
</syntaxhighlight>
 
:* Após a [[criação do projeto em VHDL]] utilizando a descrição de hardware acima, [[compile o código VHDL]].
 
:* Use o [[RTL Viewer]] para ver a descrição RTL do circuito.
 
 
<center>[[Arquivo:RTL_Ex2_2_Pedronib.png| 400 px]]</center>
 
<center> Figura 2.2 - Código RTL do Exemplo 2.2 </center>
 
 
:* Use o [[Technology Map Viewer]] para ver a como o circuito foi mapeado para os elementos lógicos disponíveis no dispositivo FPGA selecionado (EP1C3T100A8)
 
 
<center>[[Arquivo:TM_Ex2_2_Pedronib.png| 400 px]]</center>
 
<center> Figura 2.3 - Technology Map do Exemplo 2.2 </center>
 
 
:* Abra o [[Chip Planner]] e observe no [[Node Properties]] como esse circuito é conectado dentro do dispositivo FPGA selecionado
 
 
<center>[[Arquivo:ChipPlanner_Ex2_2_Pedronib.png| 400 px]]</center>
 
<center> Figura 2.4 - Chip Planner do Exemplo 2.2 </center>
 
 
;Aula 4 (23 Ago) - Introdução ao VHDL e ambienta EDA - QUARTUS
 
* Estrutura do código VHDL
 
:* Exemplo 2.3 (VHDL e QSIM) - programação de um circuito somador com registrador
 
:: Realizar as simulações funcional e temporal do circuito
 
:: Observar o "Technology Map" e o "RTL" do circuito
 
<syntaxhighlight lang=vhdl>
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.all;
 
 
ENTITY registered_comp_add IS
 
  PORT (clk: IN STD_LOGIC;
 
  a, b: IN INTEGER RANGE 0 TO 7;
 
  reg_comp: OUT STD_LOGIC;
 
  reg_sum: OUT INTEGER RANGE 0 TO 15);
 
END;
 
 
ARCHITECTURE circuit OF registered_comp_add IS
 
  SIGNAL comp: STD_LOGIC;
 
  SIGNAL sum: INTEGER RANGE 0 TO 15;
 
BEGIN
 
  comp <= '1' WHEN a>b ELSE '0';
 
  sum <= a + b;
 
  PROCESS (clk)
 
  BEGIN
 
  IF (clk'EVENT AND clk='1') THEN
 
    reg_comp <= comp;
 
    reg_sum <= sum;
 
  END IF;
 
  END PROCESS;
 
END;
 
</syntaxhighlight>
 
:: Acrescente saídas para o sinal '''sum''' e para o sinal '''comp''', de modo a poder observar estes sinais no simulador QSIM e realize novas simulações funcional e temporal.
 
 
<center>[[Arquivo:RTL_Ex2_3_Pedronib.png | 400 px]] </center>
 
<center> Figura 2.5 - Código RTL do Exemplo 2.3 </center>
 
 
::Para conhecer melhor o ambiente do simulador QSIM veja [[Arquivo:Quartus_II_Simulation.pdf | Introduction to Simulation of VHDL Designs]] da ALTERA.
 
 
::Ver pag. 3 a 24 de <ref name="PEDRONI2010b"> PEDRONI, Volnei A. '''Circuit Design and Simulation with VHDL'''; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p.  ISBN  9780262014335 </ref>
 
 
===Unidade 3===
 
;Aula 5 (25 Ago):
 
*Tipos de Dados em VHDL.
 
:*Objetos de VHDL: CONSTANT, SIGNAL, VARIABLE, FILE.
 
:*Palavra chave OTHERS
 
:: Ver pag. 31 a 35 de <ref name="PEDRONI2010b"/>
 
 
;Aula 6 (29 Ago):
 
*Tipos de Dados em VHDL.
 
:* Bibliotecas padrão IEEE ('''std_logic_1164''', '''numeric_std''').
 
::* '''ATENÇÃO!!! Não use as bibliotecas que não são padrão (''std_logic_arith, std_logic_unsigned, std_logic_signed''''')
 
:* Classificação dos tipos de dados.
 
:* Tipos de dados: BIT, BIT_VECTOR, BOOLEAN, INTEGER, NATURAL, POSITIVE, CHARACTER, STRING, STD_(U)LOGIG, STD_(U)LOGIG_VECTOR
 
::* Exemplo 3.1 Buffer Tri-state
 
::* Exemplo 3.2 Circuito com Saida "don't care"
 
:: Ver pag. 39 a 51 de <ref name="PEDRONI2010b"/>
 
:* Tipos de dados: SIGNED e UNSIGNED
 
:* Exemplo 3.3 Multiplicador (un)signed
 
:* Tipos de dados: FIXED e FLOAT (apenas conhecer)
 
:* Resumo dos Tipos predefinidos (Tabela 3.6).
 
:* Tipos definidos pelo usuário:
 
::* Escalares (Inteiros e Enumerados)
 
::* Tipos de Array 1D x 1D, 2D , 1D x 1D x 1D, 3D
 
:* RECORD e SUBTYPE
 
:* Exemplo 3.8: Multiplexador com porta 1D x 1D.
 
:: Ver pag. 51 a 73 de <ref name="PEDRONI2010b"/>
 
 
<!--
 
;Aula 7  (11 Abr):
 
*Tipos de Dados em VHDL.
 
 
;Aula 8  (13 Abr):
 
*Tipos de Dados em VHDL.
 
:* Tipos de dados: SIGNED e UNSIGNED
 
:* Exemplo 3.3 Multiplicador (un)signed
 
:* Tipos de dados: FIXED e FLOAT (apenas conhecer)
 
:* Resumo dos Tipos predefinidos (Tabela 3.6).
 
:* Tipos definidos pelo usuário:
 
::* Escalares (Inteiros e Enumerados)
 
::* Tipos de Array 1D x 1D, 2D , 1D x 1D x 1D, 3D
 
:* RECORD e SUBTYPE
 
:* Exemplo 3.8: Multiplexador com porta 1D x 1D.
 
:: Ver pag. 51 a 73 de <ref name="PEDRONI2010b"/>
 
 
;Aula 9  (14 Abr):
 
*Qualificação de tipos, conversão de tipos (automática, casting e funções de conversão).
 
:* Resumo das funções de conversão de tipos (Tabela 3.10) e ver [[Aritmética com vetores em VDHL]]
 
:* Exemplo 3.9: Multiplicador com sinal
 
<syntaxhighlight lang=vhdl>
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.all;
 
USE ieee.numeric_std.all;
 
 
ENTITY signed_multiplier IS
 
PORT (
 
a, b: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
 
y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
 
);
 
END ENTITY;
 
 
ARCHITECTURE type_conv_arch OF signed_multiplier IS
 
BEGIN
 
y <= std_LOGIC_VECTOR(SIGNED(a) * SIGNED(b));
 
END ARCHITECTURE;
 
</syntaxhighlight>
 
 
:* Exercício: 
 
::*Implementar em VHDL um circuito que efetue a operação <math>\ y = a^2 + 2*a*b + 5 </math>, utilizando portas do tipo INTEGER para valores de entrada <math>\ a </math> e <math>\ b </math> com sinal e ocupando 4 bits, utilize na saída <math>\ y </math> 8 bits. Determine o número de elementos lógicos e verifique o código RTL obtido.  Compare com os colegas.
 
::*Repita o circuito com as mesmas características, utilizando no entanto portas do tipo STD_LOGIC_VECTOR com 4 bits nas entradas e 8 bits na saída.
 
::*Faça a simulação funcional do circuito. Teste o circuito no minimo com <math>\ {a = -2, b = 3} => y = -3 </math>, <math>\ {a = 7, b = 6} => y = 138 </math> e <math>\ {a = -8, b = -8} => y = 197 </math>. Note que para valores maiores de entrada <math>\ a </math> e <math>\ b </math> pode ocorrer ''overflow'' devido a limitação do número de bits da saída.
 
:: Ver pag. 73 a 78 de <ref name="PEDRONI2010b"/>
 
 
;Aula 10 e 11 (18 e 20 Abr):
 
*Operadores em VHDL.
 
:* Operadores predefinidos: Atribuição, Lógicos, Aritméticos, Comparação, Deslocamento, Concatenação, "Matching".
 
:* Sobrecarga de operadores
 
*Atributos em VHDL.
 
:* Atributos predefinidos: tipo escalar e enumerados; tipo array; de sinal;
 
:* Exemplo 4.2 (Simulação funcional)
 
:* Atributos definidos pelo usuário;
 
:* Atributos de síntese:
 
::* Enum_encoding [http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_file_dir_enum_encoding.htm]
 
::* chip_pin [http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_file_dir_chip.htm]
 
:: Ver pag. 91 a 108 de <ref name="PEDRONI2010b"/>
 
 
;Aula 12 (25 Abr):
 
*Atributos em VHDL.
 
:* Atributos de síntese:
 
::* keep [http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_file_dir_keep.htm]
 
:::* Exemplo 4.4: Delay line (Síntese e Simulação temporal sem o com o atributo keep)
 
:::* Exemplo 5.8 Gerador de Pulsos estreitos
 
::* preserve [http://quartushelp.altera.com/15.0/mergedProjects/logicops/logicops/def_preserve_fanout_free_node.htm]
 
::* noprune.
 
:::* Exemplo 4.5: Preserve and noprune attributes
 
<syntaxhighlight lang=vhdl>
 
ENTITY redundant_registers IS
 
PORT (
 
clk, x: IN BIT;
 
y: OUT BIT);
 
END ENTITY;
 
 
ARCHITECTURE arch OF redundant_registers IS
 
SIGNAL a, b, c: BIT;
 
        -- NORMAL -- 1 LE
 
--ATTRIBUTE preserve: BOOLEAN;
 
--ATTRIBUTE preserve OF a, b, c: SIGNAL IS TRUE; -- 2 LE
 
--ATTRIBUTE noprune: BOOLEAN;
 
--ATTRIBUTE noprune OF a, b, c: SIGNAL IS TRUE; --3 LE
 
--ATTRIBUTE keep: BOOLEAN;
 
--ATTRIBUTE keep of a,b,c: SIGNAL IS TRUE;
 
BEGIN
 
PROCESS (clk)
 
BEGIN
 
IF (clk'EVENT AND clk='1') THEN
 
a <= x;
 
b <= x;
 
c <= x;
 
END IF;
 
END PROCESS;
 
y <= a AND b;
 
END ARCHITECTURE;
 
</syntaxhighlight>
 
Após a compilação do código acima, observe o número de elementos lógicos obtidos, observe o '''Technology Map''' dos circuitos gerados e verifique a localização dos FFs no '''Chip Planner'''.
 
<center> [[Arquivo:Ex4_5_NoAttribute.png | Sem Attribute| 400 px]] <br> '''Fig 12. Technology Map do Circuito sem Attribute'''</center>
 
<center> [[Arquivo:Ex4_5_PreserveAttribute.png| Preserve (or Keep) Attribute |400 px]] <br> '''Fig 13. Technology Map do Circuito com Attribute Preserve (or Keep) '''</center>
 
<center> [[Arquivo:Ex4_5_NopruneAttribute.png| Noprune Attribute| 400 px]] <br> '''Fig 14. Technology Map do Circuito com Attribute Noprune '''</center>
 
 
 
:* Group
 
:* Alias
 
::*Exemplo de uso no pacote numeric_std.vhd
 
<syntaxhighlight lang=vhdl>
 
  function ADD_UNSIGNED (L, R: UNSIGNED; C: STD_LOGIC) return UNSIGNED is
 
    constant L_LEFT: INTEGER := L'LENGTH-1;
 
    alias XL: UNSIGNED(L_LEFT downto 0) is L;
 
    alias XR: UNSIGNED(L_LEFT downto 0) is R;
 
    variable RESULT: UNSIGNED(L_LEFT downto 0);
 
    variable CBIT: STD_LOGIC := C;
 
  begin
 
    for I in 0 to L_LEFT loop
 
      RESULT(I) := CBIT xor XL(I) xor XR(I);
 
      CBIT := (CBIT and XL(I)) or (CBIT and XR(I)) or (XL(I) and XR(I));
 
    end loop;
 
    return RESULT;
 
  end ADD_UNSIGNED;
 
</syntaxhighlight>
 
:* Exercício 4.17: Discussão de possibilidades de implementação
 
:: Ver pag. 108 a 119, 140 a 142 de <ref name="PEDRONI2010b"/>
 
<!--
 
;Aula 13 (11 mar):
 
 
*Tempo livre para implementar/testar o [EL3 - Conversor de Binário para BCD].
 
-->
 
 
===Unidade 4===
 
;Aula  13  (13 Set):
 
*Código Concorrente.
 
:* Uso de Operadores
 
:* WHEN, SELECT;
 
:* Exemplo 5.1 + 5.2 mux: com 3 tipos de arquiteturas (com operadores, com WHEN, com SELECT)
 
<syntaxhighlight lang=vhdl>
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.all;
 
 
ENTITY mux IS
 
GENERIC (N: INTEGER :=8);
 
PORT (x0, x1, x2, x3: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
 
sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
 
y: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
 
END mux;
 
-- Arquitetura para a implementação discreta através de portas AND e OR
 
ARCHITECTURE Operator_only OF mux IS
 
signal sel0_8: STD_LOGIC_VECTOR(N-1 DOWNTO 0);
 
signal sel1_8: STD_LOGIC_VECTOR(N-1 DOWNTO 0);
 
BEGIN
 
sel0_8 <= (OTHERS => sel(0));
 
sel1_8 <= (OTHERS => sel(1));
 
y <= (NOT sel1_8 AND NOT sel0_8 AND x0) OR
 
(NOT sel1_8 AND sel0_8 AND x1) OR
 
(sel1_8 AND NOT sel0_8 AND x2) OR
 
(sel1_8 AND sel0_8 AND x3);
 
END operators_only;
 
</syntaxhighlight>
 
 
:* Para selecionar uma entre várias arquiteturas para a mesma ENTITY use a CONFIGURATION.
 
<syntaxhighlight lang=vhdl>
 
CONFIGURATION which_mux OF mux IS
 
  FOR Operator_only END FOR;
 
--  FOR with_WHEN END FOR;
 
--  FOR with_SELECT END FOR;
 
END CONFIGURATION;
 
</syntaxhighlight>
 
::Ver pag. 121 a 127 de <ref name="PEDRONI2010b"/>
 
 
;Aula  14  ():
 
*Código Concorrente.
 
:* Uso de GENERATE
 
 
<i><code>
 
label: FOR identificador IN faixa GENERATE
 
  [Parte_Declarativa
 
BEGIN]
 
  Instruções_concorrentes
 
  ...
 
END GENERATE [label];
 
</syntaxhighlight> </i>
 
 
::Exemplo 5.4 - Decodificador genérico de endereços.
 
::Exemplo 5.5 - Instanciação de COMPONENTE com GENERATE.
 
::Ver pag. 127 a 134 de <ref name="PEDRONI2010b"/>
 
 
;Aula  15  ():
 
*Código Concorrente.
 
:*Exemplo de uso de operadores e SELECT.
 
::Exemplo 5.3 - Unidade de Lógica e Aritmética (ALU).
 
::Alteração do código da ALU:
 
::* Inclusão de um sinal que indica "erro" quando ocorre ''overflow''/''underflow'' nas operações de soma, incremento ou decremento.
 
::* Inclusão de um circuito que satura o sinal no máximo positivo ou negativo nas situações de erro.
 
::* Teste da ALU usando simulação funcional.
 
 
;Aula 16 ():
 
*Código Concorrente.
 
:* Implementação de circuitos aritméticos com operadores.
 
:* Para o uso dos operadores o mais adequado é utilizar o padrão industrial '''STD_LOGIC_VECTOR'''.  Internamente os valores das portas devem ser convertidos ou para valores '''INTEGER''' ou para '''UNSIGNED'''/'''SIGNED'''.  para tal é necessário utilizar a biblioteca ''numeric_std''.
 
:* Também é fundamental considerar a faixa de valores coberta por <math> N </math> bits.  Para tipos '''UNSIGNED''' a faixa é de <math> 0  </math> até <math>  2^{N}-1 </math>, enquanto que para '''SIGNED''' a faixa é de <math> -2^{N-1} </math> até <math> 2^{N-1}-1 </math>.  Assim com 3 bits é possível representar valores entre -4 até 3 com um tipo SIGNED e 0 até 7 com um tipo UNSIGNED.
 
:* Para uso adequado dos operadores também é necessário considerar o tamanho (número de bits) requirido para o resultado em função do tamanho dos operandos.
 
::* Para operações de "+" ou "-": O tamanho do resultado é igual ao tamanho do maior operando.
 
:::Exemplo: r[7..0] = a[7..0] + b[4..0]; a -> 8 bits; b -> 5 bits então r -> 8 bits.
 
::* Para a operações "*": O tamanho do resultado é igual a soma do tamanho dos dois operandos.
 
:::Exemplo: r[12..0] = a[7..0] * b[4..0]; a -> 8 bits; b -> 5 bits então r -> 8+5 = 13 bits.
 
::* Para "/": O tamanho do resultado é igual ao tamanho do numerador.
 
:::Exemplo: r[5..0] = a[5..0] / b[8..0]; a -> 6 bits; b -> 9 bits então r -> 6 bits.
 
:* No caso da operações de "*" e "/" não ocorre ''overflow'', no entanto no caso da "+" e "-", o ''overflow'' pode ocorrer e precisa ser tratado. Isso pode ser feito acrescentando um bit adicional a saída para conter o ''overflow'' ou então sinalizar a sua ocorrência.
 
:* Aula de exercícios:
 
::5.3 - Porta AND e NAND Genérica.
 
::5.4 - Gerador de Paridade Genérico.
 
 
;Aula 18 a 19  ():
 
*Código Concorrente.
 
* Relógio HH:MM:SS
 
 
;Aula 20 a 21 ():
 
* Simulação com Modelsim
 
:*Exemplo do Relógio HH:MM:SS
 
 
;Aula 22 ():
 
*Código Concorrente.
 
:* Aula de exercícios:  Escreve um código VHDL genérico que implemente os seguintes circuitos:
 
:: Ex1 - Conversor de Binário para Gray genérico;
 
<center> [[Arquivo:RTL_Bin2Gray4bits.png | Bin2Gray| 300 px]] <br> '''Fig 16. código RTL do conversor binário para Gray '''</center>
 
:: Ex2 - Conversor de Gray para Binário genérico;
 
<center> [[Arquivo:RTL_Gray2Bin4bits.png | Gray2Bin| 400 px]] <br> '''Fig 17. código RTL do conversor Gray para binário '''</center>
 
:: Ex3 - Utilizando os dois circuitos anteriores e um incrementador binário escreva um código VHDL que implemente um incrementador Gray;
 
<center> [[Arquivo:RTL_Inc_Gray4bits.png | Inc_Gray| 800 px]] <br> '''Fig 18. código RTL do incrementador de código Gray '''</center>
 
<center> [[Arquivo:SF_Inc_Gray4bits.png | Inc_Gray| 800 px]] <br> '''Fig 19. Simulação Funcional do incrementador de código Gray '''</center>
 
:Ver também [[Código Gray]];
 
:* Aula de exercicios:
 
::5.4 - Generic Parity Generator;
 
::5.6 - Generic Binary-to-Gray Converter;
 
::5.7 - Hamming Weight with GENERATE;
 
::5.10/11 - Arithmetic Circuit with INTEGER/STD_LOGIC;
 
::5.15/16/17/18 - (Un)signed Multiplier/Divider;
 
::5.19 - Frequency Multiplier.
 
 
 
<!--
 
===Unidade 6===
 
; Aula 26 (6 Jun):
 
*Projeto a nível de Sistema.
 
:* O '''PACKAGE''' e '''PACKAGE BODY''': onde declarar e como usar.
 
:* O '''COMPONENT''':  declaração (cópia da '''ENTITY''') e instanciação.
 
::* Associação dos nomes das portas aos sinais. PORT -> '''PORT MAP''':
 
::* Mapeamento por posição e nominal.
 
::* Métodos de declaração de '''COMPONENT'''.
 
:::*Exemplo: Registrador Circular Ex. 8.2
 
:* Ver pag. 201 a 208 de <ref name="PEDRONI2010b"/>
 
 
 
*Resolução dos exercícios:
 
:*Ex 6.7 (Ordenador Binário)  Tamara Arrigoni
 
 
; Aula 27 (8 Jun):
 
*Projeto a nível de Sistema.
 
:* Criação de '''COMPONENT''' redimensionáveis.  GENERIC -> '''GENERIC MAP'''
 
::*Exemplo: Porta E com N entradas.
 
::*Exemplo: Detector de Paridade Ex. 8.3
 
:* Instanciação de '''COMPONENT''' com '''GENERATE'''.
 
::*Exemplo: Registrador de deslocamento M x N Ex. 8.4
 
:* Ver pag. 208 a 213 de <ref name="PEDRONI2010b"/>
 
 
; Aula 28 (13 Jun):
 
*Projeto a nível de Sistema.
 
:* Uso da instrução '''CONFIGURATION'''.
 
::* Ligação direta: ARCHITECTURE-ENTITY.
 
::* Ligação da instanciação dos componentes: COMPONENT-ENTITY(ARCHITECTURE).
 
::*Exercício 28.1: Inserir as duas soluções de ARCHITECTURE do exercício EX 6.10 (Timer de dois digitos) em uma única ENTITY. Utilizar CONFIGURATION para fazer a ligação com a arquitetura desejada.
 
 
<syntaxhighlight lang=vhdl>
 
entity counter60seg is
 
  generic (fclk: integer := 2); -- valor usado para simulação.
 
--  generic (fclk: integer := 50_000_000); -- valor usado para implementação com clk de 50 MHz.
 
  port (
 
    clk, rst : in std_logic;
 
    ssd_un, ssd_dz: out std_logic_vector(6 downto 0));
 
end entity ;
 
 
architecture version1 of counter60seg is
 
-- Versão proposta por Gabriel Cantu (processo único)
 
  ...
 
begin
 
  ...
 
end architecture ;
 
 
architecture version2 of counter60seg is
 
-- Versão proposta por Gustavo Constante (5 processos)
 
  ...
 
begin
 
  ...
 
end architecture ;
 
 
configuration counter60seg_cfg of counter60seg is
 
for version1 end for;
 
-- for version2 end for;
 
end configuration;
 
 
</syntaxhighlight>
 
:* Exercício 28.2: Componentização do circuito conversor de binário para display de sete segmentos.  Também modifique a descrição vhdl de modo que a interface dos componentes sejam do tipo '''std_logic''' ou '''std_logic_vector'''.
 
<syntaxhighlight lang=vhdl>
 
entity bin2ssd is
 
  port (
 
    bin: in std_logic_vector(3 downto 0);
 
    ssd: out std_logic_vector(6 downto 0));
 
end entity ;
 
 
architecture with_case of bin2ssd  is
 
  ...
 
begin
 
  ...
 
end architecture ;
 
</syntaxhighlight>
 
 
; Aula 29 (15 Jun):
 
*Projeto a nível de Sistema.
 
FUNCTION e PROCEDURE (são chamados de subprogramas), e podem ser construidos em um PACKAGE, ENTITY, ARCHITECTURE, ou PROCESS.
 
 
A instrução '''ASSERT''' é útil para verificar as entradas de um subprograma. Seu propósito não é criar circuito, mas assegurar que certos requisitos são atendidos durante a sintese e/ou simulação. Pode ser condicional ou incondicional (condição_booleana = FALSE). A sintaxe da instrução é:
 
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] assert condição_booleana
 
[report mensagem]
 
[severity nivel_severidade];
 
</syntaxhighlight>
 
 
A mensagem pode ser criada usando STRINGs que podem ser concatenadas.
 
 
O nível de severidade pode ser NOTE (para passar informação para o compilador/simulator), WARNING (para informar que algo não usual ocorreu), ERROR (para informar que alguma condição não usual "sério" ocorreu), ou FAILURE (para informar que uma condição não aceitável ocorreu). Normalmente o compilador para quando ocorre um ERROR ou  FAILURE. NOTE é o valor "default".
 
 
:* A '''FUNCTION''': declaração, uso, mapeamento posicional x nominal, PURE x IMPURE. 
 
 
<syntaxhighlight lang=vhdl>
 
function nome_funçao (lista_parametros_entrada) return tipo_saida is
 
  declarações
 
begin
 
  afirmações sequenciais
 
end function;
 
</syntaxhighlight>
 
 
:* Uso de '''FUNCTION''' e '''ASSERT'''. 
 
::* Exemplo: Declaração em ARCHITECTURE Ex.9.1
 
::* Exemplo: Declaração em PACKAGE Ex. 9.2
 
::* Exemplo: Declaração em ENTITY Ex. 9.3
 
 
 
Abaixo segue um exemplo de cálculo do '''log2''' de um número inteiro. Pode ser usado para determinar o número de bits necessário para um número natural.
 
 
<syntaxhighlight lang=vhdl>
 
function log2c (n : integer) return integer is
 
variable m , p : integer;
 
begin
 
m := 0;
 
p : = 1;
 
while p < n loop
 
m : = m + 1;
 
p := p * 2;
 
end loop;
 
return m;
 
end log2c;
 
</syntaxhighlight>
 
-->
 
 
===Unidade 5===
 
;Aula 20 ():
 
*Código Sequencial.
 
:*Diferenças entre código concorrente e sequencial <=> circuitos combinacional e sequencial
 
:*Diferenças entre os objetos SIGNAL e VARIABLE
 
:*Tipos de elementos de memória: Latch x Flip-flop
 
::* Latch D
 
::* Flip-flop tipo D com reset assíncrono e com reset (clear) síncrono
 
:*Seção de código sequencial '''PROCESS''': lista de sensibilidade
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] PROCESS [(lista_de_sensibilidade)] [IS]
 
            [parte_declarativa]
 
        BEGIN
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
        END PROCESS [rótulo];
 
</syntaxhighlight>
 
:*Instrução '''IF'''
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] IF condição THEN
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
        ELSIF condição THEN
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
        ELSE
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
        END IF [rótulo];
 
</syntaxhighlight>
 
::*Exemplos: DFFs with Reset and Clear (Variação Ex 6.1), Basic Counter (Ex. 6.2), Shift Register (Ex. 6.3)
 
:*Instrução '''WAIT''': WAIT UNTIL, WAIT FOR (simulação apenas),  WAIT ON (não implementada no Quartus II).
 
::Algumas instruções de '''WAIT''' serão utilizadas na criação de '''TestBench''' em VHDL para a simulação com o '''MODELSIM'''.
 
::Recomenda-se utilizar a lista de sensibilidade do PROCESS e a instrução IF no lugar do WAIT.
 
:*Ver pag. 161 a 160 de <ref name="PEDRONI2010b"/>
 
 
;Aula 21 ():
 
*Código Sequencial.
 
:*Instruções do tipo '''LOOP''': LOOP incondicional, FOR-LOOP, WHILE-LOOP, NEXT, EXIT
 
 
::*LOOP incondicional:
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] LOOP
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
          END LOOP [rótulo];
 
</syntaxhighlight>
 
 
::*FOR-LOOP:
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] FOR identificador IN faixa LOOP
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
          END LOOP [rótulo];
 
</syntaxhighlight>
 
 
::*WHILE-LOOP:
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] WHILE condição LOOP            -- Executa as "afirmações enquanto a "condição" for verdadeira
 
            afirmação_sequencial;
 
            afirmação_sequencial;
 
            ...
 
          END LOOP [rótulo];
 
</syntaxhighlight>
 
 
::*LOOP com EXIT:
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] [FOR identificador IN faixa] LOOP
 
            afirmação_sequencial;
 
            EXIT [rótulo] [WHEN condição];    -- Se a "condição" é verdadeira, termina o "LOOP"
 
            afirmação_sequencial;
 
            ...
 
          END LOOP [rótulo];
 
</syntaxhighlight>
 
 
::*LOOP com NEXT:
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] [FOR identificador IN faixa] LOOP
 
            afirmação_sequencial;
 
            NEXT [rótulo] [WHEN condição];    -- Se a "condição" é verdadeira, não executa as linhas até a linha "END LOOP"
 
                                              -- e incrementa o "identificador".
 
            afirmação_sequencial;
 
            ...
 
          END LOOP [rótulo];
 
</syntaxhighlight>
 
 
::* Exemplos: Carry-Ripple Adder (FOR-LOOP) (Ex 6.4),
 
:*Ver pag. 161 a 164 de <ref name="PEDRONI2010b"/>
 
 
;Aula 22 ():
 
*Código Sequencial.
 
:*Instrução '''CASE''' 
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] CASE expressão IS
 
                  WHEN valor => atribuições;                            -- valor único
 
                  ...
 
                  WHEN valor1 | valor2 | ... | valorN  => atribuições;  -- lista de valores
 
                  ...
 
                  WHEN valor1 TO valor2    => atribuições;              -- faixa de valores
 
                  ...
 
 
          END CASE;
 
</syntaxhighlight>
 
:*Exemplos:
 
::* Leading Zeros (LOOP com EXIT) (Ex 6.5)
 
::* Contador de 0 a 9 segundos com saída SSD (Ex 6.6)
 
::* Projeto ruim com CASE incompleto (Ex. 6.7)
 
:*Exercícios do Capitulo 6
 
:*Ver pag. 164 a 176 de <ref name="PEDRONI2010b"/>
 
 
;Aula 23 (20/10):
 
*Código Sequencial.
 
:* Exercícios do Capítulo 6. 
 
::Uso do ModelSim - salvamento do '''wave.do'''
 
::Divisão dos exercícios entre duplas de alunos.
 
Ex 6.3  - Mateus, Paula, Andrey
 
Ex 6.5  - Bruno, Murilo, Kleiton
 
Ex 6.6  - Henrique, Matias
 
Ex 6.7  - Natália, Luísa
 
Ex 6.10a (incrementando de 00 até XX - Jessica e Letícia
 
Ex 6.10a (decrementando de XX até 00 - Layssa e Alline
 
Ex 6.11 - Gabriel S, Gustavo W,
 
Ex.6.15 - Daniel, Nelson, Gabriel W
 
* Durante a aula os alunos foram orientados na resolução dos exercícios, e simulação usando o Modelsim.
 
* Os alunos devem enviar o arquivo QAR contendo o projeto e simulação para o email do professor.
 
* Discuta com os colegas como resolveram o Exercício proposto para eles.  Cada aluno deverá saber solucionar todos os exercícios.
 
 
===Unidade 6===
 
; Aula 26 ():
 
*Projeto a nível de Sistema.
 
:* O '''PACKAGE''' e '''PACKAGE BODY''': onde declarar e como usar.
 
:* O '''COMPONENT''':  declaração (cópia da '''ENTITY''') e instanciação.
 
::* Associação dos nomes das portas aos sinais. PORT -> '''PORT MAP''':
 
::* Mapeamento por posição e nominal.
 
::* Métodos de declaração de '''COMPONENT'''.
 
:::*Exemplo: Registrador Circular Ex. 8.2, usando como componente básico o mux junto com o DFF.
 
:* Ver pag. 201 a 208 de <ref name="PEDRONI2010b"/>
 
 
*Resolução dos exercícios:
 
 
; Aula 27 ():
 
*Projeto a nível de Sistema.
 
:* Criação de '''COMPONENT''' redimensionáveis.  GENERIC -> '''GENERIC MAP'''
 
::*Exemplo: Porta E com N entradas.
 
::*Exemplo: Detector de Paridade Ex. 8.3
 
:* Instanciação de '''COMPONENT''' com '''GENERATE'''.
 
::*Exemplo: Alterar o exercício 8.2 realizando a instanciação dos componentes com FOR GENERATE.  Instanciar duas vezes o Registrador Circular com 8 e 16 bits, sendo os 8 primeiros bits de entrada comuns aos dois registradores.
 
::*Exercício: Registrador de deslocamento M x N Ex. 8.4
 
:* Ver pag. 208 a 213 de <ref name="PEDRONI2010b"/>
 
 
; Aula 28 ():
 
*Projeto a nível de Sistema.
 
:* Uso da instrução '''CONFIGURATION'''.
 
::* Ligação direta: ARCHITECTURE-ENTITY.
 
::* Ligação da instanciação dos componentes: COMPONENT-ENTITY(ARCHITECTURE).
 
::*Exercício 28.1: Inserir as duas soluções de ARCHITECTURE do exercício EX 6.10 (Timer de dois digitos) em uma única ENTITY. Utilizar CONFIGURATION para fazer a ligação com a arquitetura desejada.
 
 
<syntaxhighlight lang=vhdl>
 
entity counter60seg is
 
  generic (fclk: integer := 2); -- valor usado para simulação.
 
--  generic (fclk: integer := 50_000_000); -- valor usado para implementação com clk de 50 MHz.
 
  port (
 
    clk, rst : in std_logic;
 
    ssd_un, ssd_dz: out std_logic_vector(6 downto 0));
 
end entity ;
 
 
architecture version1 of counter60seg is
 
 
  ...
 
begin
 
  ...
 
end architecture ;
 
 
architecture version2 of counter60seg is
 
 
  ...
 
begin
 
  ...
 
end architecture ;
 
 
configuration counter60seg_cfg of counter60seg is
 
for version1 end for;
 
-- for version2 end for;
 
end configuration;
 
 
</syntaxhighlight>
 
:* Exercício 8.2: Componentização do circuito conversor de binário para display de sete segmentos.  Também modifique a descrição vhdl de modo que a interface dos componentes sejam do tipo '''std_logic''' ou '''std_logic_vector'''.
 
<syntaxhighlight lang=vhdl>
 
entity bin2ssd is
 
  port (
 
    bin: in std_logic_vector(3 downto 0);
 
    ssd: out std_logic_vector(6 downto 0));
 
end entity ;
 
 
architecture with_case of bin2ssd  is
 
  ...
 
begin
 
  ...
 
end architecture ;
 
</syntaxhighlight>
 
 
;Aula 29 e 30 ():
 
*Projeto hierárquico em equipes do circuito lançador de foguete.
 
:*Subsistema 1a - Contador incrementador (de  00 a 99) -
 
:*Subsistema 1b - Contador decrementador (de  99 a 00) -
 
:*Subsistema 2a - Contador em anel -
 
:*Subsistema 2a - Shift register -
 
:*Subsistema 3a - Mostrador SSD com case - Daniel e Nelson
 
:*Subsistema 3b - Mostrador SSD com with select - Natalia e Luisa
 
:*
 
 
:*Integração e implementação na DE2-115
 
:*Integração e implementação na DE2-115
 
:*Integração e implementação na Mercurio IV
 
 
;Aula 31(7/11):
 
*Resolução de exercícios do capitulo 6
 
:* Ex 6.5 Shift register - Bruno e Murilo
 
:* Ex 6.3 Mux NxM - Matheus, Paulo e Andrey
 
:* Ex 6.15 Serializador - Daniel e Nelson
 
 
;Aula 32 (8/11):
 
*Projeto hierárquico em equipes do circuito lançador de foguete.
 
<center>[[Arquivo:Top_level_foguete.png| 400 px]] </center>
 
<center>'''Fig.1 - RTL do Top Level do projeto do simulador de lançamento de foguete.'''  </center>
 
 
<center>[[Arquivo:Components_foguete.png| 800 px]] </center>
 
<center>'''Fig.2 - RTL dos componentes do simulador de lançamento de foguete.'''  </center>
 
 
<center>[[Arquivo:Simlation_foguete.png| 800 px]] </center>
 
<center>'''Fig.3 - Simulação no ModelSim do lançamento de foguete.'''  </center>
 
 
===ATUAL===
 
; Aula 33 (17/11):
 
*Projeto a nível de Sistema.
 
FUNCTION e PROCEDURE (são chamados de subprogramas), e podem ser construidos em um PACKAGE, ENTITY, ARCHITECTURE, ou PROCESS.
 
 
A instrução '''ASSERT''' é útil para verificar as entradas de um subprograma. Seu propósito não é criar circuito, mas assegurar que certos requisitos são atendidos durante a sintese e/ou simulação. Pode ser condicional ou incondicional (condição_booleana = FALSE). A sintaxe da instrução é:
 
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] assert condição_booleana
 
[report mensagem]
 
[severity nivel_severidade];
 
</syntaxhighlight>
 
 
A mensagem pode ser criada usando STRINGs que podem ser concatenadas.
 
 
O nível de severidade pode ser NOTE (para passar informação para o compilador/simulator), WARNING (para informar que algo não usual ocorreu), ERROR (para informar que alguma condição não usual "sério" ocorreu), ou FAILURE (para informar que uma condição não aceitável ocorreu). Normalmente o compilador para quando ocorre um ERROR ou  FAILURE. NOTE é o valor "default".
 
 
:* A '''FUNCTION''': declaração, uso, mapeamento posicional x nominal, PURE x IMPURE. 
 
 
<syntaxhighlight lang=vhdl>
 
function nome_funçao (lista_parametros_entrada) return tipo_saida is
 
  declarações
 
begin
 
  afirmações sequenciais
 
end function;
 
</syntaxhighlight>
 
 
:* Uso de '''FUNCTION''' e '''ASSERT'''. 
 
::* Exemplo: Declaração em ARCHITECTURE Ex.9.1
 
::* Exemplo: Declaração em PACKAGE Ex. 9.2
 
::* Exemplo: Declaração em ENTITY Ex. 9.3
 
 
 
Abaixo segue um exemplo de cálculo do '''log2''' de um número inteiro. Pode ser usado para determinar o número de bits necessário para um número natural.
 
 
<syntaxhighlight lang=vhdl>
 
function log2c (n : integer) return integer is
 
variable m , p : integer;
 
begin
 
m := 0;
 
p : = 1;
 
while p < n loop
 
m : = m + 1;
 
p := p * 2;
 
end loop;
 
return m;
 
end log2c;
 
</syntaxhighlight>
 
  
 
==Avaliações==
 
==Avaliações==

Edição das 15h36min de 9 de fevereiro de 2017

MURAL DE AVISOS E OPORTUNIDADES DA ÁREA DE TELECOMUNICAÇÕES


Registro on-line das aulas

Unidade 1

Aula 1 (11 Ago)
  • Introdução aos dispositivos lógicos programáveis:
  • Conceito, tipos de PLDs
  • SPLD: PAL, PLA e GAL
  • CPLDs
Exemplos de PLDs
Ep310 macrocell.jpg
Figura 1.1 - Macrobloco do PLD EP300 da ALTERA
FONTE: https://www.altera.com/solutions/technology/system-design/articles/_2013/in-the-beginning.html
Macrocell EP900.png
Figura 1.2 - Macrocélula dos PLDs Clássicos EP600, EP900, EP1800 da ALTERA (1999)
FONTE: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ds/archives/classic.pdf
Ep1800 block diagram.jpg Ep1800 block diagram2.jpg
Figura 1.3 - Architetura do PLD EP1800 da ALTERA
FONTE: https://www.altera.com/solutions/technology/system-design/articles/_2013/in-the-beginning.html
FONTE: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ds/archives/classic.pdf
PackagePinOut EP1810.png ChipEP1810.png
Figura 1.5 - Pinagem e tipos de encapsulamento do PLD EP1800 da ALTERA
FONTE: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ds/archives/classic.pdf
FONTE: multisound_tahiti.jpeg
Max 5000 architecture.jpg
Figura 1.6 - Architetura do CPLD MAX 5000 da ALTERA
FONTE: https://www.altera.com/solutions/technology/system-design/articles/_2013/in-the-beginning.html
Ver Dispositivos Lógicos Programáveis - Kamila Rose da Silva, IFSC
Ver In the befinning - ALTERA
Ver ALTERA history
Ver pag. 413 a 422 de [1]
Ver pag. 495 a 499 de [2]

Avaliações

  • Avaliação A1 - Unidade 2 a 4 (13/10/2016) - Local: Lab Redes II.
  • Avaliação A2 - Unidade 5 a 7 (XX/XX/2016) - Local: Lab Redes II.
As avaliações A1 e A2 são com consulta apenas as folhas de consulta entregues VHDL QUICK REFERENCE CARD e VHDL 1164 PACKAGES QUICK REFERENCE CARD. Dica use também como fonte de consulta os templates do Quartus.
  • Recuperação R1-2 - Unidade 2 a 7 (XX/XX/2016) - Local: Lab Redes II.
Ao final das avaliações o aluno deverá enviar para o email moecke AT ifsc.edu.br com os arquivos solicitados.
  • Entrega dos Atividades Extraclasse ao longo do semestre AE1 a AE(N-1). Os prazos serão indicados aqui na Wiki
  • Projeto Final APF (XX/XX/2016).

Atividades extraclasse

Neste tópico serão listadas as atividades extraclasse que os alunos/equipes deverão realizar ao longo do semestre.

PARA ENTREGAR

AE1 - Temas relacionados aos DLPS (Prazo de entrega do resumo (500 caracteres/ 1 pagina): 09 setembro 2016 até as 23:59), Prazo de entrega do artigo: 07 de outubro de 2016
  • Formar equipes com 2 ou 3 alunos, e em conjunto façam uma pesquisa sobre um tema relacionado a DLPs.
TEMA 1 - FPGA x Microprocessador - Vantagens e desvantagens (Daniel e Nelson)
TEMA 2 - Analisadores lógicos em FPGA (Mateus, Paula e Andrey)
TEMA 3 - Simuladores de VHDL (Modelsim e QSIM) (Bruno e Murilo)
TEMA 4 - Processamento de vídeo em FPGA(Mathias, Lucas e Henrique)
TEMA 5 - FPGA na industria automotiva (Natalia e Luisa)
TEMA 6 - Aplicações em redes neurais (Jessica, Leticia e Gabriel S,)
TEMA 7 - Aplicação de Tecnologia de Segurança usando FPGA e SoCs(Kleiton, Gustavo W. e Gabriel W.)
TEMA 8 - Aplicações em Imagens Médicas (João, Alline e Layssa)
INSPIRAÇÃO para temas:
  • Escrever um artigo com 4 a 8 páginas A4. O artigo deve ser completo, incluindo todas as referências utilizadas. Dê um título coerente ao artigo. Seja criativo.
  • Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma Sharelatex do IFSC-CLOUD. Utilize preferencialmente o modelo de artigo no padrão ABNT. Outro modelo de artigo que pode ser utilizado é o da Elsevier. Consulte também Uso do ShareLaTeX na IFSC-CLOUD.
  • Envie o resumo em pdf para (moecke AT ifsc.edu.br), com o ASSUNTO: DLP29006 - AE1 - Temas relacionados aos DLPS - resumo.
  • Envie o artigo em pdf para (moecke AT ifsc.edu.br), com o ASSUNTO: DLP29006 - AE1 - Temas relacionados aos DLPS - artigo.
AE2 - Uso de código concorrente - ALU modificada (Prazo de entrega 30/09/2016)
  • Implemente em VHDL uma Unidade de Lógica e Aritmética que tem como entrada os sinais A e B e que execute as seguintes instruções lógicas e aritméticas conforme o opcode de entrada:
Unidade Lógica
Instrução Operação opcode GRUPO
Complemento de A Y = not A 00000 1
Complemento de B Y = not B 00001 2
And Y = A nand B 00010 3
Nand Y = A and B 00011 4
Or Y = A nor B 00100 1
Nor Y = A or B 00101 2
Xor Y = A xor B 00110 3
Xnor Y = A xnor B 00111 4
Unidade Aritmética
(onde os valores de A e B podem ser positivos ou negativos)
Instrução Operação opcode GRUPO
Transfere A Y = A 01000 1
Transfere B Y = B 10001 2
complemento-2 de A Y = -A 01001 3
complemento-2 de B Y = -B 10001 4
Incrementa A Y = A + 1 01010 1
Decrementa A Y = A - 1 01011 2
Incrementa B Y = B + 1 10010 3
Decrementa B Y = B - 1 10011 4
Soma A e B Y = A + B 11000 1,2,3,4
Subtrai B de A Y = A - B 11001 1,3
Subtrai A de B Y = B - A 11010 2,4
LSB da Multiplicação de A e B Y = A * B 11011 1,2
MSB da Multiplicação de A e B Y = A * B 11100 3,4
Dobra o valor A Y = A * 2 01100 1
Dobra o valor B Y = B * 2 10100 2
Metade do valor A Y = A / 2 01101 3
Metade do valor B Y = B / 2 10101 4
Divisão de A / B Y = A / B 11101 1,2,3,4
Resto da Divisão de A / B Y = A REM B 11110 1,2,3,4
  • A ENTITY deverá ter a seguinte interface:
ENTITY alu IS
GENERIC (N: INTEGER := 4); --word bits
PORT (
	A, B: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
	opcode: IN STD_LOGIC_VECTOR(4 DOWNTO 0);
	Y: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
END ENTITY;
  • Proponha uma ARCHITECTURE que implemente a ALU (Dica: utilize o tipo de dado tipo integer).
  • Escolha no FACEBOOK um dos GRUPOS de instruções indicados pelos números 1, 2, 3 e 4 na coluna GRUPO.
  • Na multiplicação LSB são os N bits menos significativos do resultado, e MSB são os N bits mais significativos do resultado. Por exemplo se o resultado tem 10 bits "1001001011" MSB = "10010" e LSB = "01011".
  • Anote o número de Elementos Lógicos (ou ALUTs) utilizados [Compilation Report > Flow Summary].
  • Verifique o código RTL gerado [Tools > Netlist Viewers > RTL Viewer]
  • Faça a simulação funcional no QSIM com 8 pares de valores (use os valores mínimos e máximos e outros pares de valores representáveis) e verifique se o resultado das operações está correto. Teste cada instrução (opcode) em separado.
  • Analise os resultados obtidos para entradas com 4 bits. Verifique os casos em que há overflow.
  • Escreva um relatório contendo o código VHDL, a figura do circuito RTL, as simulações funcionais solicitadas e uma análise dos resultados obtidos. Relate o número de elementos lógicos utilizados.
  • Envie o artigo em pdf e o qar para (moecke AT ifsc.edu.br), com o ASSUNTO: DLP29006 - AE2 - Uso de código concorrente - ALU modificada.
AE3 - Circuito de transmissão e recepção serial (Prazo de entrega: 27 Novembro 2016)
  • Formar equipes com 2 ou 3 alunos.
  • Escreva o código VHDL para implementar de modo hierárquico o sistema abaixo.
RTL Serial TX RX.png
  • Os blocos verdes são componentes. Os nomes das portas do TOP LEVEL e de cada COMPONENT está indicado no diagrama. Todos os sinais de portas devem usar o tipo STD_LOGIC(_VECTOR).
  • Procure reutilizar os componentes que já foram realizados durante o semestre.
  • Realizar a simulação do sistema, transmitindo um sinal de 7 bits da entrada data_in para a saída data_out.
  • Como taxas de baud_rate utilize 1 bps e 1000 bps.
  • Implemente o sistema usando uma placa DE2-115.
  • Identifique cada arquivo VHD com um cabeçalho indicando os autores, e data. Sugestão:


-- Projeto de um serial_TX e serial_RX -- AUTOR: -- DATA: XX Nov 2016 -- DISCIPLINA: DLP29006 - ENG. TELECOMUNICAÇOES IFSC -- FILE: Nome_do_arquivo.vhd


</syntaxhighlight>

  • Escreva um relatório técnico na forma de artigo com 4 a 6 paginas A4. O relatório deverá descrever o funcionamento do circuito e os testes de simulação e na placa realizados.
  • Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma Sharelatex do IFSC-CLOUD. Utilize preferencialmente o modelo de artigo no padrão ABNT.
  • Envie o artigo em pdf para (moecke AT ifsc.edu.br), com o ASSUNTO: DLP29006 - AE3 - Circuito de transmissão e recepção serial.
APF - Projeto Final de Hardware (prazo final da documentação 19/12/2016 as 23:59, apresentação do projeto final no kit DE2-115 20/12/2016)
  • ATENÇÃO!!! Houve uma mudança na atividade deste projeto. A parte adicional que estava proposta para cada equipe não precisa mais ser realizada, pois a maioria das equipes não tem ainda um circuito transmissor e receptor funcionando de forma integrada com diferentes baud-rates. Por isso, o projeto final será simplicado e será apenas a continuidade/finalização da AE3.
  • Após ter o sistema de transmissão e recepção serial proposto em AE3 funcionando em simulação, cada equipe deverá para o projeto final fazer ainda:
  • Implemente o sistema usando uma placa DE2-115 (Já previsto inicialmente)
  • Utilize um sinal o sinal de clock de 50MHz para gerar os sinais de baud_rate de 1bps e 1000bps.
  • utilize os displays conforme estabelecido na AE3.
  • Para entrada de dados utilize as chaves deslizantes, utilizando 14 chaves como informação de entrada (use um mux para escolher os primeiros 7 bits ou os 7 últimos)
  • Utilize uma das chaves deslizantes para selecionar o canal do mux.
  • Utilize uma das chaves deslizantes para selecionar o baud rate.
  • Utilize um led para monitorar a interface serial. (note que na taxa de 1bps é possível acompanhar a transmissão dos bits visualmente) outros leds podem ser utilizados para observar o dado transmitido e recebido (nas entrada e saída paralela), e também para o bit de paridade.
  • Escrever um relatório técnico na forma de artigo com 4 a 8 paginas A4. O relatório deverá descrever o funcionamento do circuito e os testes de simulação e na placa realizados.
  • Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma Sharelatex do IFSC-CLOUD. Utilize preferencialmente o modelo de artigo no padrão ABNT.
  • Envie o artigo em pdf para (moecke AT ifsc.edu.br), com o ASSUNTO: DLP29006 - APF - Projeto Final de Hardware.
  • Os projetos finais e alunos serão analisados em 5 quesitos:
  • Correção do projeto, atendimento as especificações e requisitos do sistema.
  • Documentação do projeto.
  • Implementação no kit DE2-115.
  • Apresentação do projeto.
  • Avaliação individual do aluno no projeto.

ARTIGOS ENTREGUES

2016-2
2016-1
2015-2
2015-1

ESTUDOS SEM ENTREGA DE DOCUMENTAÇÃO

Os exemplos e exercícios essenciais estão destacados em negrito na listagens abaixo.

EL1 - Resolução dos exercícios do Cap 3
  • Resolva os exercícios do capítulo 3 (1, 2, 9, 11, 12, 13, 14-17, 18, 20, 22, 23-30) pag. 81 a 89
EL2 - Resolução dos exercícios do Cap 4
  • Resolva os exercícios do capítulo 4 (4-8, 9, 10-11, 13, 15-16, 17 ) pag. 115 a 120
EL3 - Resolução dos exercícios do Cap 5
  • Resolva os exercícios do capítulo 5 (1, 2, 3, 4, 6, 7, 8-9, 10-11, 14-16, 17-18, 19 ) pag. 144 a 150

Recursos de Laboratório

Quartus/Modelsim/QSIM

Nos laboratórios do IFSC, os softwares Quartus/Modelsim/QSIM estão disponíveis diretamente na plataforma LINUX. Utilize preferencialmente a versão 13.0sp1 (32 bits), pois ela tem suporte para os FPGAs mais antigos como a familia Cyclone I.

Para uso fora do IFSC dos recursos computacionais com licença educacional, o IFSC disponibiliza para seus alunos o IFSC-CLOUD. Atualmente a forma mais eficiente de acesso é através do Cliente X2GO. O procedimento de instalação/ configuração e uso do Quartus/Modelsim/QSIM está descrito em Acesso ao IFSC-CLOUD#Cliente X2GO (recomendado).

Sharelatex

Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma Sharelatex do IFSC-CLOUD. Utilize preferencialmente o modelo de artigo no padrão ABNT.


Links auxiliares

Livros/Resumos sobre VHDL

Packages não padronizados

Simulador Modelsim

Fabricantes de DLPs

Fabricantes de kits com DLPS

Leituras recomendadas


Padrões IEEE para o VDHL

Os padrões IEEE [3]estão disponíveis para consulta se você estiver na rede do IFSC. Para a linguagem VHDL consulte os padrões: 1164,1076

Packages da IEEE

Referências Bibliográficas:

  1. PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657
  2. PEDRONI, Volnei A. Circuit Design and Simulation with VHDL; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p. ISBN 9780262014335



Curso de Engenharia de Telecomunicações