UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO PRÁTICAS PARA DESENVOLVIMENTO DE PROTÓTIPOS DE CIRCUITOS DIGITAIS COM O KIT EDUCACIONAL DE2 P R O F. S Í L V I O F E R N A N D E S
CRONOGRAMA DO CURSO ATIVIDADE DATA DURAÇÃO Inscrições 10/12/2012 a 14/12/2012 4 dias Nivelamento em VHDL 19/12/2012 3 horas Switches, luzes e multiplexadores 16/01/2013 3 horas Números e displays 30/01/2013 3 horas Latches, flip-flops e registradores 20/02/2013 3 horas Contadores 06/03/2013 3 horas Clocks e timers 20/03/2013 3 horas Somadores, subtratores e multiplicadores 03/04/2013 3 horas Máquinas de estado finitos 10/04/2013 3 horas 2
INTRODUÇÃO 3
INTRODUÇÃO O que significa VHDL? Very High Speed Integrated Circuit Hardware Description Language Linguagem de Descrição de Hardware com ênfase em Circuitos Integrados de altíssima velocidade. 4
INTRODUÇÃO Considerações Importantes 1. VHDL NÃO É uma linguagem de programação 2. O VHDL deve ser descrito após a arquitetura, e não a arquitetura após o VHDL. 5
INTRODUÇÃO Etapas de Projeto Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 6
INTRODUÇÃO Etapas de Projeto Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 7
COMPONENTES DE UM PROJETO VHDL 8
COMPONENTES DE UM PROJETO VHDL Package (Pacote): constantes, bibliotecas; Entity (Entidade): pinos de entrada e saída; Architecture (Arquitetura): implementações do projeto; Configuration (Configuração): define as arquiteturas que serão utilizadas. PACKAGE ENTITY ARCHITECTURE CONFIGURATION 9
COMPONENTES DE UM PROJETO VHDL Declaração da entidade define portas de entrada e saída da descrição equivalente ao símbolo de um bloco em captura esquemática Arquitetura descreve as relações entre as portas equivalente ao esquema contido no bloco em cap. esquemática Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 10
COMPONENTES DE UM PROJETO VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.all; PACKAGE (BIBLIOTECAS) ENTITY exemplo IS PORT ( <descrição dos pinos de I/O> ); END exemplo; ARCHITECTURE teste OF exemplo IS BEGIN... END teste; ENTITY (PINOS DE I/O) ARCHITECTURE (ARQUITETURA) 11
COMPONENTES DE UM PROJETO VHDL Declaração da entidade OBS: o arquivo deve ser salvo com mesmo nome da entidade e extensão.vhd 12
COMPONENTES DE UM PROJETO VHDL Declaração da entidade Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 13
COMPONENTES DE UM PROJETO VHDL Declaração da arquitetura Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 14
COMPONENTES DE UM PROJETO VHDL Declaração da arquitetura Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 15
COMPONENTES DE UM PROJETO VHDL Exemplo de uma descrição completa Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 16
COMPONENTES DE UM PROJETO VHDL Exemplo de uma descrição completa Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 17
COMPONENTES DE UM PROJETO VHDL Tipos de dados Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 18
COMPONENTES DE UM PROJETO VHDL Tipos de dados bit Assume valores 0 ou 1. x: in bit; bit_vector Vetor de bits. x: in bit_vector(7 downto 0); x: in bit_vector(0 to 7); std_logic* x: in std_logic; std_logic_vector x: in std_logic_vector(7 downto 0); x: in std_logic_vector(0 to 7); boolean Assume valores TRUE ou FALSE 19
COMPONENTES DE UM PROJETO VHDL Tipos de dados STD_LOGIC: Definida pela biblioteca IEEE: use ieee.std_logic_1164.all; Pode assumir nove valores: U : não inicializada Z : alta impedância X : desconhecida W : desconhecida fraca 0 : valor 0 L : 0 fraca (Low) 1 : valor 1 H : 1 fraca (High) - : Don t care. 20
COMPONENTES DE UM PROJETO VHDL Tipos compostos Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 21
COMPONENTES DE UM PROJETO VHDL Agregados Uma expressão indicando o valor de um tipo composto Cada elemento do tipo composto tem o seu valor definido OTHERS identifica todos elementos não especificados deve ser a última associação na lista de associações Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 22
COMPONENTES DE UM PROJETO VHDL Definição de Novos Tipos Palavra reservada TYPE Exemplo: Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 23
COMPONENTES DE UM PROJETO VHDL Objetos de dados Usados para representar e armazenar dados; Três tipos básicos: constantes, sinais e variáveis; Cada objeto possui um tipo de dados específico e um conjunto de possíveis valores; 24
COMPONENTES DE UM PROJETO VHDL Objetos de dados Constantes Assumem apenas um valor em todo o código. Declaração: constant <identificador>: <tipo> := <valor> Ex: constant errado : boolean := False; constant parte_ram : bit_vector(3 downto 0) := 1110; Podem ser declaradas em qualquer parte do código 25
COMPONENTES DE UM PROJETO VHDL Objetos de dados Sinais Representam ligações entre elementos; Comunicação de módulos em uma estrutura Temporizados. Declaração: signal <identificador>: <tipo> [:= valor]; Ex: signal fio1: std_logic; sgnal fio2: std_logic := 1 ; 26
COMPONENTES DE UM PROJETO VHDL Objetos de dados Variáveis Utilizados para armazenar valores intermediários entre expressões; Atribuição imediata; Declaração: variable <identificador>: <tipo> [:= valor]; Ex: variable var1: integer; variable var2: std_logic := 0 ; 27
COMPONENTES DE UM PROJETO VHDL Objetos de dados Atribuições a sinais ou variáveis <= (atribuição de sinal) := (atribuição de variável) 28
FERRAMENTA QUARTUS II 29
FERRAMENTA QUARTUS II www.altera.com Usaremos a versão 9.2 Ambiente integrado com Editor Compilador Simulador Ferramenta de síntese Licença gratuita para estudantes 30
FERRAMENTA QUARTUS II Criar um projeto 1. File-> New ; escolher VHDL File ; OK 2. Editar o arquivo VHDL (copiar o exemplo1) 3. File -> Save As; completar o nome com exemplo1.vhd ; OK 4. File -> New Project Wizard 5. Next 6. Escolher o diretório de trabalho e o nome do projeto 7. Adicione o(s) arquivos(s) vhd para o projeto 8. Escolher um dispositivo (Ex: Cyclone II) 9. Specify the other EDA Tools NÃO clicar em nada; 10. Finish 31
FERRAMENTA QUARTUS II Compilar o projeto 1. Processing -> Start Compilation ou 2. Aguardar mensagem Full Compilation was succesfull (ou mensagem de erro) 3. Anotar Nome (código) do dispositivo escolhido automaticamente Caminho crítico (pino de entrada/pino de saída) e seu atraso ( Longest tpd from souce pin ) Número de ALUTs utilizadas 32
FERRAMENTA QUARTUS II Preparar Arquivo para Simulação Funcional 1. Criar o arquivo de simulação: File-> New-> Verification/Debugging Files -> Vector Waveform File 2. Clicar com botão direito do mouse na coluna chamada Name 3. Escolher Insert -> Insert Node or Bus -> Node Finder 4. No Node Finder, selecionar os nomes dos sinais a serem observados (entradas e saídas): no Filter, selecionar Pins: all ; clicar no botão List 5. Selecionar a, b, sel, out, clicar em > e em OK 6. multiple items ; OK 7. Especificar as formas de onda para os sinais de entrada (a, b, sel), usando o Waveform Editing Tool (usar a lupa para aumentar/reduzir o zoom 8. Salvar o arquivo de forma de ondas com o mesmo nome do projeto: File-> Save As 33
FERRAMENTA QUARTUS II Executar a Simulação Funcional e Analisar os Resultados 1. Processing -> Start Simulation ou 2. Para medir tempos de atraso específicos: clicar com o botão da direita e selecionar Time Bar -> Insert Time Bar 34
COMANDOS CONCORRENTES 35
COMANDOS CONCORRENTES O atraso delta Atribuição de valor para um sinal Construção WHEN ELSE Construção WITH SELECT Comando BLOCK Comando PROCESS 36
COMANDOS CONCORRENTES O atraso delta Região de código concorrente: ordem dos comandos não influencia no resultado final da simulação Como é feito: avaliação dos eventos simultâneos ordenada por um atraso interno D O atraso Δ é nulo: Δ = 0 Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 37
COMANDOS CONCORRENTES O atraso delta Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 38
COMANDOS CONCORRENTES Construção WHEN ELSE Transferência condicional de um sinal Contém: uma lista de condições e expressões Primeira condição verdadeira: define expressão transferida Formato: Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 39
COMANDOS CONCORRENTES Construção WHEN ELSE Circuito Equivalente 40
COMANDOS CONCORRENTES Construção WHEN ELSE Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 41
COMANDOS CONCORRENTES Construção WITH SELECT Transferência condicional de um sinal Contém: uma lista de opções Todas as condições da expressão de escolha devem ser consideradas Não existe prioridade como acontece com WHEN ELSE Opções pode ser agrupadas: caracter equivale a ou TO e DOWNTO delimitam faixas de opções Opções restantes: palavra reservada OTHERS 42
COMANDOS CONCORRENTES Construção WITH SELECT Formato: Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 43
COMANDOS CONCORRENTES Construção WITH SELECT Exemplo: Circuito Equivalente 44
COMANDOS CONCORRENTES Construção WITH SELECT Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 45
COMANDOS CONCORRENTES Construção PROCESS Objetivo: delimitar regiões de código sequencial Início: palavra reservada PROCESS Lista de sensibilidade: identifica que sinais ativam a execução do processo Comandos Sequenciais 46
COMANDOS CONCORRENTES Construção PROCESS Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 47
COMANDOS SEQUENCIAIS 48
COMANDOS SEQUENCIAIS Construção IF ELSE Construção CASE WHEN Comando NULL 49
COMANDOS SEQUENCIAIS Construção IF ELSE Similar a construção WHEN ELSE Execução condicional de um ou mais comandos sequenciais Teste: definido por uma lista de condições Condição de teste: qualquer expressão que retorno BOOLEAN Formato: 50
COMANDOS SEQUENCIAIS Construção IF ELSE Também é possível aninhar vários IF ELSE Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 51
COMANDOS SEQUENCIAIS Construção IF ELSE Exemplo: 52
COMANDOS SEQUENCIAIS Construção CASE Similar a construção WITH SELECT Execução condicional de um ou mais comandos sequenciais A execução dos comandos: controlada pelo valor de uma expressão Todas condições da expressão de escolha devem ser consideradas Não existe uma prioridade como na construção IF ELSE Opções podem ser agrupadas: caracter equivale a ou TO e DOWNTO delimitam faixas de opções Opções restantes: palavra reservada OTHERS 53
COMANDOS SEQUENCIAIS Construção CASE Exemplo 54
COMANDOS SEQUENCIAIS Construção CASE 55
COMANDOS SEQUENCIAIS Comando NULL Não realiza nenhuma operação A execução é passada para o próximo comando Especialmente útil na construção CASE WHEN que precisa cobrir todos os valores da expressão de escolha mas para alguns valores não deve ser feito nada em um dado projeto 56
CIRCUITOS SÍNCRONOS 57
CIRCUITOS SÍNCRONOS Dependem de um sinal de sincronismo Clock: sinal digital que alterna entre 0 e 1 em um frequência constante Exemplo: latch Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 58
CIRCUITOS SÍNCRONOS Latch síncrono: Registrador 59
CIRCUITOS SÍNCRONOS Em STD_LOGIC, usa-se rising_edge para transição de subida de clock e falling_edge para transição de descida. ARCHITECTURE behavior OF dff_logic IS BEGIN PROCESS(clk, reset) BEGIN IF reset = 1 THEN q <= (others => 0 ); ELSIF RISING_EDGE(clk) THEN q <= d; END IF; END PROCESS; END behavior; 60
COMPONENTES 61
COMPONENTES Uma descrição (entidade + arquitetura) empregada por uma outra entidade Emprego Interligação de múltiplas entidades de projeto Projeto hierárquico Declaração de um componente Similar a declaração de entidade Solicitação de um componente 62
COMPONENTES Declaração 63
COMPONENTES Solicitação do componente Mapa de ligações Pode seguir mesma ordem estabelecida na declaração: Pode seguir uma nova sequência definida no mapa: 64
COMPONENTES Exemplo: 65
COMPONENTES Componente 1 Componente 2 --------------------------------------------------------- -- Arquivo componente_inv.vhd -- Modelo do inversor --------------------------------------------------------- --------------------------------------------------------- -- Arquivo componente_and.vhd -- Modelo da porta AND --------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; library IEEE; use IEEE.std_logic_1164.all; entity componente_inv is port( x : in std_logic; y : out std_logic ); end componente_inv; architecture arquitetura_inv of componente_inv is begin y <= not x; end arquitetura_inv; entity componente_and is port( a : in std_logic; b : in std_logic; c : out std_logic ); end componente_and; architecture arquitetura_and of componente_and is begin c <= a and b; end arquitetura_and; 66
------------------------------------------------------ -- Arquivo componente_sistema.vhd ------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity componente_sistema is port( in1 : in std_logic; in2 : in std_logic; in3 : in std_logic; in4 : in std_logic; out1 : out std_logic ); end componente_sistema; Componente 3 COMPONENTES architecture arquitetura_sistema of componente_sistema is component componente_and port( a: in std_logic; b : in std_logic; c : out std_logic); end component; component componente_inv port( x: in std_logic; y : out std_logic); end component; signal s1, s2, s3, s4 : std_logic; begin and1 : componente_and port map (a => in1, b => in2, c => s1); and2 : componente_and port map (a => in3, b => in4, c => s2); and3 : componente_and port map (a => s3, b => s4, c => out1); inv1 : componente_inv port map (x => s1, y => s3); inv2 : componente_inv port map (x => s2, y => s4); end arquitetura_sistema; 67
COMPONENTES Genéricos Fornecem um meio de levar informações externas estáticas para entidades de projeto e blocos Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 68
COMPONENTES Comandos GENERATE Cópia de comandos concorrentes: esquema de geração FOR esquema de geração IF 69
COMPONENTES Comandos GENERATE Esquema de geração FOR Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 70
COMPONENTES Comandos GENERATE Esquema de geração IF Fonte: Roberto d Amore -VHDL: Descrição e Síntese de Circuitos Digitais 71
KIT ALTERA DE2 72
KIT ALTERA DE2 73
KIT ALTERA DE2 Instalando o driver USB Blaster Quando o cabo USB da placa é colocado na porta USB do PC é pedido para instalar o driver Procure o diretório altera onde o Quartus foi instalado Localize o subdiretório altera\ 91sp2\quartus\drivers\usb blaster 74
KIT ALTERA DE2 Setando o dispositivo no Quartus II No menu Assignments -> Device... Escolha a família Cyclone II Em seguida, o dispositivo EP2C35F672C6 75
KIT ALTERA DE2 Ligando os pinos da placa DE2 Para fazer uso dos pinos da placa com assistência do arquivo de ligação automática é necessário que a entidade do seu projeto tenha os nomes padrões dos pinos da placa Os nome e código dos pinos podem ser encontrados na tabela do arquivo DE2_Pin_Table.pdf Os principais são: Chaves: SW(17 downto 0) LEDs vermelhos: LEDR(17 downto 0) LEDs verdes: LEDG(9 downto 0) Botões de pressão: KEY(3 downto 0) Display 7-segmentos: HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7 todos do tamanho (6 downto 0) 76
KIT ALTERA DE2 Ligando os pinos da placa DE2 Em seguida deve ser feita a ligação automática dos pinos através da importação do arquivo DE2_pin_assignments.csv Para isso vá ao menu Assignments -> Import Assignments.. Procure o arquivo acima citado e clique em ok 77
KIT ALTERA DE2 Fazendo dowload para a placa Primeiro seu projeto deve ser compilado Ligue o cabo USB na placa e no PC Em seguida vá ao menu Tools -> Programmer Se o driver USB Blaster não tiver sido detectado clique no botão Hardware Setup Adicione o USB Blaster Selecione seu projeto com a extensão.sof Clique em start para fazer o download para a placa Agora pode usá-la com o comportamento do seu projeto 78
KIT ALTERA DE2 Exemplo: Hello Word 79
KIT ALTERA DE2 Exemplo: Hello Word 80
REFERÊNCIAS AMORE, Roberto d. VHDL: descrição e síntese de circuitos digitais. Rio de Janeiro: LTC, 2005. ALTERA. DE2 Development and Education Board User Manual. Version 1.0, 2005 ALTERA. Getting Started with Altera s DE2 Board. ALTERA. Altera DE2 Board Pin Table. 81