Fundamentos de Sistemas Digitais 23/abril/2019 Introdução à Linguagem VHDL profs. Alexandre M. Amory e Fernando G. Moraes 1
Referências Sugiro estudarem nesta ordem de preferência: Vahid, Cap 9 Ignorar verilog e SystemC Bem didático! um pouco incompleto! Free Range VHDL Até sec 4.3, mais completo D'AMORE, Roberto. VHDL: Descrição e Síntese de Circuitos Digitais. Rio de Janeiro: LTC, 2005. 259 p. PEDRONI, Volnei A. Eletrônica Digital Moderna e VHDL. Elsevier Ltda. Editora, Rio de Janeiro, RJ: 2010. 619 p. Cap 19 Floyd. A Parte de VHDL está espalhada no livro, o que pode ser um pouco confuso. 2
ATENÇÃO Não se aprende alguma linguagem : Escutando alguém explicar Somente lendo livros Aprende praticando Exercício EXTRA-CLASSE é FUNDAMENTAL! Façam exercícios sugeridos e procurem outros nos livros indicados 3
Qual é o problema do esquemático?!?!? 4
INTERFACE EXTERNA: entity Entidade Especifica somente a interface entre o hardware e o ambiente Não contém definição do comportamento ou da estrutura internos A B Sum Carry Código VHDL da entidade: 5
Arquitetura COMPORTAMENTO : architecture Especifica o comportamento e/ou a estrutura internos da entity Deve ser associada a uma entity específica Uma entity pode ter associada a si várias architecture (representando diferentes formas de implementar um mesmo módulo) Código VHDL da arquitetura: Tabela Verdade A B Sum Carry 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 6
Biblioteca 7
Exemplo de Descrição VHDL Na prática não precisa de um par entidadearquitetura para uma and and é comando primitivo 8
Expressões Lógicas Operadores nativos de VHDL: Operações lógicas: and, or, nand, nor, xor, not Operações relacionais: =, /=, <, <=, >, >= Operações aritméticas: - (unária), abs Operações aritméticas: +, - Operações aritméticas: *, / Operações aritméticas: mod, rem, ** Concatenação: & Menor PRIORIDADE Maior Questão: o que a seguinte linha de VHDL realiza? X <= A <= B 9
Uso de hierarquia: instanciação (1/3) A B F Y A X T G U S1 M N I Y F Y B X T H U S2 Módulos compostos por sub-módulos (instâncias) conectados por sinais Na Figura acima, tem-se o módulo F (entity desenhada à esquerda), com entradas A e B e saída Y. A architecture de F desenhada como sendo composta pelos módulos G,H,I e pelos sinais internos s1 e s2. Note-se que G e H possuem a mesma entity (entradas X, T, e saída U), representando (G e H) duas instâncias distintas de um mesmo módulo de hardware. Em VHDL: Instâncias são denominadas component (componentes, com declaração opcional) Fios de interconexão: signal (sinais de um determinado tipo, tal como bit, integer, etc.) Para criar relação entre sinais e conectores das instâncias: comando port map 10
Descrevendo circuitos lógicos com hierarquia (2/3) Declaração da Interface Externa clock bit_0 Tflip_flop CK Q contador ff0 q0 inv inversor A Y inv_ff0 bit_1 Tflip_flop CK Q ff1 q1 Instanciações de módulos (lê-se pino em sinal ) ATENÇÃO AOS SINAIS INTERNOS! 11
Ambiente de Verificação Testbench Geração de estímulos e Captura de saídas Circuito (RTL) Resultados Comparação Resultados esperados 12
Uma forma simples de testar o projeto: testbenches Na sua forma mais simples, um testbench consiste em um ou mais processos geradores de estímulos e uma instância do projeto que se quer testar O testbench é construído como um módulo VHDL que não contém portas de entrada/saída. Ou seja, trata-se de um sistema fechado, ou autônomo Simulação TESTBENCH GERADOR DE ESTÍMULOS A D A Y B PROJETO Z Z T 13
Exemplo de Testbench para o Somador 14
Exemplo de Simulação da Descrição 0 0 0 0 1 0 1 0 0 1 1 0 aa <= '0', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns; bb <= '0', '1' after 20 ns; aa fio ligado no pino A bb fio ligado no pino B soma - fio ligado no pino Sum vaium fio ligado no pino Carry 15
TestBench para a porta E 16
Exercício: VHDL à Porta Lógica 17
Solução: VHDL à Porta Lógica * Free range VHDL, pg 31 18
Ordem das atribuições (<=) é relevante? VHDL é uma linguagem paralela, a ordem das atribuições (processos, blocos) não é relevante. O erro mais comum cometido por alguém é tentar programar em VHDL como se fosse programar uma linguagem de alto nível (HAVA, C). Linguagens de alto nível são sequenciais por natureza; VHDL não é * Free range VHDL, pg 5 19
Expressão Booleana à VHDL * Free range VHDL, pg 36 20
Expressão Booleana à VHDL * Free range VHDL, pg 36 21
Expressão Booleana à VHDL * Free range VHDL, pg 37 22
Exercícios Dados os esquemáticos abaixo, escreva o VHDL correspondente. 23
Faça um Testbench para este Módulo * Free range VHDL, pg 36 24
Testbench com geração exaustiva de estímulos 0 1 2 3 4 5 6 7 25
Está correta a simulação? 0 1 2 3 4 5 6 7 F = L. M. N + L.M = (001, 110, 111) = (1, 6, 7) Ou seja, a implementação está correta pois F3 está em 1 apenas nas condições especificadas pela função. 26