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
(231 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 
{{DivulgueEngtelecom}}
 
{{DivulgueEngtelecom}}
==Informações Gerais==
+
*Link curto http://bit.ly/IFSC-DLP29006
 
*[[DLP1-EngTel|Carga horária, Ementas, Bibliografia, Professores]]
 
*[[DLP1-EngTel|Carga horária, Ementas, Bibliografia, Professores]]
 
*[[Cronograma de atividades (DLP1-EngTel) | Cronograma de atividades ]]
 
*[[Cronograma de atividades (DLP1-EngTel) | Cronograma de atividades ]]
Linha 7: Linha 7:
 
==Registro on-line das aulas==
 
==Registro on-line das aulas==
 
===Unidade 1===
 
===Unidade 1===
;Aula 1 (5 fev):
+
;Aula 1 (23 Mar):
 
*[[DLP1-EngTel (Plano de Ensino) | Apresentação da disciplina]]
 
*[[DLP1-EngTel (Plano de Ensino) | Apresentação da disciplina]]
 
#Dispositivos lógicos programáveis.
 
#Dispositivos lógicos programáveis.
Linha 22: Linha 22:
 
:* Conceito, tipos de PLDs  
 
:* Conceito, tipos de PLDs  
 
:* SPLD: PAL, PLA e GAL
 
:* SPLD: PAL, PLA e GAL
::Ver pag. 413 a 418 de <ref name="PEDRONI2010a"> PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657 </ref>
+
:* CPLDs
 +
::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>
  
;Aula 2 (6 fev):
+
;Aula 2 (28 Mar):
 
*Introdução aos dispositivos lógicos programáveis:
 
*Introdução aos dispositivos lógicos programáveis:
:* CPLDs e FPGAs
+
:* Arquitetura de FPGAs (Xilinx e Altera): CLB, LAB, RAM, DSP, Clock, PLL, I/O
 
:* Fabricantes de DLPs
 
:* Fabricantes de DLPs
:* Vizualização no Chip Planner de um projeto.
+
:* Vizualização no Chip Planner de um projeto. (importante todos alunos terem acesso a [[IFSC-CLOUD]]
::Ver pag. 419 a 424 de <ref name="PEDRONI2010a" />
+
::Ver pag. 419 a 431 de <ref name="PEDRONI2010a" />
 +
::Ver pag. 499 a 501 de <ref name="PEDRONI2010b" />
 +
:*[[Conhecendo os dispositivos lógicos programáveis]]
 +
::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>
 +
 
 +
===Unidade 2===
 +
;Aula 3 e 4 (30-31 Mar) - Introdução ao VHDL e ambienta EDA - QUARTUS
 +
 
 +
*Exemplo de programação de um full adder. 
 +
::Utilize os arquivos [https://owncloud.ifsc.edu.br/index.php/s/FYkGXQSK69JPweb full_adder.qar]
 +
* Estrutura do código VHDL
 +
* Libraries, Entity, Architecture
 +
* Exemplo 2.2 (VHDL) - programação de um flip-flop
 +
<syntaxhighlight lang=vhdl>
 +
LIBRARY ieee;
 +
USE ieee.std_logic_1164.all;
 +
 
 +
ENTITY flip_flop IS
 +
  PORT (d, clk, rst: IN STD_LOGIC;
 +
  q: OUT STD_LOGIC);
 +
END;
 +
 
 +
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 1 - 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 - 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 3 - Chip Planner do Exemplo 2.2 </center>
  
;Aula 3 (11 fev)
 
*Introdução aos dispositivos lógicos programáveis:
 
:* Arquitetura de FPGAs (Xilinx e Altera): CLB, LAB, RAM, DSP, Clock, PLL, I/O
 
:* Vizualização no Chip Planner de um projeto.
 
::Ver pag. 424 a 431 de <ref name="PEDRONI2010a" />
 
  
===Unidade 2===
+
* Exemplo 2.3 (VHDL e QSIM) - programação de um circuito somador com registrador
;Aula 4 (12 fev):
+
:: 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 4 - 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>
 +
 
 +
;Aula 5 (4 Abr):
 
*Introdução ao VHDL.
 
*Introdução ao VHDL.
:*Exemplo de programação de um full adder.  Utilize os arquivos .qar enviados (V1 - estrutural.  V2 - comportamental) para analisar os circuitos obtidos e realizar as simulações funcional e temporal.
+
:*Exemplo de decodificador de endereço genérico
::Ver pag. 3 a 8 de <ref name="PEDRONI2010b"> PEDRONI, Volnei A. '''Circuit Design and Simulation with VHDL'''; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p.  ISBN  9780262014335 </ref>
+
<syntaxhighlight lang=vhdl>
 +
ENTITY address_decoder IS
 +
GENERIC (N: NATURAL := 2);
 +
PORT (
 +
address: IN NATURAL RANGE 0 TO 2**N-1;
 +
ena: BIT;
 +
word_line: OUT BIT_VECTOR(2**N-1 DOWNTO 0));
 +
END ENTITY;
 +
 +
ARCHITECTURE ad_arch1 OF address_decoder IS
 +
BEGIN
 +
gen: FOR i IN address'RANGE GENERATE
 +
word_line(i) <= '1' WHEN ena='0' ELSE
 +
'0' WHEN i=address ELSE
 +
'1';
 +
END GENERATE;
 +
END ARCHITECTURE;
  
;Aula 5 (13 fev):
+
ARCHITECTURE ad_arch2 OF address_decoder IS
*Introdução ao VHDL.
+
signal word_tmp: BIT_VECTOR(2**N-1 DOWNTO 0);
:* Estrutura do código VHDL
+
BEGIN
:* Libraries, Entity, Architecture
+
word_line <= (others => '1') WHEN ena='0' ELSE word_tmp;
 +
gen: FOR i IN address'RANGE GENERATE
 +
word_tmp(i) <= '0' WHEN i=address ELSE '1';
 +
END GENERATE;
 +
END ARCHITECTURE;
 +
 
 +
CONFIGURATION ad_conf OF address_decoder is
 +
FOR ad_arch1 END FOR;
 +
END CONFIGURATION;
 +
</syntaxhighlight>
 +
::* Utilize Family = '''Cyclone''' e Device = '''EP1C4F400C6'''
 +
::* Observe que o uso de um valor GENERIC permite criar diferentes tamanhos de hardware de forma muito simples.
 +
::* Usando N = 2, verifique o RTL e o TECHNOLOGY MAP obtido para as duas ARCHITECTURES {ad_arch1, ad_arch2}.  A função do CONFIGURATION é definir qual das ARCHITECTURE será associada a ENTITY.
  
;Aula 6 (19 fev):
+
<center>[[Arquivo:RTL_Ex2_4_Pedronib.png | 400 px]] </center>
*Introdução ao VHDL.
+
<center> Figura 5 - Código RTL do Exemplo 2.4 (N=2) </center>
:* Estrutura do código VHDL
 
:* Exercicios 2.2 (VHDL e QSIM)
 
:* Exemplo de programação de um flip-flop
 
:* Exercicios 2.3 (VHDL e QSIM)
 
::Ver pag. 3 a 8 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 7 (20 fev):
+
<center>[[Arquivo:TM_Ex2_4_Pedronib.png | 400 px]] </center>
*Introdução ao VHDL.
+
<center> Figura 6 - Technology Map do Exemplo 2.4 (N=2) </center>
:*Libraries, Entity, Architechture, Generic.
 
::Ver pag. 11 a 18 de <ref name="PEDRONI2010b"/>
 
  
;Aula 8 (25 fev):
+
::* Comente a linha (word_line <= (others => '1') WHEN ena='0' ELSE word_tmp;) e veja o RTL obtido.
*Introdução ao VHDL.
+
::* Verifique o RTL gerado para os casos de N = 2, 3, 4, 8.  Perceba que o número de pinos necessário cresce exponencialmente com N.  Use o ['''Processing''' > '''Compilation Report'''] e anote o número de '''pinos''' usados, o número de '''elementos lógicos''' e o '''tempo de propagação''' do caminho crítico ('''TimeQuest Timing Analyser''' > '''Datasheet Report''' > '''Propagation Delay''').
:*Exemplo de um circuito somador
+
::*Restrinja o tempo de propagação entre entrada(s) e saída(s).  Para isso é necessário acrescentar ao projeto um arquivo .sdc ([http://quartushelp.altera.com/14.0/mergedProjects/reference/glossary/def_sdc.htm Synopsys Design Constraints File]). No exemplo abaixo é inserida um restrição de máximo atraso ([http://quartushelp.altera.com/15.0/mergedProjects/tafs/tafs/tcl_pkg_sdc_ver_1.5_cmd_set_max_delay.htm set_max_delay]) entre todas as portas de entradas para todas as portas de saída de 15 ns. Para inserir esta restrição crie um arquivo sdc1.sdc com o seguinte conteúdo:
:*Exemplo de FF-D
+
set_max_delay -from [get_ports *] -to [get_ports *]  15
::Ver pag. 19 a 21 de <ref name="PEDRONI2010b"/>
+
:::Experimente restringir o tempo máximo atraso em 11ns, 8ns, 6ns e observe o resultado da compilação.  Observe o Chip Planner e também o tempo de propagação.
 +
::Ver pag. 22 a 30 de <ref name="PEDRONI2010b"/>
  
 
===Unidade 3===
 
===Unidade 3===
;Aula 9 (26 fev):
+
;Aula (6 Abr):
*Tipos de Dados em VHDL.
 
:*Exemplo de um circuito somador com registrador
 
:*Exemplo de decodificador de endereço genérico
 
::Ver pag. 22 a 27 de <ref name="PEDRONI2010b"/>
 
 
 
;Aula 10 (27 fev):
 
 
*Tipos de Dados em VHDL.
 
*Tipos de Dados em VHDL.
 
:*Objetos de VHDL: CONSTANT, SIGNAL, VARIABLE, FILE.
 
:*Objetos de VHDL: CONSTANT, SIGNAL, VARIABLE, FILE.
 
:*Palavra chave OTHERS
 
:*Palavra chave OTHERS
 
:* Bibliotecas padrão.
 
:* Bibliotecas padrão.
::*Não use as bibliotecas não padrão (''std_logic_arith, std_logic_unsigned, std_logic_signed'')
+
::* '''ATENÇÃO!!! Não use as bibliotecas que não são padrão (''std_logic_arith, std_logic_unsigned, std_logic_signed''''')
:*Tipos de dados: BIT, BIT_VECTOR, BOOLEAN, INTEGER, NATURAL, POSITIVE, CHARACTER, STRING, STD_(U)LOGIG, STD_(U)LOGIG_VECTOR, (UN)SIGNED
+
:: Ver pag. 31 a 39 de <ref name="PEDRONI2010b"/>
:*Classificação dos tipos de dados.
+
 
:*Exemplo 3.1 Buffer Tri-state
+
;Aula 7  (11 Abr):
:*Exemplo 3.3 Multiplicador
+
*Tipos de Dados em VHDL.
::Ver pag. 31 a 54 de <ref name="PEDRONI2010b"/>
+
:* 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"/>
  
;Aula 11 (5 mar):
+
;Aula (13 Abr):
 
*Tipos de Dados em VHDL.
 
*Tipos de Dados em VHDL.
:*Tipos Array definidos pelo usuário: 1D, 1D x 1D, 2D, 1D x 1D x 1D, 3D.
+
:* Tipos de dados: SIGNED e UNSIGNED
::Ver pag. 62 a 79 de <ref name="PEDRONI2010b"/>
+
:* 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 12 (6 mar):
+
;Aula (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 em VHDL.
:* Operadores predefinidos: Atribuição, Logicos, Arithméticos, Comparação, Deslocamento, Concatenação, "Matching".
+
:* Operadores predefinidos: Atribuição, Lógicos, Aritméticos, Comparação, Deslocamento, Concatenação, "Matching".
 
:* Sobrecarga de operadores
 
:* Sobrecarga de operadores
::Ver pag. 91 a 98 de <ref name="PEDRONI2010b"/>
 
 
;Aula 13 (11 mar):
 
 
*Atributos em VHDL.
 
*Atributos em VHDL.
 
:* Atributos predefinidos: tipo escalar e enumerados; tipo array; de sinal;
 
:* Atributos predefinidos: tipo escalar e enumerados; tipo array; de sinal;
:* Exemplo 4.1 (Simulação funcional)
+
:* Exemplo 4.2 (Simulação funcional)
 
:* Atributos definidos pelo usuário;
 
:* Atributos definidos pelo usuário;
:* Atributos de síntese: Enum_encoding, chip_pin, keep.
+
:* Atributos de síntese:  
:* Exemplo: Delay line (Síntese e Simulação temporal sem o com o atributo keep)
+
::* Enum_encoding [http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_file_dir_enum_encoding.htm]
::Ver pag. 99 a 109 de <ref name="PEDRONI2010b"/>
+
::* 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 14 (12 mar):
+
;Aula 12 (25 Abr):
 
*Atributos em VHDL.
 
*Atributos em VHDL.
:* Atributos de síntese: preserve, noprune.
+
:* Atributos de síntese:  
:* Exemplo: Redundant Register
+
::* keep [http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_file_dir_keep.htm]
:* Group e Alias
+
:::* 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
 
:* Exercício 4.17: Discussão de possibilidades de implementação
::Ver pag. 109 a 119 de <ref name="PEDRONI2010b"/>
+
:: 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===
 
===Unidade 4===
;Aula 15 (13 mar):
+
;Aula 13  (27 Abr):
 
*Código Concorrente.
 
*Código Concorrente.
:* WHEN, SELECT, GENERATE;
+
:* Uso de Operadores
:* Exemplo 5.1 + 5.2 mux: com 4 tipos de arquiteturas (com operadores, com WHEN, com SELECT, com IF),
+
:* WHEN, SELECT;
:* Uso de CONFIGURATION para selecionar um entre várias arquiteturas.
+
:* 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>
 
<syntaxhighlight lang=vhdl>
 
CONFIGURATION which_mux OF mux IS
 
CONFIGURATION which_mux OF mux IS
   FOR with_OPERATOR END FOR;
+
   FOR Operator_only END FOR;
 
--  FOR with_WHEN END FOR;
 
--  FOR with_WHEN END FOR;
 
--  FOR with_SELECT END FOR;
 
--  FOR with_SELECT END FOR;
--  FOR with_IF END FOR;
 
 
END CONFIGURATION;
 
END CONFIGURATION;
 
</syntaxhighlight>
 
</syntaxhighlight>
:* Exemplo 5.3 ALU: modificação do opcodes:  "0011" -> a NAND b, "0100" -> "a OR b, "1111" => a * b.  É necessário mudar a ENTITY, dobrando o número de bits da saída devido a multiplicação, e adaptar o código para a nova quantidade de bits.
+
::Ver pag. 121 a 127 de <ref name="PEDRONI2010b"/>
::Ver pag. 121 a 129 de <ref name="PEDRONI2010b"/>
 
  
;Aula 16 (19 mar):
+
;Aula 14  (28 Abr):
 
*Código Concorrente.
 
*Código Concorrente.
 +
:* Uso de GENERATE
  
;Aula 17 (20 mar):
+
<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  (2 Mai):
 
*Código Concorrente.
 
*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 18 (25 mar):
+
;Aula 16 (4 Mai):
 
*Código Concorrente.
 
*Código Concorrente.
:* Implementação de circuitos arithméticos com operadores.
+
:* Implementação de circuitos aritméticos com operadores.
::'''LEMBRETE'''
+
:* 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''.
::* Para "+" ou "-": O tamanho do resultado é igual ao número de bits do maior operando.  
+
:* 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.
:::r[7..0] = a[7..0] + b[4..0]; a -> 8 bits; b -> 5 bits então r -> 8 bits.
+
:* 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 "*": O tamanho do resultado é igual a soma do número de bits dos dois operandos.
+
::* Para operações de "+" ou "-": O tamanho do resultado é igual ao tamanho do maior operando.  
:::r[12..0] = a[7..0] * b[4..0]; a -> 8 bits; b -> 5 bits então r -> 8+5 bits.
+
:::Exemplo: r[7..0] = a[7..0] + b[4..0]; a -> 8 bits; b -> 5 bits então r -> 8 bits.
::* Para "/": O tamanho do resultado é igual ao número de bits do numerador.  
+
::* Para a operações "*": O tamanho do resultado é igual a soma do tamanho dos dois operandos.
:::r[5..0] = a[5..0] * b[8..0]; a -> 6 bits; b -> 9 bits então r -> 6 bits.
+
:::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 17 (9 Mai):
 +
*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]];
  
 +
===ATUAL===
 +
 +
<!--
 
:* Aula de exercicios:  
 
:* Aula de exercicios:  
 
::5.4 - Generic Parity Generator;  
 
::5.4 - Generic Parity Generator;  
Linha 156: Linha 416:
 
::5.15/16/17/18 - (Un)signed Multiplier/Divider;  
 
::5.15/16/17/18 - (Un)signed Multiplier/Divider;  
 
::5.19 - Frequency Multiplier.
 
::5.19 - Frequency Multiplier.
 
===Unidade 5===
 
;Aula 19 (26 mar):
 
*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
 
:*Instrução '''IF'''
 
::*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).
 
::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 20 (27 mar):
 
*Código Sequencial.
 
:*Instruções do tipo '''LOOP''': LOOP incondicional, FOR-LOOP, WHILE-LOOP, NEXT, EXIT
 
::* Exemplos: Carry-Ripple Adder (FOR-LOOP) (Ex 6.4), Leading Zeros (LOOP com EXIT) (Ex 6.5)
 
:*Instrução '''CASE'''
 
::* Exemplo:  Contador de 0 a 9 segundos com saída SSD (Ex 6.6)
 
::* Exemplo:  Projeto ruim com CASE incompleto (Ex. 6.7)
 
 
:*Ver pag. 161 a 171 de <ref name="PEDRONI2010b"/>
 
 
===Unidade 6===
 
;Aula XX (8 abr):
 
*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''':
 
:* Ver pag. 201 a 205 de <ref name="PEDRONI2010b"/>
 
 
;Aula XX (9 abr):
 
*Projeto a nível de Sistema.
 
:* O '''COMPONENT''':
 
::* Criação de compomentes redimensionáveis.  GENERIC -> '''GENERIC MAP'''
 
::* Mapeamento por posição e nominal.
 
::* Métodos de declaração de '''COMPONENT'''.
 
:::*Exemplo: Registrador Circular Ex. 8.2
 
:* Ver pag. 205 a 208 de <ref name="PEDRONI2010b"/>
 
 
;Aula XX (16 abr):
 
*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 XX (17 abr):
 
*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).
 
:* O '''BLOCK'''.
 
:* A instrução '''ASSERT''' condicional e incondicional
 
:* A '''FUNCTION''': declaração, uso, mapeamento posicional x nominal, PURE x IMPURE. 
 
:* Ver pag. 213 a 226 de <ref name="PEDRONI2010b"/>)
 
:* Ver exercício proposto na AE5.
 
 
;Aula XX (22 abr):
 
*Projeto a nível de Sistema.
 
:* 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
 
:* Ver pag. 226 a 230 de <ref name="PEDRONI2010b"/>
 
 
==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  [http://200.135.233.26:3000/project Sharelatex do IFSC-CLOUD]. Utilize preferencialmente o [http://200.135.233.26:3000/project/54750cb57ae8187440d60acd  modelo de artigo no padrão ABNT].
 
 
<!--
 
*[http://wiki.sj.ifsc.edu.br/images/a/a5/Sst-intro.pdf Aula inicial]
 
*[[Introdução aos dispositivos lógicos programáveis]]
 
*[[Introdução à tecnologia FPGA ]]
 
*[[Introdução a linguagem VHDL]]
 
*[[Aritmética com vetores em VDHL]]
 
 
*[[Códigos VDHL - DLP]]
 
*[[Códigos VHDL para uso nas Aulas]]
 
*[[Códigos VHDL para uso nas Aulas 2011-1]]
 
 
-->
 
-->
  
==Atividades extra==
+
==Avaliações==
===JÁ ENCERRADAS===
+
*Avaliação A1 - Unidade 2 a 5 (30/05/2016) - Local: Lab Programação.
{{collapse top | AE1 - Estudo do tipo de programação dos FPGA (prazo 20/02/2015)}}
+
*Avaliação A2 - Unidade 6 a 8 (XX/XX/2016) - Local: Lab Programação.
*Fazer uma pesquisa sobre as formas como os PLDs são programadosFusíveis, antifusíseis, memória PROM, EPROM, EEPROM, Flash, SRAM, etc. Formar equipes de até 2 alunos e apresentar um resumo em 2 a 3 páginas A4.  
+
*Recuperação R1-2 - Unidade 2 a 6 e 8 (XX XXX 2016) - Local: Lab Programação.
{{collapse bottom}}
+
::As avaliações são com consulta a todo tipo de material impresso ou digitalO aluno tem 5 minutos para preparar o computador depois disso a rede será desconectada.
 +
::Ao final do avaliação o aluno deverá enviar para o email do professor os arquivos solicitados. </small>
 +
*Entrega dos diversos trabalhos ao longo do semestre AE1 a AE(N-1).
 +
*Projeto Final AE(N). Tem peso equivalente a duas avaliações, sendo avaliado nos quesitos: 1) Implementação do Sistema, 2) Documentação, 3) Avaliação Global do aluno no projeto.
  
{{collapse top | AE2 - Estudo do Quartus II e Dispositivos FPGA (prazo 27/02/2015)}}
+
===Atividades extra===
* Utilize no Quartus II o arquivo [[media:adders.qar | adders.qar]] para realizar os seguintes procedimentos:
+
Neste tópico serão listadas as atividades extras que os alunos da disciplina deverão realizar ao longo do curso.  É importante observar o prazo de entrega, pois os conceitos serão reduzidos conforme o atraso na entrega.
:P0 - Selecione a família de FPGA Cyclone e selecione o dispositivo EP1C3T100A8
+
Para a entrega no prazo os conceitos possíveis são (A, B, C, D). Entrega com até uma semana de atraso (B, C, D). Entrega com até duas semanas de atraso (C ou D). Entrega com mais de duas semanas de atraso (D).   
:P1 - Selecione como Top-Level Entity o arquivo '''adder_4bits.vhd''' e compile esse código [Processing > Start Compilation].
 
:*Anote o número de Elementos Lógicos (ou ALUTs) utilizados [Compilation Report > Flow Summary].  
 
:*Verifique qual é o maior tempo de propagação entre as entradas a,b e saida sum [Compilation Report > TimeQuest ... > Datasheet Report > Propagation Delay].
 
:*Verifique o código RTL gerado [Tools > Netlist Viewers > RTL Viewer]
 
:*Verifique como o circuito foi sintetizado abrindo o [Chip Planner], e após dar um zoom no Elemento lógico (ou ALUT) utilizado verifique o hardware que foi utilizado com o [Resource Property Editor]
 
:*Faça a simulação funcional utilizando o arquivo '''tb_adder_4bits.vwf''' no QSIM, e verifique se as somas estão corretas.
 
:P2 - Selecione como Top-Level Entity o arquivo '''adder_ripple_4bits.bdf''' e compile esse código [Processing > Start Compilation].
 
:* Repita os passos do procedimento P1.
 
:P3 - Troque a familia do FPGA para Stratix III e selecione o dispositivo EP3SE50F484C2 e repita os procedimento P1 e P2 acima.
 
:P4 - Análise os resultados obtidos e chegue as suas conclusões.  Escreva os resultados em um artigo resumido de 1 a 2  páginas.   
 
* Exemplos ilustrativos de utilização do elemento lógico/ALUT
 
:*Adder de 4 bits em EP1C3T100A8
 
::[[Arquivo:Adder_4bits_EP1C3T100A8.png| 800 px]]
 
  
:*Adder de 4 bits em EP3SE50F484C2
+
====PARA ENTREGAR====
::[[Arquivo:Adder_4bits_EP3SE50F484C2.png | 800 px]]
+
{{collapse top | expand=true | AE1 - Temas relacionados aos FPGAs (Prazo de entrega do Resumo (500 caracteres/ 1 pagina): 22 Abril 2016, Prazo de entrega do Relatório: 9 Maio 2016)}}
 +
* Formar equipes com 2 ou 3 alunos, e '''em conjunto''' façam uma pesquisa sobre um dos temas abaixo, relacionados aos DLPs.
 +
:'''TEMA 1''' - Arquitetura FPGAs e CPLDs da ALTERA (Maria, Helen André)
 +
:'''TEMA 2''' - Aplicações de FPGA (Katharine, Kristhine, Leticia)
 +
:'''TEMA 3''' - Aplicações em Avionic (Lucas, Gabriel, Thiago)
 +
:'''TEMA 4''' - Aplicações na Área Espacial (Fabiano, Marcos, Iago).
 +
:'''TEMA 5''' - Arquitetura FPGAs e CPLDs da XILINK (Gustavo, Tamara, Anderson).
 +
::INSPIRAÇÃO para temas:
 +
:*https://www.altera.com/products/fpga/new-to-fpgas/resource-center/overview.html
 +
:*http://www.extremetech.com/extreme/184828-intel-unveils-new-xeon-chip-with-integrated-fpga-touts-20x-performance-boost
 +
:*http://www.xilinx.com/training/fpga/fpga-field-programmable-gate-array.htm
 +
:*http://www.springer.com/cda/content/document/cda_downloaddocument/9781461435938-c2.pdf
 +
:*Architecture of FPGAs (Xilinx, Altera, Atmel, Lattice, etc). [http://www.eecg.toronto.edu/~jayar/pubs/brown/survey.pdf], [http://isl.stanford.edu/groups/elgamal/abbas_publications/J029.pdf]
  
:*Riple Adder de 4bits em EP3SE50F484C2
+
* Escrever um relatório na forma de artigo com 4 a 6 paginas A4.
::[[Arquivo:Riple_Adder_4bits_EP3SE50F484C2.png | 800 px]]
+
* Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma  [http://200.135.233.26:3000/project Sharelatex do IFSC-CLOUD]. Utilize preferencialmente o [http://200.135.233.26:3000/project/54750cb57ae8187440d60acd  modelo de artigo no padrão ABNT].
 +
* Envie o artigo em pdf para (<tt>moecke AT ifsc.edu.br</tt>), com o ASSUNTO: DLP29006 - AE1 - Temas relacionados aos FPGAs.
 +
* O artigo deve ser completo, incluindo todas as referências utilizadas.  
 +
* Dê um título coerente ao artigo. Seja criativo...
 +
* Veja alguns artigos de semestres anteriores em: [[DLP1-EngTel (página)#ARTIGOS DE SEMESTRES ANTERIORES | ARTIGOS DE SEMESTRES ANTERIORES]]
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top | AE3 Uso de operadores e tipos de dados (Prazo de entrega 23/03/2015)}}
+
{{collapse top | AE2 Operações Aritméticas Básicas em VHDL (Prazo de entrega: 2 Maio 2016)}}
*Para o exercício 4.15 escreva um código VHDL e faça a simulação temporal.
+
* Formar equipes com 2 ou 3 alunos.  
*Para o exercício 4.17 escreva um código VHDL e analise o número de elementos lógicos necessários.  Compare com os outros estudantes e analise das diferenças.
+
* Escreva um código VHDL para cada uma das operações matemáticas indicadas abaixo. Para facilitar os testes, utilize como base o seguinte código, no qual é realizada o cálculo da multiplicação de números UNSIGNED de N=4 bits:
 
 
::Para facilitar os testes e a troca de informações entre as equipes, a ENTITY deverá ter o seguinte formato:
 
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
entity bin2bcd is
+
LIBRARY ieee;
port (
+
USE ieee.numeric_std.all;
num_bin : in std_logic_vector(9 downto 0);
+
----------------------------------------
C_bcd : out std_logic_vector(3 downto 0);
+
ENTITY calcular IS
D_bcd : out std_logic_vector(3 downto 0);
+
GENERIC (N: NATURAL := 4);
U_bcd : out std_logic_vector(3 downto 0));
+
PORT (
 +
a, b: IN UNSIGNED(N-1 DOWNTO 0); -- N bits
 +
y: OUT UNSIGNED(2*N-1 DOWNTO 0));  -- 2N bits
 +
END ENTITY;
 +
----------------------------------------
 +
ARCHITECTURE arch_op OF calcular IS
 +
BEGIN
 +
y <= a * b;
 +
END ARCHITECTURE;
 +
----------------------------------------
 +
</syntaxhighlight>
 +
Outras operações matemáticas:
 +
<code>
 +
y <= a + b; -- se entrada tem N bits saída deve ter  N bits.
 +
y <= a - b; -- se entrada tem N bits saída deve ter  N bits.
 +
y <= a * b; -- se entrada tem N bits saída deve ter 2*N bits.
 +
y <= a / b; -- se entrada tem N bits saída deve ter  N bits.
 +
</syntaxhighlight>
 +
* Para as operações de soma (a+b) e de multiplicação (a*b) com entradas '''SIGNED''' de 8 bits compare o hardware necessário para implementar os circuitos utilizando as seguintes famílias de FPGA [CYCLONE & STRATIX II & MAX 3000].  Utilize sempre o menor '''Device''' de cada família, que possua os elementos e pinos suficientes para o circuito proposto.
 +
* Para as 4 operações compilar cada circuito utilizando N = 8, 16 e 32, e utilizando os sinais de entrada e saída do tipo SIGNED e depois também com o tipo UNSIGNED, utilizando a família de FPGA = CYCLONE.
 +
* Teste cada um dos circuitos e anote em uma tabela todos os resultados de: número de pinos, número de elementos lógicos/ALUT (indicando os Normais | Aritméticos), multiplicadores usados, maior atraso de propagação, e caminho crítico.
 +
::Esses dados estão disponíveis nos seguintes relatórios: ('''Fitter > Resource Section > Resource Usage'''), ('''TimeQuest Timing Analyser > Datasheet Report > Propagation Delay''')
  
end entity;
+
* Escreva um relatório técnico na forma de artigo com 4 a 6 paginas A4. O relatório além das tabelas com os dados, as figuras dos circuitos RTL com entrada de 8 bits (4 figuras), simulações funcionais com entrada de 8 bits (4 figuras) e uma análise textual dos resultados obtidos.  Os QAR dos projetos para SIGNED e para UNSIGNED também devem ser  enviados (2 arquivos).
</syntaxhighlight>
+
* Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma  [http://200.135.233.26:3000/project Sharelatex do IFSC-CLOUD]. Utilize preferencialmente o [http://200.135.233.26:3000/project/54750cb57ae8187440d60acd  modelo de artigo no padrão ABNT].
 +
* Envie o artigo em pdf para (<tt>moecke AT ifsc.edu.br</tt>), com o ASSUNTO: DLP29006 - AE2 -  Operações Aritméticas Básicas em VHDL.
 
{{collapse bottom}}
 
{{collapse bottom}}
 
+
<!--
{{collapse top | AE4 - Uso de código concorrente - ALU multiplicadora (Prazo de entrega 01/04/2015)}}
+
{{collapse top | expand = true |AE3 - Unidade Aritmética em VHDL (Prazo de entrega: 20 Maio 2016)}}
*A Unidade de Lógica e Aritmética deve ter as seguintes funções:
+
* Formar equipes com 2 ou 3 alunos.
;Unidade Lógica:
+
* Escreva um código VHDL que implemente uma unidade aritmética que realize as operações indicadas na tabela abaixo.
{| class="wikitable"  border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef"
+
{| class="wikitable"  border="1" cellpadding="3" cellspacing="0" style="text-align:right; font-size:100%" bgcolor="#efefef"
! scope="col" width=20% align="center"| Instrução
+
! scope="col" width=25% align="right"| operação
! scope="col" width=20% align="center"| Operação
+
! scope="col" width=25% align="right"| tipo dado
! scope="col" width=20% align="center"| opcode
+
! scope="col" width=25% align="right"| OPCODE
 
|-
 
|-
| Complemento de A || y = not A || 0000
+
|   +a ||       -  || 0000  
 
|-
 
|-
| Complemento de B || y = not B || 0001
+
|   -a ||   SIGNED || 0001  
 
|-
 
|-
| And || y = A and B || 0010
+
| a + 1 || UNSIGNED || 0010  
 
|-
 
|-
| Nand || y = A nand B || 0011
+
| a + 1 ||   SIGNED || 0011  
 
|-
 
|-
| Or || y = A or B || 0100
+
| a - 1 || UNSIGNED || 0100  
 
|-
 
|-
| Nor || y = A nor B || 0101
+
| a - 1 ||   SIGNED || 0101  
 
|-
 
|-
| Xor || y = A xor B || 0110
+
| a + b || UNSIGNED || 0110
 
|-
 
|-
| Xnor || y = A xnor B || 0111
+
| a + b ||   SIGNED || 0111
|}
 
 
 
;Unidade Aritmética:
 
{| class="wikitable"  border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef"
 
! scope="col" width=20% align="center"| Instrução
 
! scope="col" width=20% align="center"| Operação
 
! scope="col" width=20% align="center"| opcode
 
 
|-
 
|-
| Transfere A || y = A || 1000
+
| MSB(a * b) || UNSIGNED || 1000
 
|-
 
|-
| Transfere B || y = B || 1001
+
| MSB(a * b) ||   SIGNED || 1001
 
|-
 
|-
| Incrementa A || y = A + 1 || 1010
+
| LSB(a * b) || UNSIGNED || 1010
 
|-
 
|-
| Decrementa A || y = A - 1 || 1011
+
| LSB(a * b) ||   SIGNED || 1011
 
|-
 
|-
| Soma A e B|| y = A + B || 1100
+
| a / b || UNSIGNED || 1100
 
|-
 
|-
| Subtrai B de A|| y = A - B || 1101
+
| a / b ||   SIGNED || 1101
 
|-
 
|-
| Multiplica A e B || y = A * B || 1110
+
| a REM b || UNSIGNED || 1110
 
|-
 
|-
| Dobra o valor A || y = A * 2 || 1111
+
| a REM b ||   SIGNED || 1111
 
|}
 
|}
:* As operações aritméticas devem considerar apenas números positivos.  
+
:* O número de bits das entradas é N e da saída é N+1.
:* Indique a validade do resultado com o bit '''valid'''. Válido => '''valid''' = '1', Inválido => '''valid''' = '0'.
+
:* Para operações de soma, incremento e decremento, o bit adicional deve ser usado para evitar o ''overflow'' e ''underflow''.
* A ENTITY deverá ter a seguinte interface:
+
:* Nas operações de multiplicação utilize na saída os N+1 bits mais significativos (MSB) ou N+1 menos significativos LSB do resultado da operação.
<syntaxhighlight lang=matlab>
+
* Implemente o circuito utilizando a família de FPGA CYCLONE II. Utilize o menor '''Device''' que possua os elementos e pinos suficientes para o circuito proposto.
ENTITY alu IS
+
* Realize a simulação funcional do circuito para 4 bits de pelo menos 2 operações com tipos SIGNED e 2 UNSIGNED e confira se essas operações estão corretas.
GENERIC (N: INTEGER := 4); --word bits
+
* Para N = 4, 8, 16 e 32 anote em uma tabela todos os resultados de: número de pinos, número de elementos lógicos (indicando os Normais | Aritméticos), multiplicadores usados, maior atraso de propagação, e caminho crítico.  
PORT (
+
 
a, b: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
+
* Escreva um relatório técnico na forma de artigo com 4 a 6 paginas A4. O relatório além das tabelas com os dados, as figuras dos circuitos RTL com entrada de 8 bits (4 figuras), simulações funcionais com entrada de 8 bits (4 figuras) e uma análise textual dos resultados obtidos.  Envie o QAR do projeto.
opcode: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
+
* Envie o artigo em pdf para (<tt>moecke AT ifsc.edu.br</tt>), com o ASSUNTO: DLP29006 - AE3 - Unidade Aritmética em VHDL.
valid: out STD_LOGIC;
+
{{collapse bottom}}
y: OUT STD_LOGIC_VECTOR(2*N-1 DOWNTO 0));
+
-->
END ENTITY;
+
<!--
</syntaxhighlight>
+
{{collapse top | expand=true| AE1 - XXXX (prazo XX/XX/2016)}}
* Proponha uma ARCHITECTURE que implemente a ALU (Dica: utilize o tipo de dado tipo '''integer''').
 
* Anote o número de Elementos Lógicos (ou ALUTs) utilizados [Compilation Report > Flow Summary].
 
* Verifique qual é o maior tempo de propagação entre as entradas a,b e saida sum [Compilation Report > TimeQuest ... > Datasheet Report > Propagation Delay].
 
* Verifique o código RTL gerado [Tools > Netlist Viewers > RTL Viewer]
 
* Faça a simulação funcional e temporal no QSIM, e verifique se as operações estão corretas.
 
* Análise os resultados obtidos considerando as entradas com 4 bits e também com 8 bits.   
 
 
{{collapse bottom}}
 
{{collapse bottom}}
 +
-->
 +
 +
====ESTUDOS SEM ENTREGA DE DOCUMENTAÇÃO====
 +
Os exemplos e exercícios essenciais estão destacados em negrito na listagens abaixo.
 +
{{collapse top | EL1 - Resolução dos exercícios do Cap 2}}
 +
*Resolva os exercícios do capítulo 2 (1, 2, 3) pag. 28 a 30
 +
;Exercise 2.1: Multiplexer:
  
===ESTUDOS SEM ENTREGA DE DOCUMENTAÇÃO===
+
*Complete o código VHDL abaixo para que ele seja correspondente a um multiplexador que selecione a entrada A quando sel ="01", B quando sel ="10", coloque "0...0" na saída quando sel ="00" e mantenha a saída em alta impedância "Z...Z" quando sel="11".  
{{collapse top | Estrutura do VHDL}}
+
::*Compile o código e em seguida faça a simulação, para verificar se o circuito funciona conforme
* Faça o exercício 2.1 <ref name="PEDRONI2010b"/>, completando o código VHDL. Idente o código. Procure entender o código inserindo comentários onde julgar importanteDepois de tudo realizado compile e simule o código. Procure obter '''zero''' erros na primeira complilação.
+
especificado.   
 +
::*Anote as mensagens de warning do compilador.
 +
 
 +
<syntaxhighlight lang=vhdl>
 +
---------------------------------------
 +
-- File: mux.vdh
 +
---------------------------------------
 +
-- Declaração das Bibliotecas e Pacotes
 +
--
 +
LIBRARY ieee;
 +
USE _________________________ ;
  
<code>
+
---------------------------------------
----------------------------------------------------
+
-- Especificação das entradas e saídas e nome da ENTITY
LIBRARY ieee;
+
ENTITY mux IS
USE _________________________;
+
  PORT (  
----------------------------------------------------
+
  __ , __ : ___ STD_LOGIC_VECTOR (7 DOWNTO 0);
ENTITY mux IS
+
  sel : IN ____________________________ ;
PORT (___, ___: ___ STD_LOGIC_VECTOR(7 DOWNTO 0);
+
  ___ : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
sel: IN ____________________________;
+
END _____ ;
___: OUT STD_LOGIC_VECTOR(__ DOWNTO 0));
+
---------------------------------------
END _____;
+
ARCHITECTURE example OF _____ IS
----------------------------------------------------
+
BEGIN
ARCHITECTURE example OF _____ IS
+
  PROCESS (a, b, ____ )
BEGIN
+
  BEGIN
PROCESS (a, b, ____)
+
    IF (sel = "00") THEN
BEGIN
+
      c <= "00000000";
IF (sel="00") THEN
+
    ELSIF (__________) THEN
x <= "00000000";
+
      c <= a;
ELSIF (__________) THEN
+
    _____ (sel = "10") THEN
x <= a;
+
      c <= __;
_____ (sel="10") THEN
+
    ELSE
x <= __;
+
      c <= (OTHERS => '__');
ELSE
+
    END ___ ;
x <= "___________";
+
  END _________ ;
END ___;
+
END _________ ;
END __________;
+
---------------------------------------
END __________;
 
----------------------------------------------------
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top | Estudo dos atributos em VDHL}}
+
{{collapse top | EL2 - 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
 +
{{collapse bottom}}
 +
 
 +
{{collapse top | EL3 -  Conversor de Binário para BCD}}
 +
*Considere um número decimal entre 0000 e 9999.  Usando operadores predefinidos, obtenha na saída os digitos decimais separados. 
 +
:*Escreva o código VHDL e analise o número de elementos lógicos necessários. 
 +
:*Faça a simulação funcional do circuito.
 +
<center> [[Arquivo:tb_bin2bcd.jpg]]<br> '''Fig. 20 - Simulação da conversão de binário para BCD''' </center>
 +
:*Compare sua implementação com os outros estudantes e analise as diferenças, observe o código RTL, o número de elementos lógicos e também o tempo de propagação.
 +
::Para separar os dígitos decimais do número de entrada pense nos operadores de "+", "-", "*", "/", "REM" e "MOD".
 +
::Para facilitar os testes e a troca de informações entre as equipes, a ENTITY deverá ter o seguinte formato:
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
entity atributte_test_array is
+
entity bin2bcd is
port(
+
port (
x1, x2, x3, x4, x5, x6: out integer range 0 to 15;
+
X_bin         : in std_logic_vector(13 downto 0);  --  0000 a 9999
x7, x8: out boolean;
+
M_bcd : out std_logic_vector(3 downto 0); --  Milhar
m12, m44, m47: out bit);
+
C_bcd : out std_logic_vector(3 downto 0); --  Centena
 +
D_bcd : out std_logic_vector(3 downto 0); --  Dezena
 +
U_bcd : out std_logic_vector(3 downto 0)); --  Unidade
 +
 
 
end entity;
 
end entity;
  
architecture ifsc of atributte_test_array is
+
architecture example of bin2bcd is
TYPE matrix IS ARRAY (1 TO 4, 7 DOWNTO 0) OF BIT;
+
--declaração de sinais auxiliares
SIGNAL test: matrix := (('0', '1', '1', '0', '0', '1', '1', '0'), "01110100", ('1', others => '0'), (4 => '0', others => '1'));
+
 
 
begin
 
begin
--------------------------------------------------------------------------
+
--descrição do hardware
x1 <= matrix'LEFT(1); --result=1 (type of x1 must be INTEGER or eq.)
+
 
x2 <= matrix'LEFT(2); --result=7 (type of x2 must be INTEGER or eq.)
 
x3 <= matrix'RIGHT(1); --result=4 (type of x3 must be INTEGER or eq.)
 
x4 <= matrix'RIGHT(2); --result=0 (type of x4 must be INTEGER or eq.)
 
x5 <= matrix'LENGTH(1); --result=4 (type of x5 must be INTEGER or eq.)
 
x6 <= matrix'LENGTH(2); --result=8 (type of x6 must be INTEGER or eq.)
 
x7 <= matrix'ASCENDING(1); --result=TRUE (type of x7 must be BOOLEAN)
 
x8 <= matrix'ASCENDING(2); --result=FALSE (type of x8 must be BOOLEAN)
 
m12 <= test(1,2); -- result = '1' - Acess the element of 'test' row(1), columm(2) (type of  m11 must be bit)
 
m47 <= test(4,7); -- result = '1' - Acess the element of 'test'  row(7), columm(7) (type of  m11 must be bit)
 
m44 <= test(4,4); -- result = '0' - Acess the element of 'test'  row(4), columm(4)  (type of  m11 must be bit)
 
--------------------------------------------------------------------------
 
 
end architecture;
 
end architecture;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
:: Note que com ''X_bin'' 14 bits é possível representar números sem sinal entre ''0'' e <math> 2^{14}-1 </math>.  No entanto, os testes devem ser limitados a números entre 0000 e 9990, pois não há especificação para valores maiores que 9999.
 +
:: Existe um algoritmo [https://en.wikipedia.org/wiki/Double_dabble Double Dabble] que possibilita fazer essa conversão com menos hardware.
 +
::Dica para converter de INTEGER para STD_LOGIC_VECTOR de 4 bits.
 +
M_bcd <= std_logic_vector(to_unsigned(M,4));
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top | Resolução dos exercícios do Cap 3}}
+
{{collapse top | EL4 - Resolução dos exercícios do Cap 4}}
*Resolva os exercícios da capítulo 3 (1, 2, 9, 11-13, 18-20, 23-30) pag. 81 a 89
+
*Resolva os exercícios do capítulo 4 (4-8, '''9''', 10-11, 13, 15-16, '''17''' ) pag. 115 a 120
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top | Resolução dos exercícios do Cap 4}}
+
{{collapse top | EL5 - Resolução dos exercícios do Cap 5}}
*Resolva os exercícios da capítulo 4 (4-11, 13, 15-17 ) pag. 115 a 120
+
*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
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top | Resolução dos exercícios do Cap 5}}
+
====ARTIGOS ENTREGUES====
*Resolva os exercícios da capítulo 5 (1, 3, 4, 6-11, 14-19) pag. 144 a 150
+
;2015-2:
{{collapse bottom}}
+
*[[Media:DLP29006-AE1-Tema1-2015-2.pdf | DLPs: passado, presente e futuro]] (Walter Cardoso de Freitas Júnior, Gustavo Vieira Zacchi, Giulio Oliveira)
 +
*[[Media:DLP29006-AE1-Tema2-2015-2.pdf | Transitores CMOS, história e tecnologia]] (Fernando Müller da Silva, Gustavo Paulo Medeiros da Silva)
 +
*[[Media:DLP29006-AE1-Tema3-2015-2.pdf | Linguagens de Descrição de Hardware: Tipos e Características]] (João Vitor Rodrigues, Marcus Vinicius Bunn)
 +
*[[Media:DLP29006-AE1-Tema4-2015-2.pdf | Fabricantes e ferramentas para programação de DLPs]] (Ronaldo João Borges, Roicenir Girardi Rostirolla)
 +
*[[Media:DLP29006-AE1-Tema5-2015-2.pdf | Interface JTAG]] (Stephany Padilha Guimarães, Lucas Gomes de Farias, Vinicius Bandeira)
 +
 
 +
;2015-1:
 +
*[[Media:Formas como PLDs são Programados.pdf | Formas como PLDs são Programados]]
 +
*[[Media:EPROM - EEPROM Dispositivos Lógicos Programáveis.pdf | EPROM - EEPROM Dispositivos Lógicos Programáveis]]
 +
*[[Media:Aplicações de antifusíveis e PROMs na programação de PDLs.pdf | Aplicações de antifusíveis e PROMs na programação de PDLs]]
 +
 
 +
==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.
  
{{collapse top | expand=1 |Projetar Conversor de binário para 7 segmentos}}
+
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)]].
Projetar em VHDL dois conversores de binário para 7 segmentos a) usando código concorrente (SELECT) e b) usando código sequencial (CASE).
 
:*Considerar a saída do conversor com lógica positiva (ativo = '1').
 
:*Simular o circuito com valores de entrada entre 0 = "0000" até 15 = "1111". Para entradas de 0-9 devem ser mostrados os valores decimais no display. Para entradas de 10 a 14 é indiferente o valor a ser mostrado. Para o valor 15 deve ser ativado apenas o segmento g
 
:*Conferir se as saídas estão corretas para cada uma das entrada. Dica: leia [[Display de 7 segmentos]].
 
<syntaxhighlight lang=vhdl>
 
ENTITY ssd IS
 
  PORT (
 
    bin: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
 
    ssd: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
 
        );
 
END ENTITY;
 
</syntaxhighlight>
 
{{collapse bottom}}
 
  
===PARA ENTREGAR===
+
===Sharelatex===
{{collapse top | expand = 1 | AE5 - Circuitos  Genéricos com código estrutural (Prazo de entrega 04/05/2015)}}
+
Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a plataforma  [http://200.135.233.32 Sharelatex do IFSC-CLOUD]. Utilize preferencialmente o [http://200.135.233.26:3000/project/54750cb57ae8187440d60acd  modelo de artigo no padrão ABNT].
* Projete os três circuitos a seguir, utilizando: i) código estrutural; ii) componentes genéricos conforme indicado:
+
   
:# Somador do tipo carry-ripple de N bits (componente: '''Full Adder''').
+
<!--
:# Contador Assíncrono de módulo <math>2^N</math> (componente: '''Divisor por 2''').
+
*[http://wiki.sj.ifsc.edu.br/images/a/a5/Sst-intro.pdf Aula inicial]
:# Contador Síncronos de módulo <math>2^N</math> (componente: '''Módulo mostrado na figura 8.9''' de <ref name="PEDRONI2010b"/>).
+
*[[Introdução aos dispositivos lógicos programáveis]]
* Teste cada componente separadamente e utilize-o para criar os circuito acima.
+
*[[Introdução à tecnologia FPGA ]]
* Implemente cada circuito acima utilizando 3 bits e também 32 bits.
+
*[[Introdução a linguagem VHDL]]
* Verifique o código RTL gerado [Tools > Netlist Viewers > RTL Viewer].
+
*[[Aritmética com vetores em VDHL]]
* Anote o número de Elementos Lógicos (ou ALUTs) utilizados [Compilation Report > Flow Summary].  
 
* Verifique qual é o maior tempo de propagação entre as entradas de cada circuito e as saídas  [Compilation Report > TimeQuest ... > Datasheet Report > Propagation Delay].
 
* Faça a simulação funcional e temporal no QSIM, e verifique se os circuitos estão funcionando corretamente.
 
* Análise os resultados obtidos.
 
* De um título coerente ao artigo e faça um resumo e introdução que esteja relacionado aos resultados que você deseja analisar.
 
* Escreva um relatório na forma de artigo, utilizando preferencialmente o [http://200.135.233.26:3000/project/54750cb57ae8187440d60acd  modelo de artigo no padrão ABNT], disponível no ShareLaTeX do IFSC-CLOUD.
 
* Faça um resumo e introdução que esteja relacionado aos resultados que você deseja analisar.
 
* De um título coerente ao artigo. Seja criativo...
 
* Imagens muito grandes deverão ser acrescidas ao artigo na forma de apêndice (preferencialmente use a wiki com um hiperlink no artigo).
 
  
{{collapse bottom}}
+
*[[Códigos VDHL - DLP]]
 +
*[[Códigos VHDL para uso nas Aulas]]
 +
*[[Códigos VHDL para uso nas Aulas 2011-1]]
 +
-->
  
 
==Links auxiliares==
 
==Links auxiliares==
 
*[[Aritmética com vetores em VDHL]]
 
*[[Aritmética com vetores em VDHL]]
 
*[[Preparando para gravar o circuito lógico no FPGA]]
 
*[[Preparando para gravar o circuito lógico no FPGA]]
 +
*[[Dicas de como eliminar o repique das chaves mecânicas]]
 +
*[ftp://ftp.altera.com/up/pub/Altera_Material/13.1/Tutorials/VHDL/ Materiais da ALTERA para Quartus II 13.1]
 +
*[[Modelo para uso em relatórios]]
 +
*[[Configuração e uso do Time Quest Analyser]]
 +
*[[Configuração e uso do Signal Tap]]
 +
*[[DLP29006-Engtelecom(2015-1) - Prof. Marcos Moecke]]
 +
*[[DLP29006-Engtelecom(2015-2) - Prof. Marcos Moecke]]
  
 
==Livros/Resumos sobre VHDL==
 
==Livros/Resumos sobre VHDL==
 +
*[[Regras de codificação em VHDL]]
 
*[[Media:VHDL_Handbook-Hardi.pdf | VHDL Handbook]] - Hardi (apenas VHDL’87 e VHDL’93)
 
*[[Media:VHDL_Handbook-Hardi.pdf | VHDL Handbook]] - Hardi (apenas VHDL’87 e VHDL’93)
 +
*[http://www.synthworks.com/papers/vhdl_math_tricks_mapld_2003.pdf VHDL Math Tricks of the Trade] by Jim Lewis
 
*[[Media:VHDL_QRC-Qualis.pdf | VHDL QUICK REFERENCE CARD]] - Qualis (r2.1)
 
*[[Media:VHDL_QRC-Qualis.pdf | VHDL QUICK REFERENCE CARD]] - Qualis (r2.1)
 
*[[Media:VHDL1164_QRC-Qualis.pdf | VHDL 1164 PACKAGES QUICK REFERENCE CARD]] - Qualis (r2.2)
 
*[[Media:VHDL1164_QRC-Qualis.pdf | VHDL 1164 PACKAGES QUICK REFERENCE CARD]] - Qualis (r2.2)
Linha 487: Linha 694:
 
*[http://www.cs.umbc.edu/portal/help/VHDL/reserved.html Palavras reservadas]
 
*[http://www.cs.umbc.edu/portal/help/VHDL/reserved.html Palavras reservadas]
 
*[http://www.csee.umbc.edu/portal/help/VHDL/attribute.html Atributos predefinidos]
 
*[http://www.csee.umbc.edu/portal/help/VHDL/attribute.html Atributos predefinidos]
 +
*[https://blog.ufes.br/sistemasembarcados/files/2015/03/aritmetica-em-vhdl.pdf Aritmética em VHDL]
 +
 +
==Packages não padronizados==
 +
*[[Std logic arith.vhd]] by Synopsys
 +
*[http://eda.org/rassp/vhdl/models/standards/std_logic_arith.vhd std_logic_arith.vhd] by Synopsys
 +
*[http://www.pldworld.com/_hdl/1/VHDL_courses/cse518/std_logic_arith_header.vhdl std_logic_arith.vhd] by Mentor Graphics
 +
*[http://www.csee.umbc.edu/portal/help/VHDL/packages/cpureieee/std_logic_arith.vhd std_logic_arith.vhd] by Vinaya
 +
 +
*[[Std logic unsigned.vdh]] by Synopsys
 +
*[http://eda.org/rassp/vhdl/models/standards/std_logic_unsigned.vhd std_logic_unsigned.vhd] by Synopsys
 +
 +
==Simulador Modelsim==
 +
*[http://model.com/content/modelsim-pe-simulation-and-debug Site Mentor Graphics] - Software Version 10.0
 +
*[http://vk.drlnet.dyndns.org/help/modelsim/infohubs/basic.htm ModelSim InfoHub] - Software Version v10.2c
 +
:*[http://www.mentor.com/products/fv/multimedia/overview/modelsim-demo-overview-34d471dc-cb74-400b-be98-5a81213cf45a ModelSim Quick Video Demo] - precisa fazer login na Mentor Graphics.
 +
:*[[Media:modelsim_tut.pdf |ModelSim® Tutorial]] -v10.0d
 +
:*[[Media:modelsim_pe_ref.pdf |ModelSim® Reference Manual]] -v10.0d
 +
:*[[Media:modelsim_pe_user.pdf |ModelSim® User’s Manual]] -v10.0d
 +
:*[[Media:m_qk_guide.pdf |ModelSim® Quick Guide]] -v10.0d
 +
:*[[Media:modelsim_se_gui_refv10_2c.pdf |ModelSim® SE GUI Reference Manual]] -v10.2c
  
 
==Fabricantes de DLPs==
 
==Fabricantes de DLPs==
Linha 495: Linha 722:
 
*[http://www.atmel.com/products/other/spld-cpld/default.aspx Atmel]
 
*[http://www.atmel.com/products/other/spld-cpld/default.aspx Atmel]
 
*[http://www.achronix.com/products/speedster22ihd.html Achronix]
 
*[http://www.achronix.com/products/speedster22ihd.html Achronix]
*[http://www.tabula.com/index.php Tabula]
+
*[https://en.wikipedia.org/wiki/Tabula_%28company%29 Tabula], [https://www.quora.com/Who-killed-the-FPGA-startup-Tabula-semiconductor Who killed the FPGA startup Tabula semiconductor?]
 
*[http://sourcetech411.com/2013/04/top-fpga-companies-for-2013/ Market share 2013]
 
*[http://sourcetech411.com/2013/04/top-fpga-companies-for-2013/ Market share 2013]
 +
*[http://marketrealist.com/2015/06/intel-keen-alteras-fpga-technology/ INTEL]
 +
 +
==Fabricantes de kits com DLPS==
 +
*[http://www.macnicadhw.com.br/products/mercurion-4-devkit-board MACNICA]
 +
*[http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=163#Category165 TERASIC]
  
 
<!--
 
<!--
Linha 537: Linha 769:
 
==Padrões IEEE para o VDHL==
 
==Padrões IEEE para o VDHL==
 
Os padrões IEEE [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/xpl/standards.jsp?item=0%20-%2099&sortType=standard_newest&pageNumber=1]estão disponíveis para consulta se você estiver na rede do IFSC. Para a linguagem VHDL consulte os padrões: [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/search/searchresult.jsp?action=search&sortType=&rowsPerPage=&searchField=Search_All&matchBoolean=true&queryText=(%22Standard%20Number%22:1164) 1164],[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/search/searchresult.jsp?action=search&sortType=&rowsPerPage=&searchField=Search_All&matchBoolean=true&queryText=(%22Standard%20Number%22:1076)&refinements=4294967269 1076]
 
Os padrões IEEE [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/xpl/standards.jsp?item=0%20-%2099&sortType=standard_newest&pageNumber=1]estão disponíveis para consulta se você estiver na rede do IFSC. Para a linguagem VHDL consulte os padrões: [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/search/searchresult.jsp?action=search&sortType=&rowsPerPage=&searchField=Search_All&matchBoolean=true&queryText=(%22Standard%20Number%22:1164) 1164],[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/search/searchresult.jsp?action=search&sortType=&rowsPerPage=&searchField=Search_All&matchBoolean=true&queryText=(%22Standard%20Number%22:1076)&refinements=4294967269 1076]
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=257627 IEEE Standard Multivalue Logic System for VHDL Model Interoperability (Std_logic_1164)]
+
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/xpl/articleDetails.jsp?arnumber=257627&newsearch=true&queryText=IEEE%20Standard%20Multivalue%20Logic%20System%20for%20VHDL%20Model%20Interoperability%20.LB.Std_logic_1164.RB. IEEE Standard Multivalue Logic System for VHDL Model Interoperability (Std_logic_1164)]
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=1405848 IEEE Std 1076.1: Behavioural languages – Part 1-1: VHDL language reference manual] [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5981354 REDLINE]
+
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/xpl/articleDetails.jsp?arnumber=5967868&newsearch=true&queryText=IEEE%20Std%201076.1:%20Behavioural%20languages%20%E2%80%93%20Part%201-1:%20VHDL%20language%20reference%20manual IEEE Std 1076.1: Behavioural languages – Part 1-1: VHDL language reference manual]  
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5464492 IEEE Std 1076.1: Behavioural languages – Part 6: VHDL Analog and Mixed-Signal Extensions]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5464492 IEEE Std 1076.1: Behavioural languages – Part 6: VHDL Analog and Mixed-Signal Extensions]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5752649 IEEE Std 1076.1.1™-2011 - IEEE Standard for VHDL Analog and Mixed-Signal Extensions—Packages for Multiple Energy Domain Support], [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5953447 REDLINE]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5752649 IEEE Std 1076.1.1™-2011 - IEEE Standard for VHDL Analog and Mixed-Signal Extensions—Packages for Multiple Energy Domain Support], [http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=5953447 REDLINE]
Linha 546: Linha 778:
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=1003477 IEEE Std 1076-2002: IEEE Standard VHDL Language Reference Manual]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=1003477 IEEE Std 1076-2002: IEEE Standard VHDL Language Reference Manual]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=556551  IEEE Std 1076.2-1996:  IEEE Standard VHDL Mathematical Packages]
 
*[http://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=556551  IEEE Std 1076.2-1996:  IEEE Standard VHDL Mathematical Packages]
 +
===Packages da IEEE===
 +
*[[Std logic 1164.vhd]]
 +
*[[Numeric std.vhd]]
  
 
==Referências Bibliográficas:==
 
==Referências Bibliográficas:==

Edição das 13h54min de 11 de maio de 2016

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


Registro on-line das aulas

Unidade 1

Aula 1 (23 Mar)
  1. Dispositivos lógicos programáveis.
  2. Bases da linguagem VHDL.
  3. Tipos de dados, libraries, conversão de tipos, operadores, atributos.
  4. Código VHDL concorrente e sequencial.
  5. Projeto hierárquico.
  6. Simulação e Testbench
  7. Maquina de estado finita (FSM).
  8. Projeto Final de circuitos lógicos.
  9. Avaliações.
  • Introdução aos dispositivos lógicos programáveis:
  • Conceito, tipos de PLDs
  • SPLD: PAL, PLA e GAL
  • CPLDs
Ver pag. 413 a 422 de [1]
Ver pag. 495 a 499 de [2]
Aula 2 (28 Mar)
  • Introdução aos dispositivos lógicos programáveis:
  • Arquitetura de FPGAs (Xilinx e Altera): CLB, LAB, RAM, DSP, Clock, PLL, I/O
  • Fabricantes de DLPs
  • Vizualização no Chip Planner de um projeto. (importante todos alunos terem acesso a IFSC-CLOUD
Ver pag. 419 a 431 de [1]
Ver pag. 499 a 501 de [2]
Ver pag. 418 a 429 de [1]

Unidade 2

Aula 3 e 4 (30-31 Mar) - Introdução ao VHDL e ambienta EDA - QUARTUS
  • Exemplo de programação de um full adder.
Utilize os arquivos full_adder.qar
  • Estrutura do código VHDL
  • Libraries, Entity, Architecture
  • Exemplo 2.2 (VHDL) - programação de um flip-flop
 LIBRARY ieee;
 USE ieee.std_logic_1164.all;

 ENTITY flip_flop IS
  PORT (d, clk, rst: IN STD_LOGIC;
   q: OUT STD_LOGIC);
 END;

 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;
RTL Ex2 2 Pedronib.png
Figura 1 - Código RTL do Exemplo 2.2
  • 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)
TM Ex2 2 Pedronib.png
Figura 2 - Technology Map do Exemplo 2.2
ChipPlanner Ex2 2 Pedronib.png
Figura 3 - Chip Planner do Exemplo 2.2


  • 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
 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;
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.
RTL Ex2 3 Pedronib.png
Figura 4 - Código RTL do Exemplo 2.3
Para conhecer melhor o ambiente do simulador QSIM veja Arquivo:Quartus II Simulation.pdf da ALTERA.
Ver pag. 3 a 24 de [2]
Aula 5 (4 Abr)
  • Introdução ao VHDL.
  • Exemplo de decodificador de endereço genérico
ENTITY address_decoder IS
	GENERIC (N: NATURAL := 2);
	PORT (
		address: IN NATURAL RANGE 0 TO 2**N-1;
		ena: BIT;
		word_line: OUT BIT_VECTOR(2**N-1 DOWNTO 0));
END ENTITY;
 
ARCHITECTURE ad_arch1 OF address_decoder IS
BEGIN
	gen: 	FOR i IN address'RANGE GENERATE
				word_line(i) <= '1' WHEN ena='0' ELSE
							 '0' WHEN i=address ELSE
							 '1';
			END GENERATE;
END ARCHITECTURE;

ARCHITECTURE ad_arch2 OF address_decoder IS
	signal word_tmp: BIT_VECTOR(2**N-1 DOWNTO 0);
BEGIN
	word_line <= (others => '1') WHEN ena='0' ELSE word_tmp;
	gen: 	FOR i IN address'RANGE GENERATE
				word_tmp(i) <= '0' WHEN i=address ELSE '1';
			END GENERATE;
END ARCHITECTURE;

CONFIGURATION ad_conf OF address_decoder is
	FOR ad_arch1 END FOR;
END CONFIGURATION;
  • Utilize Family = Cyclone e Device = EP1C4F400C6
  • Observe que o uso de um valor GENERIC permite criar diferentes tamanhos de hardware de forma muito simples.
  • Usando N = 2, verifique o RTL e o TECHNOLOGY MAP obtido para as duas ARCHITECTURES {ad_arch1, ad_arch2}. A função do CONFIGURATION é definir qual das ARCHITECTURE será associada a ENTITY.
RTL Ex2 4 Pedronib.png
Figura 5 - Código RTL do Exemplo 2.4 (N=2)
TM Ex2 4 Pedronib.png
Figura 6 - Technology Map do Exemplo 2.4 (N=2)
  • Comente a linha (word_line <= (others => '1') WHEN ena='0' ELSE word_tmp;) e veja o RTL obtido.
  • Verifique o RTL gerado para os casos de N = 2, 3, 4, 8. Perceba que o número de pinos necessário cresce exponencialmente com N. Use o [Processing > Compilation Report] e anote o número de pinos usados, o número de elementos lógicos e o tempo de propagação do caminho crítico (TimeQuest Timing Analyser > Datasheet Report > Propagation Delay).
  • Restrinja o tempo de propagação entre entrada(s) e saída(s). Para isso é necessário acrescentar ao projeto um arquivo .sdc (Synopsys Design Constraints File). No exemplo abaixo é inserida um restrição de máximo atraso (set_max_delay) entre todas as portas de entradas para todas as portas de saída de 15 ns. Para inserir esta restrição crie um arquivo sdc1.sdc com o seguinte conteúdo:
set_max_delay -from [get_ports *] -to [get_ports *]  15
Experimente restringir o tempo máximo atraso em 11ns, 8ns, 6ns e observe o resultado da compilação. Observe o Chip Planner e também o tempo de propagação.
Ver pag. 22 a 30 de [2]

Unidade 3

Aula 6 (6 Abr)
  • Tipos de Dados em VHDL.
  • Objetos de VHDL: CONSTANT, SIGNAL, VARIABLE, FILE.
  • Palavra chave OTHERS
  • Bibliotecas padrão.
  • ATENÇÃO!!! Não use as bibliotecas que não são padrão (std_logic_arith, std_logic_unsigned, std_logic_signed)
Ver pag. 31 a 39 de [2]
Aula 7 (11 Abr)
  • Tipos de Dados em VHDL.
  • 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 [2]
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 [2]
Aula 9 (14 Abr)
  • Qualificação de tipos, conversão de tipos (automática, casting e funções de conversão).
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;
  • Exercício:
  • Implementar em VHDL um circuito que efetue a operação , utilizando portas do tipo INTEGER para valores de entrada e com sinal e ocupando 4 bits, utilize na saída 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 , e . Note que para valores maiores de entrada e pode ocorrer overflow devido a limitação do número de bits da saída.
Ver pag. 73 a 78 de [2]
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 [1]
  • chip_pin [2]
Ver pag. 91 a 108 de [2]
Aula 12 (25 Abr)
  • Atributos em VHDL.
  • Atributos de síntese:
  • 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 [4]
  • noprune.
  • Exemplo 4.5: Preserve and noprune attributes
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;

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.

Sem Attribute
Fig 12. Technology Map do Circuito sem Attribute
Preserve (or Keep) Attribute
Fig 13. Technology Map do Circuito com Attribute Preserve (or Keep)
Noprune Attribute
Fig 14. Technology Map do Circuito com Attribute Noprune


  • Group
  • Alias
  • Exemplo de uso no pacote numeric_std.vhd
  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;
  • Exercício 4.17: Discussão de possibilidades de implementação
Ver pag. 108 a 119, 140 a 142 de [2]
  • Tempo livre para implementar/testar o [EL3 - Conversor de Binário para BCD].

Unidade 4

Aula 13 (27 Abr)
  • 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)
 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;
  • Para selecionar uma entre várias arquiteturas para a mesma ENTITY use a CONFIGURATION.
CONFIGURATION which_mux OF mux IS
   FOR Operator_only END FOR;
--   FOR with_WHEN END FOR;
--   FOR with_SELECT END FOR;
END CONFIGURATION;
Ver pag. 121 a 127 de [2]
Aula 14 (28 Abr)
  • Código Concorrente.
  • Uso de GENERATE

label: FOR identificador IN faixa GENERATE

  [Parte_Declarativa

BEGIN]

  Instruções_concorrentes
  ...

END GENERATE [label]; </syntaxhighlight>

Exemplo 5.4 - Decodificador genérico de endereços.
Exemplo 5.5 - Instanciação de COMPONENTE com GENERATE.
Ver pag. 127 a 134 de [2]
Aula 15 (2 Mai)
  • 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 (4 Mai)
  • 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 bits. Para tipos UNSIGNED a faixa é de até , enquanto que para SIGNED a faixa é de até . 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 17 (9 Mai)
  • 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;
Bin2Gray
Fig 16. código RTL do conversor binário para Gray
Ex2 - Conversor de Gray para Binário genérico;
Gray2Bin
Fig 17. código RTL do conversor Gray para binário
Ex3 - Utilizando os dois circuitos anteriores e um incrementador binário escreva um código VHDL que implemente um incrementador Gray;
Inc_Gray
Fig 18. código RTL do incrementador de código Gray
Inc_Gray
Fig 19. Simulação Funcional do incrementador de código Gray
Ver também Código Gray;

ATUAL

Avaliações

  • Avaliação A1 - Unidade 2 a 5 (30/05/2016) - Local: Lab Programação.
  • Avaliação A2 - Unidade 6 a 8 (XX/XX/2016) - Local: Lab Programação.
  • Recuperação R1-2 - Unidade 2 a 6 e 8 (XX XXX 2016) - Local: Lab Programação.
As avaliações são com consulta a todo tipo de material impresso ou digital. O aluno tem 5 minutos para preparar o computador depois disso a rede será desconectada.
Ao final do avaliação o aluno deverá enviar para o email do professor os arquivos solicitados.
  • Entrega dos diversos trabalhos ao longo do semestre AE1 a AE(N-1).
  • Projeto Final AE(N). Tem peso equivalente a duas avaliações, sendo avaliado nos quesitos: 1) Implementação do Sistema, 2) Documentação, 3) Avaliação Global do aluno no projeto.

Atividades extra

Neste tópico serão listadas as atividades extras que os alunos da disciplina deverão realizar ao longo do curso. É importante observar o prazo de entrega, pois os conceitos serão reduzidos conforme o atraso na entrega. Para a entrega no prazo os conceitos possíveis são (A, B, C, D). Entrega com até uma semana de atraso (B, C, D). Entrega com até duas semanas de atraso (C ou D). Entrega com mais de duas semanas de atraso (D).

PARA ENTREGAR

AE1 - Temas relacionados aos FPGAs (Prazo de entrega do Resumo (500 caracteres/ 1 pagina): 22 Abril 2016, Prazo de entrega do Relatório: 9 Maio 2016)
  • Formar equipes com 2 ou 3 alunos, e em conjunto façam uma pesquisa sobre um dos temas abaixo, relacionados aos DLPs.
TEMA 1 - Arquitetura FPGAs e CPLDs da ALTERA (Maria, Helen André)
TEMA 2 - Aplicações de FPGA (Katharine, Kristhine, Leticia)
TEMA 3 - Aplicações em Avionic (Lucas, Gabriel, Thiago)
TEMA 4 - Aplicações na Área Espacial (Fabiano, Marcos, Iago).
TEMA 5 - Arquitetura FPGAs e CPLDs da XILINK (Gustavo, Tamara, Anderson).
INSPIRAÇÃO para temas:
  • Escrever um relatório na forma de artigo com 4 a 6 paginas A4.
  • 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 - AE1 - Temas relacionados aos FPGAs.
  • O artigo deve ser completo, incluindo todas as referências utilizadas.
  • Dê um título coerente ao artigo. Seja criativo...
  • Veja alguns artigos de semestres anteriores em: ARTIGOS DE SEMESTRES ANTERIORES
AE2 - Operações Aritméticas Básicas em VHDL (Prazo de entrega: 2 Maio 2016)
  • Formar equipes com 2 ou 3 alunos.
  • Escreva um código VHDL para cada uma das operações matemáticas indicadas abaixo. Para facilitar os testes, utilize como base o seguinte código, no qual é realizada o cálculo da multiplicação de números UNSIGNED de N=4 bits:
LIBRARY ieee;
USE ieee.numeric_std.all;
----------------------------------------
ENTITY calcular IS
GENERIC (N: NATURAL := 4);
PORT (
	a, b: IN UNSIGNED(N-1 DOWNTO 0);  -- N bits
	y: OUT UNSIGNED(2*N-1 DOWNTO 0));  -- 2N bits
END ENTITY;
----------------------------------------
ARCHITECTURE arch_op OF calcular IS
BEGIN
	y <= a * b;
END ARCHITECTURE;
----------------------------------------

Outras operações matemáticas: y <= a + b; -- se entrada tem N bits saída deve ter N bits. y <= a - b; -- se entrada tem N bits saída deve ter N bits. y <= a * b; -- se entrada tem N bits saída deve ter 2*N bits. y <= a / b; -- se entrada tem N bits saída deve ter N bits. </syntaxhighlight>

  • Para as operações de soma (a+b) e de multiplicação (a*b) com entradas SIGNED de 8 bits compare o hardware necessário para implementar os circuitos utilizando as seguintes famílias de FPGA [CYCLONE & STRATIX II & MAX 3000]. Utilize sempre o menor Device de cada família, que possua os elementos e pinos suficientes para o circuito proposto.
  • Para as 4 operações compilar cada circuito utilizando N = 8, 16 e 32, e utilizando os sinais de entrada e saída do tipo SIGNED e depois também com o tipo UNSIGNED, utilizando a família de FPGA = CYCLONE.
  • Teste cada um dos circuitos e anote em uma tabela todos os resultados de: número de pinos, número de elementos lógicos/ALUT (indicando os Normais | Aritméticos), multiplicadores usados, maior atraso de propagação, e caminho crítico.
Esses dados estão disponíveis nos seguintes relatórios: (Fitter > Resource Section > Resource Usage), (TimeQuest Timing Analyser > Datasheet Report > Propagation Delay)
  • Escreva um relatório técnico na forma de artigo com 4 a 6 paginas A4. O relatório além das tabelas com os dados, as figuras dos circuitos RTL com entrada de 8 bits (4 figuras), simulações funcionais com entrada de 8 bits (4 figuras) e uma análise textual dos resultados obtidos. Os QAR dos projetos para SIGNED e para UNSIGNED também devem ser enviados (2 arquivos).
  • 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 - AE2 - Operações Aritméticas Básicas em VHDL.

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 2
  • Resolva os exercícios do capítulo 2 (1, 2, 3) pag. 28 a 30
Exercise 2.1
Multiplexer:
  • Complete o código VHDL abaixo para que ele seja correspondente a um multiplexador que selecione a entrada A quando sel ="01", B quando sel ="10", coloque "0...0" na saída quando sel ="00" e mantenha a saída em alta impedância "Z...Z" quando sel="11".
  • Compile o código e em seguida faça a simulação, para verificar se o circuito funciona conforme

especificado.

  • Anote as mensagens de warning do compilador.
---------------------------------------
-- File: mux.vdh
---------------------------------------
-- Declaração das Bibliotecas e Pacotes 
--
LIBRARY ieee;
USE _________________________ ;

---------------------------------------
-- Especificação das entradas e saídas e nome da ENTITY
ENTITY mux IS
  PORT ( 
   __ , __ : ___ STD_LOGIC_VECTOR (7 DOWNTO 0);
   sel : IN ____________________________ ;
   ___ : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END _____ ;
---------------------------------------
ARCHITECTURE example OF _____ IS
BEGIN
  PROCESS (a, b, ____ )
  BEGIN
    IF (sel = "00") THEN
      c <= "00000000";
    ELSIF (__________) THEN
      c <= a;
    _____ (sel = "10") THEN
      c <= __;
    ELSE
      c <= (OTHERS => '__');
    END ___ ;
  END _________ ;
END _________ ;
---------------------------------------
EL2 - 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
EL3 - Conversor de Binário para BCD
  • Considere um número decimal entre 0000 e 9999. Usando operadores predefinidos, obtenha na saída os digitos decimais separados.
  • Escreva o código VHDL e analise o número de elementos lógicos necessários.
  • Faça a simulação funcional do circuito.
Tb bin2bcd.jpg
Fig. 20 - Simulação da conversão de binário para BCD
  • Compare sua implementação com os outros estudantes e analise as diferenças, observe o código RTL, o número de elementos lógicos e também o tempo de propagação.
Para separar os dígitos decimais do número de entrada pense nos operadores de "+", "-", "*", "/", "REM" e "MOD".
Para facilitar os testes e a troca de informações entre as equipes, a ENTITY deverá ter o seguinte formato:
entity bin2bcd is
	port (
		X_bin	        : in std_logic_vector(13 downto 0);   --  0000 a 9999
		M_bcd		: out std_logic_vector(3 downto 0);  --  Milhar
		C_bcd		: out std_logic_vector(3 downto 0);  --  Centena
		D_bcd		: out std_logic_vector(3 downto 0);  --  Dezena
		U_bcd		: out std_logic_vector(3 downto 0)); --  Unidade

end entity;

architecture example of bin2bcd is
--declaração de sinais auxiliares

begin
--descrição do hardware

end architecture;
Note que com X_bin 14 bits é possível representar números sem sinal entre 0 e . No entanto, os testes devem ser limitados a números entre 0000 e 9990, pois não há especificação para valores maiores que 9999.
Existe um algoritmo Double Dabble que possibilita fazer essa conversão com menos hardware.
Dica para converter de INTEGER para STD_LOGIC_VECTOR de 4 bits.
M_bcd <= std_logic_vector(to_unsigned(M,4));
EL4 - 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
EL5 - 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

ARTIGOS ENTREGUES

2015-2
2015-1

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


Padrões IEEE para o VDHL

Os padrões IEEE [7]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. 1,0 1,1 1,2 PEDRONI, Volnei A. Eletrônica digital moderna e VHDL; 1ª ed. Rio de Janeiro:Elsevier, 2010. 619p. . ISBN 9788535234657
  2. 2,00 2,01 2,02 2,03 2,04 2,05 2,06 2,07 2,08 2,09 2,10 2,11 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