VERILOG. Alex Vidigal Bastos

Documentos relacionados
1. Objetivos: Familiarizar o aluno com o uso do ambiente de desenvolvimento da Linguagem Verilog. Familiarizar o aluno com a linguagem Verilog.

Livro texto: VHDL- Descrição e Síntese de Circuitos Digitais Roberto D Amore Editora LTC

Verilog HDL Introduzida em 1985 pela Gateway Design System Corporation Após 1990, passou a ser de domínio público, e em 1995 passou a ser padrão IEEE

Gustavo G. Parma. Objetivos: O aluno deverá ser capaz de compreender os conceitos básicos de VHDL.

DISPOSITIVOS LÓGICOS PROGRAMÁVEIS - DLP. 10/03/2017 Prof. Alexandre - ELP1DLP1 / DEE

FPGA & VHDL. Tutorial

Introdução à Linguagem VHDL

DISPOSITIVOS LÓGICOS PROGRAMÁVEIS - DLP. 18/04/2016 Prof. Alexandre - ELP1DLP1 / DEE

Fundamentos de Sistemas Digitais. Lógica Sequencial. Prof. Dr. Alexandre M. Amory Prof. Dr Edson I. Moreno

FPGA & VHDL. Tutorial Aula 1. Computação Digital

Introdução. VHDL: VHSIC Hardware Description Language. Origem: VHSIC: Very High Speed Integrated Circuits. Departamento de Defesa EUA

Introdução à Linguagem VHDL

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 02

Descrição e Projeto de Circuitos Utilizando VHDL

low): Descreve o que o sistema deve fazer utilizando expressões lógicas.

Circuitos sequenciais elementares

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

NOTAS DE AULA NE7720 SISTEMAS DIGITAIS - II AULA

Circuitos sequenciais elementares

Introdução ao VHDL. Circuitos Lógicos. DCC-IM/UFRJ Prof. Gabriel P. Silva. Original por Ayman Wahba

Prof. Leonardo Augusto Casillo

Projeto com Linguagens de Descrição de Hardware

Compilador de LP3 para C3E e P3

Ambiente de desenvolvimento

Descreva em VHDL, simule no simulador logico e sintetize usando uma ferramenta de CAD para FPGA :

Introdução à linguagem C++

Registradores. Circuitos Lógicos. DCC-IM/UFRJ Prof. Gabriel P. Silva

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Tópicos Especiais 2 Capítulo 3 Introdução ao VHDL, sintaxe básica, tipo de dados e atribuições

Tópicos em Sistemas Embarcados. Esterel

Aula Expositiva 03. DCC 001 Programação de Computadores 2 o Semestre de 2011 Prof. Osvaldo Carvalho DCC

Linguagens de descrição de hardware. Modelação de um circuito (digital)

Organização e Arquitetura de Computadores II

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Aula 7 SISTEMAS DIGITAIS. Linguagem de Descrição de Hardware VHDL Maquinas de Estados. Prof. Fernanda Gusmão de Lima Kastensmidt

12/11/13. Obje%vos do laboratório. SST20707 Síntese de Sistemas de Telecomunicações. Síntese de máquinas de estado (FSM) Finite State Machine (FSM)

Sistemas de Numeração. Sistemas de Numeração. Sistemas de Numeração. RUIDO em Sistemas Computacionais. Arquiteturas de Computadores

LABORG. VHDL Máquina de estados finitos

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Calculadora Simples em VHDL

Uma Introdução às Linguagens de Descrição de Hardware

4. Estruturas Fundamentais de Programação em C

ENGC40 - Eletrônica Digital

EPUSP PCS 3335/3635 Laboratório Digital. Circuito em VHDL

INTRODUÇÃO AO ARDUINO DUE, CANAL DIGITAL, FUNÇÃO DELAY

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Exercícios de Fixação

UFJF FABRICIO CAMPOS

Modelação de máquinas de estados

Funções de Lógica Combinacional

Linguagem de Programação C

TÉCNICO DE INFORMÁTICA - SISTEMAS

Arquitectura de Computadores LEEC/MEEC (2006/07 2º Sem.)

Modelagem de Sistemas com VHDL

ELETRÔNICA DIGITAL APLICADA Aula 8- Registradores de deslocamento como contadores

Como construir um compilador utilizando ferramentas Java

AULA TEÓRICA 3 Tema 2. Introdução a programação em Java (JVM, JDK)

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Sintaxe da linguagem Java

EPUSP PCS 3335 Laboratório Digital A. Introdução ao VHDL

Conceitos de Linguagens de Descrição de Hardware (Verilog, VHDL) Alex Vidigal Bastos

Revisão: Projeto de Processadores em VHDL

Lab 3. Timing Timing Constraints Simulação

FSM em VHDL e Verificação Funcional. CMP de junho de 2006

PSI-3451 Projeto de CI Lógicos Integrados. Aula 9- Atividade de Aula com Memória e FIFO

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Introdução à Computação MAC0110

Conceitos Básicos Linguagem C

Linguagem de programação: Pascal

Projecto de Sistemas Digitais

Introdução à Ciência da Computação

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Introdução à Linguagem C

Diagramas Sintáticos

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Informática I. Aula 9. Aula 9-17/05/2006 1

Projetos de Sistemas Digitais com VHDL - Parte I

Linguagem de Montagem do NeanderX

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Eletrônica Digital para Instrumentação. Herman Lima Jr.

Aplicações: Conversão de Códigos e Motor de Passo. Prof. Adilson Gonzaga

Revisão: Projeto e síntese de Circuitos Digitais em FPGA

Projecto de Sistemas Digitais. Trabalho Prático 1

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Introdução à Programação

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Eletrônica Digital para Instrumentação

Transcrição:

VERILOG Alex Vidigal Bastos

Sumário Objetivos Introdução Hierarquia Estruturas de Modelagem

Objetivos Identificar os modelos de componentes do Verilog, incluindo módulos, instâncias e portas; Correta sintaxe para cada um dos modelos dos componentes do Verilog; Indicar as relações entre os diferentes modelos dos componentes do Verilog; Identificar e corrigir a sintaxe para as estruturas de modelagem que são componentes dos

Verilog Com as linguagens de descrição de hardware, o processo passou a ser como o de se desenvolver um software. Um exemplo seria: Especificação Design de Alto Nível Codificação Verificação / Testes Sintetização

Introdução Linguagens de descrição de hardware, ou HDL, são linguagens utilizadas para projetar hardware. Tal como o nome implica, um HDL também pode ser usado para descrever a funcionalidade do hardware, bem como a sua aplicação.

Introdução A principal característica de uma linguagem de descrição de hardware é que ele contém a capacidade para descrever a função de uma peça de hardware de forma independente da aplicação.

Introdução O grande avanço com HDL modernos foi o reconhecimento de que uma linguagem única pode ser utilizada para descrever a função do projeto e também para descrever a implementação. Isto permite que o processo de concepção inteira para ter lugar numa única linguagem, e, assim, uma representação única do projeto.

História

Hierarquia Verilog permite representar a hierarquia de um projeto. As estruturas de Verilog que constrõem a hierarquia são: Módulos; Portas;

Hierarquia Um modelo de Verilog é composto de módulos. Um módulo é a unidade básica do modelo, e pode ser composto de instâncias de outros módulos. Um módulo de que é composto de instâncias dos outros módulos é chamado um parent module, e as instâncias são chamadas parent children.

Hierarquia

Verilog - Exemplo

Verilog - Exemplo module and2 (a, b, y); input a, b; output y; assign y = a & b; endmodule

Linguagens de Descrição de Hardware - HDL Para quê precisamos de uma Linguagem de Descrição de Hardware? Modelar, Representar e simular hardware digital Concorrência Paralelismo Semântica para valores de sinais no tempo Construções e semântica especiais Transições (bordas) de valores de sinais Atrasos de propagação de sinais Verificação de condições temporais 14

VERILOG HDL A unidade básica o modulo Modulo (module) Descreve a funcionalidade do circuito Define terminais (pinos, portas) de entrada e saída Exemplo: Um computador Funcionalidade: Realizar operações programadas Portas de entrada/saída: conector para teclado, mouse, conector VGA, conector USB 15

Module Definição geral module module_name ( port_list ); port declarations; variable declaration; description of behavior endmodule Exemplo module HalfAdder (A, B, Sum, Carry); input A, B; output Sum, Carry; assign Sum = A ^ B; //^ denotes XOR assign Carry = A & B; // & denotes AND endmodule 16

Convenções Lexicais Comentários // comentário de uma linha só /* outra forma de comentário de uma linha */ /* inicio de comentário com múltiplas linhas todo texto é ignorado termina com a linha abaixo */ Números decimal, hexadecimal, octal, binário unsized decimal form size base form include underlines, +,- Cadeias de caracteres "Delimite usando aspas numa mesma linha" limitados a 1024 caracteres 17

Identifier A... Z a... z 0... 9 Underscore Convenções Lexicais (cont.) Strings são limitadas a 1024 caracteres Primeiro caractere de identificação não deve ser um dígito Operators: Verilog diferencia letras maiúsculos de minúsculos 18

Estilos de Descrição Estrutural: representa circuitos lógicos usando primitivas da linguagem Verilog Exemplo: not n1(sel_n, sel); and a1(sel_n, b, sel_b); and a2(sel_a, a, sel); or o1(out, sel_b, sel_a); b sel n1 a1 sel_b sel_n a o1 out a2 sel_a 19

Estilo de Descrição (cont.) Fluxo de dados: Representa sinais de saída em função de sinais de entrada Exemplo: assign out = (sel & a) (~sel & b); b sel sel_n sel_b out sel_a a 20

Estilo de Descrição (cont.) Comportamental: representa o comportamento na forma de um algoritmo Exemplo: if (select == 0) begin out = b; end else if (select == 1) begin out = a; end a b Black Box 2x1 MUX out select 21

Estilo de Descrição (cont.) RTL (Register Transfer Level): descreve o que acontece a cada transição ativa do sinal de relógio Exemplo: always @(posedge clock) begin end pisca = ~pisca; 22

Modelo estrutural Execução: Concorrente Formato (portas lógicas primitivas): and G2(Carry, A, B); Primeiro parâmetro (Carry) Output Outros parâmetros (A, B) - Inputs 23

Modelo de Fluxo de Dados Usa atribuição permanente para sinais Format: assign [ delay ] net = expression; Example: assign sum = a ^ b; delay : Atraso de propagação da expressão para o sinal Todas as atribuições permanentes executam simultaneamente A ordens das atribuições dentro do arquivo Verilog não tem efeito sobre a execução. 24

Modelo de Fluxo de Dados (cont.) Atraso Exemplo: assign #2 sum = a ^ b; #2 indica 2 unidades de tempo Sem especificação de atraso: 0 (default) Associação entre unidade de tempo e tempo simulado `timescale unidade de tempo/ precisão tempo Exemplo: `timescale 1 ns / 10 ps 1 unidade de tempo = 1 ns resolução é 10 ps (0.01 ns) 10.512 ns é interpretado como 10.51 ns 25

Modelo de Fluxo de Dados (cont.) Exemplo: `timescale 1ns/10ps module HalfAdder (A, B, Sum, Carry); input A, B; output Sum, Carry; assign #3 Sum = A ^ B; assign #6 Carry = A & B; endmodule 26

Modelo de Fluxo de Dados (cont.) 27

Exemplo: Modelo comportamental module mux_2x1(a, b, sel, out); input a, a, sel; output out; always @(a or b or sel) begin if (sel == 1) out = a; else out = b; end endmodule Sensitivity List 28

Modelo comportamental RTL (cont.) always statement : Sequência do bloco; Sequential Block: Todas as declarações dentro do bloco são executados sequencialmente; Quando é executado? Ocorrência de um evento na lista de sensibilidade; Evento: Mudança do valor lógico 29

Modelo comportamental RTL (cont.) - Declarações com um bloco seqüencial: Atribuições processuais - Atraso na Atribuições processuais Inter-Statement Delay Intra-Statement Delay 30

Modelo comportamental (cont.) Atraso entre atribuições: Exemplo: Sum = A ^ B; #2 Carry = A & B; Execução atrasada Atraso dentro de uma atribuição: Exemplo: Sum = A ^ B; Carry = #2 A & B; Atribuição atrasada 31

Existem dois: Construções Procedurais initial : Executa uma única vez no início da simulação, NÃO sintetizável always : Executa repetidamente, sintetizável Exemplo: initial begin Sum = 0; Carry = 0; end always @(A or B) begin Sum = A ^ B; Carry = A & B; end 32

Controle por evento Controle por evento Disparo do evento por transição (borda) Disparo do evento por nível Controle por evento de transição @ (posedge CLK) // transição positiva de CLK Curr_State = Next_state; Controle por evento de nível lógico @ (A or B) // mudança nos valores de A ou B Out = A & B; 33

Instruções de Laço Laços Repeat While For Laço repeat Exemplo: repeat (Count) sum = sum + 5; Se a condição é x or z ela é tratada como 0 34

Laço While Instruções de Laço (cont.) Exemplo: while (Count < 10) begin end sum = sum + 5; Count = Count +1; Se a condição é x or z ela é tratada como 0 Laço For Exemplo: for (Count = 0; Count < 10; Count = Count + 1) begin end sum = sum + 5; 35

Instruções Condicionais Formato: if (condition) procedural_statement else if (condition) procedural_statement else procedural_statement Exemplo: if (reset) Q = 0; else Q = D; 36

Instruções Condicionais (cont.) Instrução Case Exemplo 1: case (X) 2 b00: Y = A + B; 2 b01: Y = A B; 2 b10: Y = A / B; endcase Example 2: case (3 b101 << 2) 3 b100: A=B+C; 4 b0100: A=B C; 5 b10100: A=B/C; //This statement is executed endcase 37

Tipos de Dados Net Type: Wire wire [ msb : lsb ] wire1, wire2, Exemplo: wire Reset; // A 1-bit wire wire [6:0] Clear; // A 7-bit wire Register Type: Reg reg [ msb : lsb ] reg1, reg2, Exemplo: reg [ 3: 0 ] cla; // A 4-bit register reg cla; // A 1-bit register 38

Restrições sobre Tipos de Dados Fluxo de Dados e Modelagem Estrutural - Pode usar somente tipos de dados wire - Não pode usar tipo de dados reg Modelos de Comportamento - Pode usar somente tipos de dados reg (dentro das construções iniciais e always) - Não pode usar tipo de dados wire 39

Um array de registros Memórias reg [ msb : lsb ] memory1 [ upper : lower ]; Example reg [ 0 : 3 ] mem [ 0 : 63 ]; // Um array de 64-4bit de registradores reg mem [ 0 : 4 ]; // Um array de 5 1-bit registers 40

Diretivas de Compilação `define (Similar ao define em C) usado para definir parâmetros globais Example: `define BUS_WIDTH 16 reg [ `BUS_WIDTH - 1 : 0 ] System_Bus; `undef Remove a diretiva previamente definida Example: `define BUS_WIDTH 16 reg [ `BUS_WIDTH - 1 : 0 ] System_Bus; `undef BUS_WIDTH 41

Compiler Directives (cont.) `include usado para incluir outro arquivo Example `include./fulladder.v 42

Tarefas de Sistema Exibir as tarefas - $display : Mostra toda a lista no momento em que declaração é encontrada; $monitor : Sempre que há uma mudança em qualquer argumento, exibe toda a lista no final do passo de tempo; Tarefa de Controle de Simulação $finish : Faz o simulador sair; $stop : Suspende a simulação Time $time: dá o tempo da simulação; 43

Tipos de Conexões de portas Connection by Position parent_mod 44

Tipos de Conexões de portas (cont.) Connection by Name parent_mod 45

Conexões de Portas Vazias Se uma porta de entrada de um módulo instanciado estiver vazia, a porta está definida para um valor de z (alta impedância). module child_mod(in1, In2, Out1, Out2) module parent_mod(.) input In1; input In2; child_mod mod(a,,y1, Y2); output Out1; //Empty Input output Out2; endmodule //behavior relating In1 and In2 to Out1 endmodule Se uma porta de saída de um módulo instanciado é deixado vazio, a porta é considerado como não utilizada. module parent_mod(.) child_mod mod(a, B, Y1, ); //Empty Output endmodule 46

Bancada de Teste `timescale 1ns/100ps module Top; reg PA, PB; wire PSum, PCarry; HalfAdder G1(PA, PB, PSum, PCarry); initial begin: LABEL reg [2:0] i; for (i=0; i<4; i=i+1) begin {PA, PB} = i; #5 $display ( PA=%b PB=%b PSum=%b PCarry=%b, PA, PB, PSum, PCarry); end // for end // initial endmodule Test Bench Apply Inputs Design Module Observe Outputs 47

Bancada de Teste - Estímulo gerador Exemplo: uma sequência de valores; initial begin Clock = 0; #50 Clock = 1; #30 Clock = 0; #20 Clock = 1; end 48

Bancada de Teste Gerando Clock Sinais Repetitivos Signals (clock) Clock Solução Simples: wire Clock; assign #10 Clock = ~ Clock Cuidados: Iniciar valores de clock (wire data type) = z ~z = x and ~x = x 49

Bancada de Teste Gerando Clock Inicializar o sinal de clock initial begin Clock = 0; end Cuidado: Clock is of data type wire, cannot be used in an initial statement Solução: reg Clock; initial begin Clock = 0; end always begin #10 Clock = ~ Clock; end SEMPRE loop pode ser usado para gerar clock 50

Perguntas?