DLP29006-Engtelecom(2017-1) - Prof. Marcos Moecke

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

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


Registro on-line das aulas

Unidade 1

Aula 1 (10 Fev)
Ler Dispositivos Lógicos Programáveis - Kamila Rose da Silva, IFSC
Aula 2 (14 Fev)
  • 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 In the beginning - ALTERA
Ver ALTERA history
Ver pag. 413 a 422 de [1]
Ver pag. 495 a 499 de [2]
  • Arquitetura de FPGAs (Xilinx e Altera): CLB, LAB, RAM, DSP, Clock, PLL, I/O
  • 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]
Aula 3 (17 Fev)
  • Fabricantes de DLPs/FPGAs e familias de DLPs atuais.
  • Preços
  • Historia, processo de produção dos chips.

Unidade 2

Aula 4 (20 Fev) - Introdução ao VHDL e ambiente EDA - QUARTUS
  • Estrutura do código VHDL
  • Declaração das bibliotecas e pacotes LIBRARY / PACKAGE

library library_name;
use library_name.package)name.all;

  • ENTITY

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];

  • ARCHITECTURE

architecture arch_name of entity_name is
  [declarative_part]
begin
  statement_part
end [architecture] [arch_name];

  • Exemplo - Declaração de uma porta NAND em 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;


  • Exemplo 2.2 (VHDL) - programação de um flip-flop
 -- 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;
RTL Ex2 2 Pedronib.png
Figura 2.2 - 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.3 - Technology Map do Exemplo 2.2
ChipPlanner Ex2 2 Pedronib.png
Figura 2.4 - Chip Planner do Exemplo 2.2
  • Realizar as simulações funcional e temporal do circuito
  • Modifique o circuito para que ele passe a ter 16 flip-flops, e realize as simulações funcional e temporal do circuito.
Aula 5 (21 Fev) - 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
 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 2.5 - 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]


Unidade 3

Aula 6 (24 fev)
  • Tipos de Dados em VHDL.
  • Objetos de VHDL: CONSTANT, SIGNAL, VARIABLE, FILE.
  • Palavra chave OTHERS
Ver pag. 31 a 35 de [2]
  • 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)
Aula 7 (3 Mar)
  • 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 (6 Mar)
  • 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)
Aula 9 (7 Mar)
  • Tipos de Dados em VHDL.
  • 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 10 (10 Mar)
  • 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 STD_LOGIC_VECTOR para valores de entrada e com sinal e ocupando 4 bits, utilize na saída 8 bits.
  • Repita o circuito com as mesmas características, utilizando no entanto portas do tipo INTEGER com range de -8 a 7 nas entradas e range de -128 a 127 na saída.
  • Repita o circuito com as mesmas características, utilizando no entanto portas do tipo INTEGER com range de -8 a 7 nas entradas e range de -256 a 255 na saída.
  • Em todos os casos 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.
  • Determine o número de elementos lógicos e pinos e verifique o código RTL obtido. Compare com os colegas.
Ver pag. 73 a 78 de [2]
Aula 11 e 12 (14 e 17 mar)
  • 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 [2]
  • chip_pin [3]
Ver pag. 91 a 108 de [2]
Aula 13 (20 mar)
  • 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 [5]
  • 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]

Unidade 4

Aula 14 (21 mar)
  • 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 15 (24 mar)
  • 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 16 (28 mar)
  • 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 17 a 19 (31 mar a 4 abr)
  • 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 20 (7 abr)
  • 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;

Unidade 5

Aula 21 (11 abr)
  • 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
[rótulo:] PROCESS [(lista_de_sensibilidade)] [IS]
             [parte_declarativa]
         BEGIN
             afirmação_sequencial;
             afirmação_sequencial;
             ...
         END PROCESS [rótulo];
  • Instrução IF
[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];
  • 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 [2]
Aula 22 (17 abr)
  • Avaliação A1 - UN2, UN3, UN4
Aula 23 (18 abr)
  • Código Sequencial.
  • Instruções do tipo LOOP: LOOP incondicional, FOR-LOOP, WHILE-LOOP, NEXT, EXIT
  • LOOP incondicional:
[rótulo:] LOOP
             afirmação_sequencial;
             afirmação_sequencial;
             ...
          END LOOP [rótulo];
  • FOR-LOOP:
[rótulo:] FOR identificador IN faixa LOOP
             afirmação_sequencial;
             afirmação_sequencial;
             ...
          END LOOP [rótulo];
  • WHILE-LOOP:
[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];
  • LOOP com EXIT:
[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];
  • LOOP com NEXT:
[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];
  • Exemplos: Carry-Ripple Adder (FOR-LOOP) (Ex 6.4),
  • Ver pag. 161 a 164 de [2]
Aula 24 (25 abr)
  • Código Sequencial.
  • Instrução CASE
 [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;
  • 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 [2]
Aula 25 (25 abr)
  • Código Sequencial.
  • Exercícios do Capítulo 6.
Aula 26 (28 abr)
  • Código Sequencial.
  • Projeto de relógio HH:MM:SS com conversor para 7 segmentos. Implementar um relógio usando contador de 0 a 9 (BCD). Para implementar o relógio use PROCESS separados para implementar a hora, o minuto e o segundo. O relógio deve contar de 00:00:00 até 23:59:59. Os mostradores de 7 segmentos devem ativados por um PROCESS que converte o número 0 a 9 em bits do código SSD.
  • Ver as limitações do QSIM na simulação de sistemas com longa duração.
  • Apreender o uso do simulador Modelsim
  • Implementar o relógio no kit DE2-115.

Unidade 6

Aula 28 (9 mai)
  • 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 [2]
Aula 29 (12 mai)
  • 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 [2]
Aula 30 (15 mai)
  • 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.
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;
  • 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.
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 ;
Aula 31 (16 mai)
  • 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 é:

[rótulo:] assert condição_booleana
[report mensagem]
[severity nivel_severidade];

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.
function nome_funçao (lista_parametros_entrada) return tipo_saida is
   declarações
begin
   afirmações sequenciais
end function;
  • 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.

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;
Aula 32 (19 mai)
  • Uso de PROCEDURE.
procedure nome_procedimento (lista_parametros_entrada, lista_parametros_saída) is
   declarações
begin
   afirmações sequenciais
end procedure;
  • Exemplo: min_max Ex.9.4
  • Exercícios: 9.1 a 9.4, 9.6 a 9.9
  • Ver pag. 213 a 239 de [2])
Aula 33 e 34 (23 e 26 mai)
  • Uso de FUNCTION e PROCEDURE.
  • Exercícios: 9.1 a 9.4, 9.6 a 9.9

Unidade 7

Aula 33 (29 Mai)
  • Simulação de sistemas digitais com Modelsim e testbench em VHDL
  • Tipos de simulação:
1) simulação funcional (usando o QSIM) com entrada gráfica e análise gráfica da saída - OK já visto desde CIL29003
2) simulação temporal (usando o QSIM) com entrada gráfica e análise gráfica da saída - OK já visto desde CIL29003
3) simulação funcional (usando o ModelSim) com entrada gráfica (gerado com comandos force) e análise gráfica da saída - OK já visto
4) simulação temporal (usando o ModelSim) com entrada gráfica (gerado com comandos force) e análise gráfica da saída - Não será visto
5) simulação funcional (usando o ModelSim) com entrada VHDL e análise gráfica da saída - Será visto nesta Unidade
6) simulação temporal (usando o ModelSim) com entrada VHDL e análise gráfica da saída - Será visto nesta Unidade
7) simulação funcional (usando o ModelSim e Matlab) com entrada VHDL e análise em VHDL da saída.
8) simulação temporal (usando o ModelSim e Matlab) com entrada VHDL e análise em VHDL da saída.
  • Exemplo de Conversor Binário para Gray (Exercício 9.7)
  • Para usar o ModelSim 10.1d na CLOUD-IFSC(191.36.8.33) abra um terminal e digite:
/opt/altera/13.0sp1/modelsim_ae/bin/vsim
  • ou
vsim
  • Para usar o ModelSim 10.1d nos Laboratórios do IFSC campus São José abra um terminal e digite:
/opt/altera/13.0/quartus/modelsim_ae/linux/vsim
Aula 36 (30 Mai)
  • Simulação de sistemas digitais com Modelsim e testbench em VHDL
  • Implementar um sistema constituído de dois circuitos de SHIFT RIGHT LOGICAL - SRL_L com entradas de DADOS, LOAD e RESET, e saída paralela. Crie um componente SOMADOR constituido de um somado do tipo UNSIGNED. Conecte as saídas dos SRL_L ao SOMADOR.

Slr adder.png

  • Criar um testbench em VHDL para testar cada componente (SOMADOR, o SRL_L) e o sistema final. (faça com o test bench teste no minimo o funcionamento da entrada LOAD para 2 entradas diferentes de DADOS, o RESET, o SOMADOR e o funcionamento do SRL_L para uma sequencia de pelo menos N clocks, onde N é o número de bits das entradas.
Note que no final deste projeto, deverão existir pelo menos os arquivos de projeto srl_l.vhd, somador.vhd, sistema.vhd e os arquivos de teste bench correspondentes srl_l_tb.vht, somador_tb.vht, sistema_tb.vht. Para facilitar a simulação no Modelsim recomenda-se criar também os arquivos de script srl_l.do, somador.do, sistema.do.
DICA: Use o comando do Quartus II para gerar um template para o testbench. Selecione cada componente como TOP LEVEL e faça a ANÁLISE E SÍNTESE em seguida (Processing > Start > Start Test Bench Template Writer).
  • Criação de sinais para Test Bench em VHDL
Geração de sinal de clock
-- DECLARAR
constant tclk: time := 1 ns;
signal clk   : std_logic := '0';

-- CLOCK COM PERIODO DE 2*tclk (COM CÓDIGO CONCORRENTE)
clk <= not clk after tclk;

-- CLOCK COM PERIODO DE 2*tclk (COM CÓDIGO SEQUENCIAL)
PROCESS                                              
BEGIN  
  clk <= '1';
  wait for tclk;
  clk <= '0';
  wait for tclk;
END PROCESS;
Geração de sinal de reset
-- DECLARAR
constant treset: time := 100 ps;
signal reset   : std_logic;

-- RESET COM DURAÇÃO DE treset (COM CÓDIGO CONCORRENTE)
reset <= '1', '0' after treset;

-- RESET COM DURAÇÃO DE treset (COM CÓDIGO SEQUENCIAL)
PROCESS                                              
BEGIN  
  reset <= '1';
  wait for treset;
  reset <= '0';
  wait;
END PROCESS;
Geração de uma sequencia binária
-- DECLARAR
constant t_a: time := 100 ps;
constant Nbits: natural := 8;
signal a  : std_logic_vector(Nbits-1 downto 0);

-- GERAÇÂO DO SINAL a = [0 1 2 3 4 ...] COM DURAÇÃO DE t_a em cada valor (COM CÓDIGO SEQUENCIAL)
PROCESS                                              
BEGIN  
	for i in 0 to 2**Nbits-1 loop
		a <= std_logic_vector(to_unsigned(i,Nbits));
		wait for t_a;
	end loop;
END PROCESS;
Geração de uma sequencia pseudoaleatória
-- DECLARAR
constant t_a: time := 100 ps;
constant Nbits: natural := 8;
signal a  : std_logic_vector(Nbits-1 downto 0) := (0 => '1', 3 => '1', others => '0');

-- GERAÇÂO DO SINAL a COM DURAÇÃO DE t_a em cada valor (COM CÓDIGO SEQUENCIAL)
-- USANDO UM CONTADOR LFSR
PROCESS                                              
BEGIN  
	for i in 0 to 2**Nbits-1 loop
		a <= (a(0) xor a(2) xor a(3) xor a(4)) & a(Nbits-1 downto 1);  -- para 8 bits
		wait for t_a;
	end loop;
END PROCESS;
Aula 37 (2 Jun)
  • Simulação de sistemas digitais com Modelsim e testbench em VHDL
  • Tempo livre para a resolução do Exercicio proposto.

Unidade 8

Aula 38 (6 Jun)
  • Introdução ao Projeto de Maquinas de Estado Finitas (FSM) em VHDL
  • O que é uma FSM - Finite State Machine
  • Modelo de FSM
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
----------------------------------------------------------
ENTITY < entity_name > IS
PORT (
	clk, rst : IN STD_LOGIC;
	input : IN < data_type > ;
	output : OUT < data_type >);
END < entity_name > ;
----------------------------------------------------------
ARCHITECTURE < architecture_name > OF < entity_name > IS
	TYPE state IS (A, B, C, ...);
	SIGNAL pr_state, nx_state : state;
	ATTRIBUTE ENUM_ENCODING : STRING; --optional attribute
	ATTRIBUTE ENUM_ENCODING OF state : TYPE IS "sequential";
BEGIN
	------Logica Sequencial da FSM:------------
	PROCESS (clk, rst)
	BEGIN
		IF (rst = '1') THEN
			pr_state <= A;
		ELSIF (clk'EVENT AND clk = '1') THEN
			pr_state <= nx_state;
		END IF;
	END PROCESS;
	------Logica Combinacional da FSM:------------
	PROCESS (pr_state, input)
	BEGIN
		CASE pr_state IS
			WHEN A =>
				output <= < value > ;
				IF (input =< value >) THEN
					nx_state <= B;
					...
				ELSE
					nx_state <= A;
				END IF;
			WHEN B =>
				output <= < value > ;
				IF (input =< value >) THEN
					nx_state <= C;
					...
				ELSE
					nx_state <= B;
				END IF;
			WHEN ...
		END CASE;
	END PROCESS;
	------Seção de Saída (opcional):-------
	PROCESS (clk, rst)
	BEGIN
		IF (rst = '1') THEN
			new_output <= < value > ;
		ELSIF (clk'EVENT AND clk = '1') THEN --or clk='0'
			new_output <= output;
		END IF;
	END PROCESS;
END < architecture_name > ;
  • Usando o template acima descreva em VHDL a FSM indicada na Figura 11.1.
  • Faça a simulação da FSM com Modelsim utilizando um testbench em VHDL que faça a FSM seguir os estados
rst -> A -(x=0)-> A -(x=1)-> A -(x=2)-> B -(x=2)-> B -(x=0)-> C -(x=0)-> C -(x=2)-> C -(x=1)-> A -(x=2)-> B -(x=1)-> A.
Ver pag. 277 a 35 de [2]
Aula 39 (9 Jun)
  • Introdução ao Projeto de Maquinas de Estado Finitas (FSM) em VHDL
  • Exemplo 11.1 Controlador de uma máquina de Venda
  • Compile o código mostrado no Exemplo 11.1.
  • Simule a FSM com Modelsim utilizando um testbench em VHDL para gerar o teste mostrado na figura abaixo.
FSM tb40.png
  • Exercício: Altere a FSM para vender doces que custam 30 centavos. Considere que as moedas aceitas são 5, 10, 25 e 50 centavos. Desenho primeiro a FSM e em seguida implemente-a em VHDL e faça a simulação.
Aula 40 (12 Jun)
  • Avaliação A2
Aula 41 (13 Jun)
  • Introdução ao Projeto de Maquinas de Estado Finitas (FSM) em VHDL
  • Exemplo 11.4 e 11.5 Alarme de carro.
  • Projeto de um semáforo temporizado de 3 vias.

PROJETO FINAL

Aula 42 a 46 (20 Jun a 30 Jun)
  • Projeto Final - Sistema de controle de tráfego
  • trabalho desenvolvido em equipes (ou individual)
  • durante as aulas o professor esclarece dúvidas e orienta o trabalho
Aula 47 (4 Jul)
  • Avaliação de Recuperação de A1 e A2.


Avaliações

  • Avaliação A1 - Unidade 2 a 4 (17/04/2017) - Local: Lab Redes II.
  • Avaliação A2 - Unidade 5 a 7 (12/06/2017) - 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/2017) - Local: Lab Redes I.
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
APF - Projeto Final - Sistema de controle de tráfego (Entrega e prazos ver Moodle)
  • Cada aluno (ou equipe de 2 alunos) deverá desenvolver um sistema de controle de tráfego das vias indicadas na figura abaixo:

APF DLP29006 2017 1.png

  • Os tempos de verde (tVD) dos semáforos na INTERSEÇÃO 1 deverão ser: VIA 1 = 28 seg, VIA 2 = 28 seg, VIA 3 = 8 seg, e na INTERSEÇÃO 2 deverão ser: VIA 1 = 30 seg, VIA 2 = 30 seg, VIA 3 = 4 seg. O tempo de amarelo (tAM) deverá ser de 2 seg em todas as vias. Os tempos de vermelho (tVM) dependem diretamente dos tempos tVD e tAM.

APF DLP29006 2017 1 times.png

  • O sistema deverá ser constituído de 2 instâncias de uma máquinas de estado finita (FSM) para controle do semáforo. Os grupos focais simples (GFS) serão controlados diretamente pela maquina de estado, mas os grupos focais progressivos (GFP) para as cores verde e vermelho, deverão ser controlados por um subsistema adicional que controla o acendimento e desligamento dos leds.
  • Na figura abaixo está representado em AZUL o funcionamento do GFP, onde "VD|VM" é a saída da máquina de estado e os sinais "q(3..0)" são os acionamentos das lampadas do GFP.

APF DLP29006 2017 1 times GFP.png

  • Para a FSM sugere-se utilzar GENERIC para definir os tempos de verde de cada VIA, e o tempo de amarelo de todas as VIAS.
  • Sugere-se fazer uma versão V1 do sistema apenas com GFS em todas as vias. Na versão V2 as vias 1 e 2 devem receber GFPs.
  • Ao modificar o tipo de grupo focal recomenda-se mudar o projeto da maquina de estado de modo que passe a incluir o tempo progressivo de (4 x 0.5 seg).
  • O sistema de controle das FSM será baseado no valor de um timer de segundos externo a FSM (conforme mostrado em aula).
  • O sistema deverá ser implementado no kit FPGA DE2-115 usando os leds disponíveis ou pinos da GPIO para acionar leds externos.
  • Os sinais de relógio necessários deverão ser obtidos a partir do sinal de clock da placa de 50MHz. Durante as simulações esse circuito deverá ter seu valor alterado de modo a viabilizar a simulação.
  • O arquivo QAR do projeto, e os arquivos .do e o testbench .vht para o MODELSIM devem ser enviados antecipadamente;
  • Escreva um relatório técnico contendo os resultados em no máximo 10 paginas A4. O relatório além das tabelas com os dados de frequência máxima, número de componente, número de pinos, deverá conter a figura dos circuitos RTL da ENTITY top level com uma explicação do seu funcionamento. Também devem ser apresentadas as simulações funcionais e uma análise textual dos resultados obtidos. A descrição da função dos pinos no Kit DE2-115 também deve ser feita.

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 - 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));
EL3 - 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
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
EL6 - Resolução dos exercícios do Cap 6
  • Resolva os exercícios do capítulo 6 (1, 2, 3-4, 5, 6-7, 9*, 10-11, 12*, 13*, 14, 15) pag. 172 a 176.
EL7 - Resolução dos exercícios do Cap 8
  • Resolva os exercícios da capítulo 8 (1-7, 9*) pag. 219 a 220.
EL8 - Resolução dos exercícios do Cap 9
  • Resolva os exercícios da capítulo 9 (1-4, 6-9) pag. 238 a 239.
EL9 - Resolução dos exercícios do Cap 10
  • Resolva os exercícios da capítulo 10 (1,2,5,6,7, 10-15, 17**) pag. 271 a 274.
  • Na simulação de cada exercício, faça um versão usando comandos force e run e outra com testbench em vhdl.

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 2,12 2,13 2,14 2,15 2,16 2,17 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