Baixe o app para aproveitar ainda mais
Prévia do material em texto
72 1 Prof. Ederson Cichaczewski Lógica Programável Aula 2 72 2 Linguagem VHDL – Elementos Básicos 72 3 Conversa Inicial 72 4 Tema 1 Conhecendo os aspectos elementares de VHDL Tema 2 Representação de dados e operadores em VHDL 72 5 Tema 3 Comandos concorrentes em VHDL Tema 4 Estruturas sequenciais em VHDL Tema 5 Funções em VHDL 72 6 A linguagem de descrição de hardware VHDL, sendo universal, possibilita a troca de informações de circuito entre diferentes fabricantes e ferramentas de projeto. Contextualizando 72 7 Conhecendo os aspectos elementares de VHDL 72 8 O hardware pode ser descrito em sua arquitetura segundo dois níveis de abstração: Estrutural: lista de ligações Comportamental: modo de operação VHDL permite descrever circuitos em nível RTL (Register Transfer Level), que consiste em descrever o fluxo dos sinais entre registradores e portas lógicas, por meio de uma sintaxe familiar a uma linguagem de programação. 72 9 Fornecem um meio para a definição de recursos de uso comum. Podem ser:LIBRARY ieee;LIBRARY std;LIBRARY work; Package é uma subdivisão de uma biblioteca, especificado por USE. Por exemplo: o pacote que define tipos de dados, funções etc., é o IEEE 1164. No código o seu uso é dado por:USE ieee.std_logic_1164.all; Bibliotecas (Library) 72 10 Execução concorrente (em paralelo) A princípio todos as linhas de código são executadas concorrentemente Isso quer dizer que a ordem de apresentação dos comandos é irrelevante na operação do circuito É possível delimitar regiões de código sequencial em que será seguida a ordem de apresentação dos comandos. 72 11 Exemplo de execução concorrente: Os códigos das linhas 8 e 9 podem ser trocados de posição, não haverá diferença na operação. 72 12 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 1. Pg. 2 72 13 A sintaxe não diferencia letras minúsculas de maiúsculas. Como padrão, usa-se maiúsculas em palavras-chave da linguagem. As letras minúsculas devem ser usadas para variáveis criadas pelo desenvolvedor. Comentários se inicial após dois hifens “--” e terminam ao final da linha. 72 14 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 10 Entidade de projeto Design Entity - é composta de duas partes: Declaração da entidade: interfaces de I/O Arquitetura: operação 72 15 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 11 Exemplo de entidade: 72 16 Após ENTITY vem o nome que a identifica, seguido por IS. GENERIC permite declarar constantes. PORT define o modo e o tipo das portas de entrada e saída. END seguida do nome da entidade encerra a construção. 72 17 Modos das portas IN: apenas entrada OUT: apenas saída INOUT: entrada e saída BUFFER: permite uma conexão interna à entidade Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 11 72 18 Arquitetura: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 12 72 19 Após ARCHITECTURE vem o nome que a identifica, depois OF e o nome da entidade, seguido por IS Logo abaixo podem ser feitas declarações Por fim, entre BEGIN e END, ficam os comandos concorrentes que descrevem a entidade 72 20 Representação de dados e operadores em VHDL 72 21 Elementos que contêm valor armazenado. São quatro: CONSTANT (constante): valor estático VARIABLE (variável): valor pode ser alterado, usado apenas em código sequencial Classes de objetos 72 22 SIGNAL (sinal): valor pode ser alterado, usado em código concorrente e sequencial FILE (arquivo): associados à criação de arquivos 72 23 Tipos escalares BIT: níveis lógicos 0 ou 1 BOOLEAN: valores TRUE ou FALSE CHARACTER: qualquer caractere ASCII INTEGER: valores inteiros positivos ou negativos. Subtipos: NATURAL e POSITIVE REAL: números em ponto flutuante TIME: tipo físico com unidade 10-15s Tipos de Dados 72 24 Tabela com exemplos dos tipos escalares. Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 15 72 25 Tipos compostos BIT_VECTOR: contém elementos do tipo BIT STRING: contém elementos do tipo CHARACTER Tabela com exemplos: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 16 72 26 O número de elementos é especificado com a palavra DOWNTO Ex: SIGNAL a, b: BIT_VECTOR(4 DOWNTO 0); 72 27 Tipos do Padrão IEEE 1164 Podem assumir 9 valores: ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘–’. São eles: STD_LOGIC STD_LOGIC_VECTOR 72 28 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 10. Pg. 154 72 29 Tipos do padrão IEEE 1076.3 Valores com sinal (SIGNED) e sem sinal (UNSIGEND) do tipo BIT (pacote numeric_bit) ou STD_LOGIC (pacote numeric_std) Em um vetor que tem um número com sinal negativo, este é representado em complemento de 2 72 30 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 11. Pg. 173 72 31 Atribuição := usado para atribuir valor a um objeto das classes VARIABLE ou CONSTANT <= usado para atribuir valor a um objeto da classe SIGNAL e para portas (PORT) => usado para atribuir valor a um elemento de um vetor ou aos elementos não especificados (OTHERS) Operadores 72 32 Operadores lógicos Realizam operações lógicas Os tipos de dados envolvidos podem ser: BIT, BIT_VECTOR, STD_LOGIC e STD_LOGIC_VECTOR 72 33 Na prática implementam as funções das portas lógicas. Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 19 72 34 Operadores aritméticos Realizam operações aritméticas Os tipos de dados envolvidos podem ser: INTEGER, SIGNED, UNSIGNED e REAL 72 35 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 21 72 36 Operadores relacionais Realizam comparações em operações de igualdade, desigualdade e ordenação Qualquer tipo de dado é aceito Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 19 72 37 Operadores de deslocamento de Bit Deslocamento lógico para esquerda ou direita Deslocamento aritmético para esquerda ou direita Rotação lógica para esquerda ou direita O operando da esquerda deve ser do tipo BIT_VECTOR e o operando da direita do tipo INTEGER 72 38 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 2. Pg. 20 72 39 São informações adicionais associadas a sinais, vetores e tipos Atributos de sinais ACTIVE: retorna se o sinal está ativo QUIET[t]: retorna se o sinal está inativo em um instante de tempo especificado Atributos 72 40 EVENT: retorna se o sinal teve uma mudança de valor, ocorreu um evento STABLE: retorna se não ocorreu nenhum evento 72 41 Comandos concorrentes em VHDL 72 42 Podemos fazer uma relação de comparação com os circuitos combinacionais e sequenciais. Circuitos combinacionais não possuem memória e suas saídas dependem apenas do estado atual das entradas. Portanto, só podem ser descritos com código concorrente. Código concorrente versus sequencial 72 43 Em circuitos sequenciais, a saída depende de uma entrada anterior, há uma realimentação da saída para a sua entrada. Portanto, só podem ser descritos com código sequencial. 72 44 Os comandos concorrentes são: WHEN, GENERATE e BLOCK. Quando estamos elaborando um código concorrente, é necessário ter cuidado para não criar iterações que geram loop,causando instabilidade. 72 45 Em uma região de código concorrente, a ordem das linhas não deve interferir no resultado, buscando-se uma condição estável do circuito. Em certos casos, é mais fácil implementar um circuito combinacional utilizando código sequencial, mesmo que o circuito lógico não tenha elementos sequenciais. 72 46 WHEN Permite duas construções: WHEN / ELSE : permite a transferência condicional de um sinal, com prioridade na ordem das condições. WITH / SELECT / WHEN : transfere um valor a um sinal de destino segundo uma relação de opções, sem prioridade. 72 47 Exemplo de construção WHEN/ELSE A primeira condição que retorna o valor verdadeiro define o valor que é transferido para o sinal de destino. Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 3. Pg. 32 72 48 Exemplo de construção WITH / SELECT / WHEN Todas as condições de seleção devem ser consideradas, e elas devem ser mutuamente exclusivas. Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 3. Pg. 33 72 49 GENERATE Permite repetir comandos concorrentes segundo duas construções: FOR / GENERATE : contém um identificador local e os limites da geração IF / GENERATE : faz uma réplica dos comandos contidos, caso a condição seja satisfeita Aplica-se a circuitos como somadores, multiplicadores e unidades lógicas aritméticas 72 50 Exemplos de construção FOR / GENERATE Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 7. Pg. 107 72 51 Exemplo de construção IF / GENERATE A condição é verificada por uma expressão estática Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 7. Pg. 109 72 52 BLOCK (bloco) Permite dividir o código em regiões para facilitar o entendimento da descrição. Sinais podem ser declarados com visibilidade restrita ao interior do bloco. 72 53 Exemplo de construção: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 3. Pg. 35 72 54 Estruturas sequenciais em VHDL 72 55 Ficam em regiões específicas de código, como processos ou subprogramas, que são: PROCESS FUNCTION PROCEDURE Comandos sequenciais 72 56 Comandos sequenciais: IF CASE WAIT LOOP 72 57 PROCESS Em sua construção, possui uma lista de sensibilidade em que são definidos sinais que disparam a execução do processo É equivalente à interrupção em um microcontrolador Em determinadas aplicações, pode ser usado em conjunto com o atributo EVENT, para identificar o tipo de mudança ocorrida no sinal A atualização do valor de uma variável é imediata, mas de um sinal pode ocorrer após o término do processo 72 58 Construção IF / ELSE Permite execução condicional, em função de condições O comando IF pode ser seguido de cláusulas ELSIF, sendo a última ELSE (ambas opcionais) 72 59 Exemplo: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 4. Pg. 46 72 60 Construção CASE WHEN Permite execução condicional em função de uma expressão As condições devem ser mutuamente exclusivas Exemplo: Pode-se agrupar condições com o operador “|”, que equivale a “OU” Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 4. Pg. 48 72 61 Comando WAIT Suspende a execução de um processo ou procedimento Cláusulas: ON: suspende o processo até a alteração de um dos sinais mudar de valor UNTIL: suspende o processo enquanto a expressão booleana não for satisfeita FOR: suspende o processo por um determinado tempo 72 62 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 4. Pg. 49 72 63 Comando LOOP Permite repetir a execução de comandos sequenciais Esquemas FOR e WHILE FOR / LOOP Contém um identificador local e os limites de iteração 72 64 Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 7. Pg. 110 72 65 WHILE / LOOP Um conjunto de comandos são executados se uma condição for verdadeira. Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 7. Pg. 110 72 66 EXIT: comando usado para sair do loop NEXT: usado para pular passos do loop, indo para o final do loop 72 67 Funções e procedimentos em VHDL 72 68 Conjunto de comandos sequenciais usados frequentemente Recebem parâmetros Retornam valores Podem ser chamados em regiões de código concorrente ou sequencial Objetos declarados localmente perdem o seu valor ao sair do subprograma Não é permitido declarar sinais Subprogramas 72 69 É chamada por uma expressão e retorna um único valor (comando RETURN) Muito similar ao processo (PROCESS), os mesmos comandos podem ser utilizados (IF, CASE, LOOP) Possui duas partes: O corpo da função A chamada da função FUNCTION (Função) 72 70 Exemplo de construção de uma função: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 8. Pg. 124 72 71 É chamado por um comando e permite retornar mais de um valor O comando RETURN não é obrigatório Possui duas partes: O corpo do procedimento A chamada do procedimento PROCEDURE (Procedimento) 72 72 Exemplo de construção de um procedimento: Fonte: D’AMORE, ROBERTO. VHDL Descrição e Síntese de Circuitos Digitais. 2ª ed. Rio de Janeiro: LTC, 2012. Capítulo 8. Pg. 125 72 73
Compartilhar