VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais Tópicos Abordados Aspectos gerais da linguagem Síntese de circuitos Entidade de projeto Classes de objetos: constante, variável e sinal Tipos Operadores Construção concorrente WHEN ELSE Construção concorrente WITH SELECT Processos e lista de sensibilidade Construção sequencial IF ELSE Construção sequencial CASE WHEN Circuitos síncronos Aspectos Gerais da Linguagem Síntese de Circuitos Síntese de Circuitos Etapas de um projeto Síntese de Circuitos Elaboração da Descrição VHDL Descrição VHDL Verificação do Resultado Compilador VHDL Simulador VHDL Estímulos de teste Síntese de Circuitos Síntese da descrição (ilustração das operações) descrição do circuito circuito nível RTL sintetizado circuito nível portas (final) Síntese de Circuitos Síntese da descrição (ilustração das operações) descrição do circuito circuito nível RTL sintetizado circuito nível portas (final) Síntese de Circuitos Síntese da descrição (ilustração das operações) descrição do circuito circuito nível RTL sintetizado circuito nível portas (final) Síntese de Circuitos Descrição VHDL Ferramenta de Síntese Nível RTL Dados da Tecnologia Nível de Portas Opção de Projeto Otimização velocidade/área Rede de Ligações Teste do circuito sintetizado Nova Descrição VHDL Temporização Simulador VHDL Estímulos Síntese de Circuitos Rede de Ligações Ferramenta de Posicionamento & Interligação Implementação Teste do circuito sintetizado: Interligações definidas Nova Descrição VHDL Temporização Simulador VHDL Estímulos Descrição VHDL Descrição VHDL Descrição VHDL Descrição VHDL Modos de Portas Descrição VHDL Descrição VHDL Objetos: são elementos que armazenam valor. Quatro classes de objetos são definidas em VHDL • CONSTANT – objeto com valor estático • VARIABLE – valor imposto pode ser alterado e é empregado em regiões de código sequencial • SIGNAL – valor imposto pode ser alterado e é empregado em regiões de código concorrente ou sequencial • FILE – objetos associados à criação de arquivos Descrição VHDL Declarações de objetos das classes CONSTANT, VARIABLE e SIGNAL --Classe Lista de nomes Tipo Variável inicial CONSTANT CONSTANT CONSTANT nome_const : tipo_x; nome_const : tipo_x := valor_inicial; nome_1, nome_2 : tipo_x := valor_inicial; --const mesmo tipo e vallor inicial VARIABLE VARIABLE VARIABLE nome_var nome_var nome1, nome2 : tipo_y; : tipo_y := valor_inicial; : tipo_y := valor_inicial; --variável sem valor --variável com valor inicial --variáveis mesmo tipo e valor inicial SIGNAL SIGNAL SIGNAL inicial nome_sinal nome_sinal nome1, nome2 : tipo_z; : tipo_z := valor_inicial; : tipo_z ; --sinal sem valor --sinal com valor inicial --sinais mesmo tipo e sem valor --const sem valor Descrição VHDL Transferência de Informações entre objetos sinal_2 sinal_3 sinal_4 <= sinal_1; <= variavel_1; <= constant_1; variavel_2 variavel_3 variavel_4 := sinal_1; := variavel_1; := constant_1; -- atribuição do valor de um sinal em outro sinal -- atribuição do valor de uma variável em um sinal -- atribuição do valor de uma constante em um sinal -- atribuição do valor de um sinal em uma variável -- atribuição do valor de uma variável em outra variável -- atribuição do valor de uma constante em uma variável Observe a presença de delimitadores de atribuição diferentes! Descrição VHDL Descrição VHDL Tipos VHDL Tipos VHDL Tipos VHDL Tipos VHDL Tipos VHDL Tipos VHDL Definição de novos tipos VHDL permite a criação de novos tipos enumerados, físicos e compostos Criação de novo tipo pode facilitar a leitura de um código, atribuindo nomes específicos para determinadas condições Aqui será apresentada apenas uma introdução sobre o assunto Declaração de um tipo é feito a partir da palavra reservada TYPE Exemplo: TYPE estado IS (parado, inicio, seguindo_caminho, rotacionando, desviando_obstaculo) -- declaração do tipo SIGNAL x : estado := parado; -- objeto sinal empregando o tipo estado Operadores VHDL Operadores VHDL Operadores VHDL Operadores VHDL Operadores VHDL Operadores VHDL Exercícios Compilar e simular as descrições apresentadas nos 2 slides prévios! Comandos Concorrentes Básicos Comandos concorrentes são executados conjuntamente. Logo, a sequência como são apresentados no código é irrelevante Um atraso delta é empregado para o simulador avaliar as iterações resultantes dos comando concorrentes. O Atraso Delta Δ Ordem dos comandos no código não deve interferir no resultado final da simulação O simulador necessita de um atraso interno, denominado Δ, para coordenação da avaliação de eventos concorrentes Para todos os comandos ativados, o resultado é transferido 1Δ após A nova condição pode ativar novos comandos, e o processo se repete por sucessivas iterações até atingir uma condição estável Comandos Concorrentes Básicos O Atraso Delta Δ Observe que em uma linguagem sequencial, o comando da linha 9 deveria ser apresentado antes do comando da linha 8! 1 | ENTITY sig_tes0 2 | PORT( sa : 3 | sb, sc : 4 | END sig_tes0; 5 | 6 | ARCHITECTURE teste 7 | BEGIN 8 | sc <= sb; 9 | sb <= sa; 10 | END teste; IS IN BUFFER OF BIT; BIT); sig_tes0 IS Comandos Concorrentes Básicos O Atraso Delta Δ Simulador Comportamento real Comandos Concorrentes Básicos O Atraso Delta Δ – condição instável Os simuladores normalmente limitam o número máximo de iterações e abortam a simulação! Comandos Concorrentes Básicos Atribuição de valor a um sinal Pode ocorrer tanto em regiões de código concorrente quanto sequencial Quando a atribuição ocorre em região concorrente, a ordem dos comandos é irrelevante A atribuição emprega o delimitador “<=“ A informação pode ser originada de um outro sinal ou expressão VHDL é rigorosa com relação a operações envolvendo tipos diferentes, não permitindo transferência de valor entre objetos nesse caso Comandos Concorrentes Básicos Atribuição de valor a um sinal Exemplo: MUX (Circuito de Seleção) Comandos Concorrentes Básicos Atribuição de valor a um sinal Comandos Concorrentes Básicos Atribuição de valor a um sinal Comandos Concorrentes Básicos Construção WHEN ELSE Comandos Concorrentes Básicos Construção WHEN ELSE s1_s0 <= s1 & s0; Comandos Concorrentes Básicos Construção WITH SELECT Comandos Concorrentes Básicos Construção WITH SELECT Comandos Concorrentes Básicos WHEN ELSE versus WITH SELECT Na construção WHEN ELSE a ordem de apresentação das condições indica a precedência na execução Primeira condição tem prioridade máxima e a última mínima Na construção WITH SELECT todas as condições possuem igual prioridade Tais diferenças podem ser aproveitadas pelo projetista para obter circuitos mais eficientes e descrições mais sucintas O exercício a seguir ilustra o caso onde a construção WHEN ELSE leva vantagem sobre a construção WITH SELECT Exercícios 1 2 3 4 5 6 7 8 9 10 11 12 | ENTITY pr_cod | PORT( p : | c : | END pr_cod; | | ARCHITECTURE | BEGIN | c <= “11” WHEN | “10” WHEN | “01” WHEN | “00”; | END teste1; 1 2 3 4 5 6 7 8 9 10 11 12 13 | ENTITY pr_cod | PORT( p : | c : | END pr_cod; | | ARCHITECTURE | BEGIN | WITH p SELECT | c <= “11” WHEN | “10” WHEN | “01” WHEN | “00” WHEN | END teste2; Exercícios IS IN OUT BIT_VECTOR(3 DOWNTO 1); BIT_VECTOR(1 DOWNTO 0)); teste1 OF pr_cod p(3) = ‘1’ p(2) = ‘1’ p(1) = ‘1’ ELSE ELSE ELSE ----- IS IN OUT teste2 1 0 0 0 1 0 0 IS -- p3 p2 p1 c1 c0 1 1 1 0 1 0 1 0 0 0 BIT_VECTOR(3 DOWNTO 1); BIT_VECTOR(1 DOWNTO 0)); OF “111”|”110”|”101”|”100”, “011”|”010” , “001”, “000”; pr_cod ----- IS p3 p2 p1 c1 1 1 0 1 1 0 0 1 0 0 0 0 0 c0 1 0 1 0 Comandos Concorrentes Básicos Criação de latch com as construções WHEN ELSE e WITH SELECT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ENTITY latch IS | PORT( enb, d1, d2, d3 : IN | q1, q2, q3, : BUFFER | END latch; | | ARCHITECTURE funcionamento | BEGIN | q1 <= d1 WHEN enb = ‘1’ ELSE | q1; | q2 <= d2 WHEN enb = ‘1’; | WITH enb SELECT | q3 <= d3 WHEN ‘1’; | q3 WHEN ‘0’; | END funcionamento; BIT; BIT); OF latch IS