Projecto de Sistemas Digitais

Documentos relacionados
Testbench. modelo não sintetizável (testbench) circuito a fabricar. modelo sintetizável (vai ser um circuito digital) Verilog

Linguagens de descrição de hardware. Modelação de um circuito (digital) com HDL. fluxo de projecto seguindo uma metodologia top-down

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

Sistemas Digitais. Linguagem Verilog. Monitoria SD Daniel Alexandro/Reniê Delgado/Vanessa Ogg. Editado por (DARA)

Circuitos combinatórios. (Revisão)

Modelação de máquinas de estados

Treinamento em Projeto de Sistemas Digitais

Xilinx ISE. O projecto

Módulo 4 Introdução ao VHDL

FPGA & VHDL. Tutorial

VHDL Circuitos Combinacionais

VERILOG. Alex Vidigal Bastos

VHDL. Descrição e Projeto de Circuitos Utilizando VHDL

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

Fundamentos de sistemas digitais. Test-bench. prof. Dr. Edson Ifarraguirre Moreno

1 REPRESENTAÇÃO DIGITAL DE INFORMAÇÃO Bases de Numeração Representação de Números em Base 2 5

Aula 2 Semântica de VHDL

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

Introdução à Linguagem VHDL

Introdução à Linguagem VHDL

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

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

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

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

Introdução a Sistemas Digitais

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

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

Os sistemas combinacionais a saída depende exclusivamente das condições das entradas, portanto o sistema não possui memória interna.

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

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

CURSO BÁSICO DE VERILOG

Sistemas Digitais. PALs Sequenciais Parâmetros Temporais em PALs Sequenciais ABEL Registos Contadores Registos de Deslocamento ( Shift Registers )

Exercícios de Fixação

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I. Introdução ao VHDL. César A. M. Marcon

Descrição por fluxo de dados (Data-Flow): Descreve o que o sistema deve fazer utilizando expressões lógicas.

Circuitos sequenciais Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture

SISTEMAS DIGITAIS MEEC de Janeiro de 2014, 11:30

Projeto com Linguagens de Descrição de Hardware

Introdução à Linguagem VHDL

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

Funções de Lógica Combinacional

Primeiro Trabalho de Sistemas Digitais

Circuitos sequenciais

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

Projecto de Sistemas Digitais

Descrição e Projeto de Circuitos Utilizando VHDL

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

Laboratório 6 (Trabalho com Relatório) Semana 25 de Outubro a 29 de Outubro

LABORG. VHDL Máquina de estados finitos

Sistemas Digitais (SD) Lógica Programável

Representação de Informação. 1. Converta cada um dos seguintes números para o seu equivalente decimal: a)

SISTEMAS DIGITAIS MEEC de Janeiro de 2014, 11:30

Análise de Circuitos Sequënciais Máquinas de Mealy e Moore

Exercícios Referentes à Prova P1

Revisão: Projeto de Processadores em VHDL

Sistemas Digitais (SD) Lógica Programável

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)

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

SISTEMAS DIGITAIS (SD)

PSI-3451 Projeto de CI Lógicos Integrados. Aula 4

VHDL - VHSIC Hardware Description Language. Exemplo prático. Raiz Quadrada

Flip-Flops, Registros e Contadores

Introdução VHDL Parte 4 - Testbench

Prof. Leonardo Augusto Casillo

Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Curso de Graduação em Ciências da Computação

Transcrição:

Projecto de Sistemas Digitais Linguagens de descrição de hardware -Verilog Setembro de 27 António José Duarte Araújo

Linguagens de descrição de hardware HDL - Hardware Description Language HDL linguagem de programação linguagem de programação (software): pode ser traduzida em instruções máquina e executada num computador HDL: linguagem com suporte semântico e sintáctico para modelação do comportamento temporal e estrutura espacial do hardware Modelação de um circuito digital com uma HDL descrições comportamentais permitem nível elevado de abstracção metodologia top-down: ferramentas de síntese automática representação textual: portabilidade, edição e documentação AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 2 Linguagens de descrição de hardware Modelação de um circuito digital com uma HDL a favor do esquemático: uma figura diz mais do que mil palavras um esquema transmite melhor a ideia estrutural ferramentas gráficas front- produzem descrições em HDLs editores de esquemático: netlist em HDL (estrutural, gate-level ou RTL) editores de diagramas de estados: descrições sintetizáveis construção de um modelo: duas perspectivas descrever o seu funcionamento apenas para simulação construir uma descrição sintetizável um modelo sintetizável deve descrever bem o seu funcionamento subsets das linguagens e regras de modelação podem deper das ferramentas AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 3

Modelação em HDLs: sintetizável/não sintetizável Ferramentas de síntese automática inferem uma estrutura o modelo (comportamental ou estrutural) vai ser hardware regras, restrições e recomações das ferramentas de síntese como é interpretada e traduzida a descrição em HDL simulação e implementação devem concordar construções específicas da tecnologia de implementação Modelos não sintetizáveis não são traduzidos para hardware exemplos: definição de estímulos para simulação; monitorização de sinais modelam o comportamento de outros circuitos só para simulação circuito de relógio memórias ou CPUs circuitos de interface (por exemplo conversores A/D ou D/A) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 4 Modelação em HDLs: recomações gerais Antes de iniciar a construção do modelo definir a arquitectura e estruturar o projecto (particionamento) ferramentas de síntese não processam bem circuitos muito grandes! Problemas de optimização são NP-completos Escrever o código de modo a reflectir a arquitectura estruturado em módulos e funções, ter em mente a reutilização favorecer a legibilidade: nomes, comentários, parêntesis, parâmetros Garantir a precisão da simulação deve traduzir fielmente o comportamento do hardware gerado modelar correctamente o comportamento das partes não sintetizáveis AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 5

VHDL e Verilog: comparação Capacidade de modelação semelhante para modelos estruturais VHDL oferece melhor suporte para modelos abstractos e modelos de atrasos Verilog tem melhores construções para modelar ao nível lógico e primitivas de bibliotecas de ASICs e FPGAs Tipos de dados VHDL suporta tipos de dados abstractos criados pelo utilizador em Verilog os tipos são muito simples e mais próximos do hardware (wire e reg) Aprizagem VHDL é fortemente tipada, menos intuitiva, mais verbosa (baseada em ADA) Verilog é mais simples e menos verbosa (baseada em C) Parametrização VHDL tem construções para parametrizar número de bits, replicar estruturas e configurar modelos Verilog suporta apenas modelos com parâmetros, instanciação com redefinição de parâmetros AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 6 VHDL VHDL e Verilog: exemplo (comportamental) library IEEE; use IEEE.STD_Logic_64.all; entity MUX_2_ is port(s,a,b,s2,a2,b2,s3,a3,b3:in std_logic; Y,Y2,Y3:out std_logic); entity MUX_2_; architecture COND_DATA_FLOW of MUX_2_ is Y <= A when S= B; TWO_2 MUXES: process(s2,a2,b2,s3,a3,b3) Y2<=B2; if (S2= ) then Y2<=A2; if; if (S3= ) then Y3<=A3; Y3<=B3; if; process TWO_2 MUXES architecture COND_DATA_FLOW; Verilog module MUX_2_(S,A,B,Y, S2,A2,B2,Y2, S3,A3,B3,Y3); input S,A,B,S2,A2,B2,S3,A3,B3; output Y,Y2,Y3; reg Y2,Y3; assign Y=S?A:B; always @(S2 or A2 or B2 or S3 or A3 or B3) Y2=B2; if (S2) Y2=A2; if (S3) Y3=A3; Y3=B3; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 7

VHDL VHDL e Verilog: exemplo (estrutural) library IEEE; use IEEE.STD_Logic_64.all; entity HALF_ADDER is port(a,b:in std_logic; sum,carry:out std_logic); entity HALF_ADDER; architecture STRUCT of HALF_ADDER is component xor2 port(a,b:in std_logic; c:out std_logic); component; component and2 port(a,b:in std_logic; c:out std_logic); component; X: xor2 port map(a=>a,b=>b,c=>sum); A: and2 port map(a=>a,b=>b,c=>carry); STRUCT; Verilog module HALF_ADDER(a,b,sum,carry); input a,b; output sum,carry; xor X(sum,a,b); and A(carry,a,b); module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 8 Verilog HDL Modelação e simulação de circuitos digitais Suporta modelação em diferentes níveis de abstracção Possibilidade de inferir automaticamente hardware com outras ferramentas Largamente difundida na comunidade de projecto de circuitos e sistemas digitais Suporta organização hierárquica com uma sintaxe simples e com fortes semelhanças à linguagem C Permite que o projectista descreva o que o hardware deve fazer sem o implementar, i.e., permite separar comportamento e implementação AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 9

Exemplo de um modelo em Verilog mux2_ Entradas Saída O(D, D, S) = D S + D S AND_2 OR_ AND_ AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog Elementos do modelo exemplificado comentário nome do bloco entradas saídas ligações ( fios ) primitivas lógicas interface implementação nomes das instâncias saída entradas operador de negação AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog

Formas de modelação de circuitos Estrutural modelo descrito pela interligação de blocos que compõem o circuito (como no exemplo anterior, mux2_) Comportamental modelo descrito pelo comportamento funcional que o circuito deve possuir (como nos exemplos seguintes) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 2 Exemplos de modelos comportamentais O mesmo mux de 2 para, agora com: assign always próximo da equação próximo do algoritmo AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 3

Modelação de circuitos combinacionais com assign exp traduz uma atribuição contínua: a expressão exp é permanentemente avaliada e o resultado é continuamente atribuído a O A expressão exp pode conter operadores aritméticos, booleanos, relacionais, lógicos (bit a bit), etc. Consiste na forma mais simples e natural de modelar circuitos combinacionais Introduz maior abstracção que a abordagem estrutural baseada na utilização de portas lógicas AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 4 Modelação de circuitos combinacionais com always lista de sensibilidades consiste num bloco de instruções que é executado sempre que qualquer sinal presente na lista de sensibilidades sofra alteração do valor lógico Num bloco always qualquer atribuição deve ser feita a variáveis declaradas como reg (conceito de segurar o valor lógico) Um bloco always pode conter estruturas de controlo como as usadas num programa (ciclos for, while e repeat, if- e case ) Construção essencial em que se fundamenta a modelação comportamental AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 5

Modelação de circuitos combinacionais com always Formas da lista de sensibilidades (admissíveis no Verilog-2) (equivale a indicar na lista todos os sinais lidos no bloco always ) Que acontece se um sinal não estiver na lista de sensibilidades? O simulador ignora qualquer transição desse sinal, pelo que, pode produzir erros nas saídas que dele depem AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 6 Algumas primitivas lógicas inv a na o x no xn Podem ser usadas com mais entradas Primeiro sinal é a saída e os restantes são as entradas São os blocos básicos (primitivas) de uma descrição estrutural AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 7

Constantes numéricas 8 b_ o underscore éignorado formato de representação (d, b, o, h) decimal que indica o número de bits Exemplos: 4 d4 6 hff_ Por omissão, uma constante é um decimal (compl. para 2) com 32 bits (se atribuída a sinais com menos bits é truncada a parte mais significativa!) reg [3:] a; initial a = 28; // 28= -> a fica com =2 AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 8 Tipos de operadores Aritméticos Lógicos Relacionais Bitwise Redução Deslocamento Outros Nos exemplos seguintes: A = 4 b, B = 4 b, C = 4 b e D = 4 b AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 9

Operadores aritméticos símbolo + adição operação exemplo A+B - * / % ** subtracção multiplicação divisão (quociente) divisão (resto) potência A-B A*B C/B C%B B**B AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 2 Operadores lógicos símbolo! && operação negação e ou exemplos!a,!d A&&B, A&&D A B, A D AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 2

Operadores relacionais símbolo operação exemplos ==!= > < >= <= igualdade desigualdade maior que menor que maior ou igual a menor ou igual a A==B B!=D A>B, B>C A<C, B<D A>=C, B>=B B<=C, B<=D AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 22 Operadores bitwise símbolo operação exemplo ~ & ^ ~^ negação e ou ou exclusivo não ou exclusivo ~A A&C A C A^C A~^C AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 23

Operadores de redução símbolo operação exemplos & ~ & ~ ^ ~^ e não e ou não ou ou exclusivo não ou exclusivo &A, &D ~ &A, ~ &D A, D ~ A, ~ D ^A, ^D ~^A, ~^D AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 24 Operadores de deslocamento símbolo operação exemplos >> << deslocamento para a direita deslocamento para a esquerda A>>, C>>2 A<<, C<<2 AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 25

Outros operadores símbolo { } operação concatenação exemplo {A,B} { { } } replicação {2{A}}? : condicional A==B? C : D AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 26 Projecto de um somador completo A B Ci Co S S = A + B + Ci Co = A B + B Ci + A Ci circuito lógico A B Ci S A B Co Ci S símbolo do full-adder Co AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 27

Projecto de um somador completo: Verilog Como verificar que um modelo realiza a função pretida? Elaboração de um testbench para o full-adder AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 28 Projecto de um somador completo: simulação AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 29

Projecto de um somador de 4 bits: especificação A 3 B 3 A 2 B 2 A B A B Co A Co S B Ci w A 3 Co S B Ci w A 2 Co S B Ci w A Co S B Ci Ci S 3 S 2 S S ou, mais simplesmente AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 3 Projecto de um somador de 4 bits: verificação funcional Testbench: instância o módulo a testar (adder4) o circuito a testar estímulos de simulação `timescale ns/ps módulo sem interface module adder4_testbench; reg [3:] a, b; reg cin; registos (seguram valores!) wire [3:] s; fios (propagam valores!) wire cout; adder4 DeviceUnderTest(a, b, cin, s, cout); // adder4 DeviceUnderTest(.Ci(cin),.Co(cout),.A(a),.B(b),.S(s)); initial quando o simulador inicia $monitor($time, ci=%b, a=%d, b=%d, s=%d, co=%b, cin, a, b, s, cout); cin=; a=2; b=4; #3 b=2; #3 espera 3 unidades de tempo (3ns) cin=; #3 a=4'b; b=4'b; #3 $stop; controlo do simulador (pára) module sinais ligados por posição sinais ligados por nome monitor de sinais AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 3

Projecto de um somador de 4 bits: resultados da simulação (texto) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 32 Projecto de um somador de 4 bits: resultados da simulação (formas de onda) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 33

Projecto de um somador de 4 bits: verificação funcional (cont) Verificação exaustiva do somador de 4 bits e se fosse de 32 bits? (com ns por vector seriam necessários 7 anos!) module adder4_testbench; reg [3:] a, b; reg cin; wire [3:] s; wire cout; adder4 DeviceUnderTest(a, b, cin, s, cout); initial $monitor($time, ci=%b, a=%d, b=%d, s=%d, co=%b", cin, a, b, s, cout); cin = ; $display( Verificacao com carry-in = %b, cin); for(a=;a<5;a=a+) for(b=;b<5;b=b+) #4; cin = ; $display( Verificacao com carry-in = %b, cin); for(a=;a<5;a=a+) for(b=;b<5;b=b+) #4; $display( Fim da simulação ); $stop; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 34 Declaração do interface Um módulo pode não ter interface em módulos usados para teste de outros - testbenches module myadder_testbench; // sem entradas nem saídas Declaração de portos de interface unidireccionais: input [7:] din_a, din_b; // din_a, din_b são entradas de 8 bits input clock, reset; output [:8] res; bidireccionais: inout [7:] databus; // onde o MSB é din_a[7] e o LSB é din_a[] // clock, reset são entradas de bit // result é uma saída de 9 bits, onde o // MSB é res[] e o LSB é res[8] // databus é um sinal bidireccional de 8 bits: // pode forçar um nível lógico ou receber um // sinal do exterior Todos os sinais declarados como portos de entrada/saída são do tipo wire (fio) fios (wires) apenas propagam valores lógicos entre uma origem e um destino as saídas que seguram valores lógicos devem ser declaradas como sinais do tipo reg Valores lógicos:,, x (desconhecido) e z (estado de alta impedância) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 35

Declaração de sinais Sinais do tipo wire representam fios ou barramentos (vários bits) servem para transportar um valor lógico desde uma origem que o produz um identificador não declarado é considerado um wire de bit wire en_clock, sel_reg; // fios simples (um bit) wire [5:] opr_a, opr_b; // dois barramentos de 6 bits Sinais do tipo reg representam registos (um ou mais bits) seguram valores lógicos reg clock, reset; // registos de bit reg [7:] Ra, Rb; // registos de 8 bits reg [5:] regfile[:3]; // vector de 32 registos com 6 bits cada Campos de vectores de bits Rb; opr_a[5:8]; Rb[3]; regfile[6]; // todo o registo Rb de 8 bits // os 8 bits mais significativos de opr_a // o bit 3 do registo Rb // o elemento no ereço 6 do vector regfile; AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 36 Parametrização Aumentar a legibilidade // Codificaçao de estados: parameter INIT = 2 b; parameter S=2 b, S=2 b; if (state==init) //if (state==2 b) nextstate=s; Tornar a descrição genérica module FCP(a, b, out); // Largura do operando parameter WIDTH = 32; input [WIDTH-:] a, b; module my_multiply(); parameter size=6, delay=5; module my_multiply #(8,2) mult(); valores por omissão valores atribuídos à instância mult AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 37

Tempos de propagação Não suportados em modelos sintetizáveis Na instanciação de primitivas são especificados com o operador # and #3 and_(o, x, x2, x3; // tp = 3 unidades de tempo and #(3,5) and_2(out2, a, b); // tplh=3, tphl=5 bufif #(3,2,5) buf_(out, in, en) // tplh=3, tphl=2, tphiz=5 Para cada tempo podem ser especificados valores min, typ e max and #(3:4:5) myand(out2, a, b); // tpmin=3, tptyp=4, tpmax=5 bufif #(:2:3,2:3:4,3:4:6) buf_(out, in, en) //atrasos min:typ:max O valor da unidade de tempo é definido pela directiva `timescale `timescale ns/ps // uma unidade=ns; precisão de simulação=.ns AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 38 Verilog system tasks Algumas funções internas do simulador (system tasks) $monitor() imprime um registo de texto formatado quando um sinal muda de estado a sintaxe é semelhante à função printf() da linguagem C num projecto só pode existir activo um monitor de sinais $time devolve o tempo actual do simulador (um inteiro) $display() quando invocado imprime um registo de texto formatado $stop interrompe a simulação mas pode ser retomada (breakpoint) $finish termina a execução do simulador (em alguns simuladores) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 39

Modelos comportamentais Um modelo comportamental é formado por: um ou mais processos que operam concorrentemente assign: blocos combinacionais always: blocos combinacionais, sequenciais ou síncronos Modelo de um full-adder (combinacional) o sinal s está ligado à expressão sempre que module full_adder_comp(a, b, cin, s, cout); input a, b, cin; output s, cout; reg cout; assign s = a ^ b ^ cin; always @( a or b or cin ) cout = (a & b) (a & cin) (b & cin); module modela blocos combinacionais operadores lógicos AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 4 Modelos comportamentais Modelo comportamental do somador de 4 bits sempre que module four_bit_adder_c(a, b, cin, s, cout); input [3:] a, b; input cin; output [3:] s; output cout; reg cout, s; reg [5:] ta, tb, ts; // registos temps. always @( a or b or cin or ta or tb or ts ) ta = { b, a, b }; tb = { b, b, cin }; ts = ta + tb; cout = ts[5]; s = ts[4:]; module concatenação de bits somador extração de resultados AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 4

Modelos comportamentais Estruturação em subrotinas task equivalente a um procedimento pode chamar-se a si próprio usando os mesmos registos locais function equivalente a uma função retorna um valor não pode conter instruções com temporizações ou eventos multiply(a,b,acc); task multiply input [5:] a, b; output [3:] prod; task if (testdf(d,d2)==2 b) function [:] testdf; input [:] Duab, Dvab; testdf=2 b; function AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 42 Circuitos síncronos O elemento mais simples: um flip-flop tipo D q segura um valor lógico module my_dff(clk, d, q); input clk, d; output q; reg q; always @( negedge clk ) q <= d; module modela um bloco síncrono com clk sempre que clk AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 43

Modelação de circuitos síncronos Ex: acumulador de 8 bits reg_sum segura um valor lógico processo síncrono com clk module acc(clk, reset, a, reg_sum); input clk, reset; input [7:] a; output [7:] reg_sum; reg [7:] reg_sum; always @( negedge clk ) if ( reset ) reg_sum <= 8 d; reg_sum <= a + reg_sum; module sempre que clk reset síncrono com clk reset circuito inferido a D Q reg_sum clk AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 44 Contador up/down processo combinacional module updown_counter(clk, reset, enable, down, dout, _count); input clk, reset, enable, down; output [3:] dout; reg [3:] dout; output _count; processo síncrono com o flanco ascente de clk e reset (assíncrono) a avaliação do sinal de reset tem de ocorrer no início do bloco assign _count = enable & (down? (dout==) : (dout==5) ); always @( posedge clk or posedge reset) if ( reset ) dout <= if ( enable ) if ( down ) dout <= dout ; dout <= dout + ; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 45

Testbench para o contador up/down `timescale ns/ps module updown_counter_testbench; reg clk, reset, enable, down; wire [3:] dout; wire _count; instância do contador updown_counter count_(clk, reset, enable, down, dout, _count); initial down = ; reset = ; enable = ; #2 reset = ; // apply reset #6 reset = ; // release reset #3 // count up 3ns enable = ; #4 // disable counter down = ; # // count down enable = ; #3 // enable counter, wait 3ns $stop; // stop simulation initial clk = b; always #5 clk = ~clk; // ns clock period module estímulos sinal de relógio AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 46 Projecto de um contador de 4 bits Modularidade e hierarquia de counter estruturado em 3 módulos: c6, Dff e clockgen clockgen produz o sinal de relógio contador c6 usa instâncias do módulo Dff (flip-flops tipo D) hierarquia do modelo: counter c6 clockgen Dff Dff Dff Dff AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 47

Projecto de um contador de 4 bits Modelo do contador c6 module c6(value, clock, fifteen, ten); input clock; output [3:] value; output fifteen, ten; Dff D(value[], clock, ~value[]), D2(value[], clock, value[] ^ value[]), D3(value[2], clock, value[2] ^ &value[:]), D4(value[3], clock, value[3] ^ &value[2:]); assign fifteen = &value; assign ten = value[3] & ~value[2] & value[] & ~value[]; module vector de bits saídas de bit operadores lógicos saída ten vale quando value = AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 48 Projecto de um contador de 4 bits Modelo (comportamental) do flip-flop tipo D (Dff) module Dff(q, clock, d); input clock, d; output q; reg q; initial q = ; always @ (negedge clock) # q = d; q é reg porque segura um valor no início da simulação (t=) sempre que clock module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 49

Projecto de um contador de 4 bits Gerador de relógio (clockgen) module clockgen(clock); output clock; reg clock; initial #5 clock = ; always #5 clock = ~clock; para sempre sinal clock gerado: module 5 t= 5 5 unidades de tempo reais: timescale ns/ps arredondamento dos cálculos unidade de atraso AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 5 Projecto de um contador de 4 bits O circuito completo (módulo counter) module counter; wire [3:] count; wire clock, ten, fifteen; c6 contador( count, clock, fifteen, ten); clockgen clock( clock ); initial $monitor($time, Clk=%b, Count=%d, is_=%b, is_5=%b, clock, count, ten, fifteen); module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 5

Testbench modelo não sintetizável (testbench) clock reset memórias A/D e D/A interfaces ficheiros geração de estímulos circuito a fabricar análise de respostas registos de texto waveforms ficheiros simula o comportamento de dispositivos externos modelo sintetizável (vai ser um circuito digital) analisa respostas para verificar a correcção do modelo AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 52 Atribuições blocking/nonblocking Atribuições procedimentais (blocking) avaliadas em sequência a=in+in-acc; y=a+b; z=y+a; Admitindo que in=4,in=4,acc= a=4, b=4, y=8 a = 4+4- = 7; y = 7+4 = ; z = +7 = 8; Atribuições non-blocking avaliadas em paralelo a<=in+in-acc; y<=a+b; z<=y+a; a = 7; y = 4+4 = 8; z = 8+4 = 2; AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 53

Atribuições blocking/nonblocking module shiftreg(clk, rst, E, A); input clk, rst, E; output A; reg A, B, C, D; always @(posedge clk or posedge rst) if (rst) A=; B=; C=; D=; A=B; B=C; C=D; D=E; module D=E; C=D; B=C; A=B; A<=B; // D<=E; B<=C; // C<=D; C<=D; // B<=C; D<=E; // A<=B; AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 54 Atribuições blocking/nonblocking Quando usar a=b ou a<=b? em processos combinacionais podem-se usar os dois tipos em processos síncronos deve-se usar apenas non-blocking evita a ocorrência de race conditions que podem encravar o simulador always @(posedge clk) if ( dataready ) rdy = ; always @(posedge clk) if ( rdy ) reg = datain; ack = ; AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 55

Blocos sequenciais e paralelos // sequencial x = k; # y = a + b; #5 z = y * x; x = k; fork # y = a + b; #5 z = y * x; join inicia bloco paralelo avaliadas em paralelo termina bloco paralelo x y z 5 x y z 5 AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 56 Latches em blocos combinacionais Num modelo de um circuito combinacional as saídas devem ter um valor atribuído para todas as condições das entradas se esta condição não for satisfeita são criadas latches transparentes a ocorrência de latches num bloco que se pretia combinacional é geralmente fatal always @(a or b or sel) if ( sel ) y = a; y = b; um multiplexador 2 always @(a or b or sel) if ( sel ) y = a; uma latch transparente AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 57

Construções condicionais if (condition) statement statement2 case (expression) expr: statement; expr2: statement2; default: statement3; case; casez (z é don t care) casex (z e x são don t care) (expression)?(true):(false) if (a[2:]==3 b && cy) if (done && init) {out, play}=2 b; if (ready) out=2 b; play=; {out, play}=3 b; case (ir[7:4]) 4 b: 4 b: default: case casex (ir[7:4]) 4 bxx: 4 bxx: default: case acc=(ir[7:]==4 b)? : 255; AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 58 Ciclos for(start; _expr; update) statement; for(i=; i<8; i=i+) x[i] = x[i+]; while(condition) statement; repeat(fixed_loop_count) statement; while(i<8) i=i+; repeat() a[i]=a[i+]; i=i+; ; forever statement; forever # clock = ~clock; (têm utilização restrita em modelos sintetizáveis) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 59

Modelação de máquinas de estados FSM (Finite State Machine) sequência determinada de estados, sincronizada com relógio estrutura geral entradas saída (saídas Moore) saídas Mealy reset (síncrono) estado actual clock reset (assíncrono) saída próximo estado registo de estado saídas Moore próximo estado AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 6 Modelação de máquinas de estados Codificação de estados (feita manualmente) atribuição de padrões de bits a cada estado o tipo de codificação influencia dimensão do registo de estado complexidade dos circuitos lógicos combinacionais codificações mais usadas sequencial código Gray código Johnson one-hot AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 6

Modelação de máquinas de estados Mealy as saídas depem do estado corrente e das entradas o valor das saídas é associado às transições entre estados Moore i A i2/s2 i/s as saídas depem apenas do estado corrente o valor das saídas é associado aos estados C B condição de transição de estado valores das saídas i3 s3 D i4 i3 F s4 E s3 AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 62 Máquinas de estados: especificação Tabela de transição de estados entradas estado próximo saídas i i2 corrente estado Yme Ymo X (S) (S) X (S) (S) X (S) (S) X (S) (S2) X X (S2) (S) Diagrama de transição de estados Ymo X/ i i2/yme XX/ X/ X/ X/ i/yme saídas Mealy saídas Moore S Yme i/yme i2/yme S2 Ymo S Ymo i2/yme AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 63

Modelação de máquinas de estados em Verilog Ymo X/ i i2/yme XX/ X/ X/ Modelo incorrecto! Onde estão os erros? X/ faltade reset (síncrono e/ou assíncrono) todas as saídas são registadas Yme não é saída de Mealy não é definido o estado inicial falta o estado 2 b module FSM_mal(clock, i, i2, Yme, Ymo); input clock, i, i2; output Yme, Ymo; reg Yme, Ymo; reg [:] state; always @(posedge clock) case (state) 2 b: Ymo<=; if (i) state<=2 b; Yme<=; Yme<=; 2 b: Ymo<=; if (i2) state<=2 b; Yme<=; state<=2 b; Yme<=; 2 b: Ymo<=; state<=2 b; Yme<=; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 64 Modelação de máquinas de estados em Verilog Modelo correcto Ymo X/ i i2/yme XX/ X/ X/ X/ module FSM_bem(reset, clock, i, i2, Yme, Ymo); input reset, clock, i, i2; output Yme, Ymo; reg Yme, Ymo; reg [:] state, nextstate; always @(posedge clock) if (reset) state<=2 b; state<=nextstate; always @(state or i or i2) case (state) 2 b: nextstate=2 b; Ymo=; if (i) nextstate=2 b; Yme=; Yme=; 2 b: Ymo=; if (i2) nextstate=2 b; Yme=; nextstate=2 b; Yme=; 2 b: Ymo=; nextstate=2 b; Yme=; default: Ymo=; nextstate=2 b; Yme=; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 65

Modelação de máquinas de estados em Verilog Alternativa : separação da lógica do próximo estado das saídas (registo de estado) always @(state or i or i2) case (state) 2 b: if (i) nextstate=2 b; nextstate=2 b; 2 b: if (i2) nextstate=2 b; nextstate=2 b; 2 b: nextstate=2 b; default: nextstate=2 b; module always @(state or i or i2) case (state) 2 b: Ymo=; if (i) Yme=; Yme=; 2 b: Ymo=; if (i2) Yme=; Yme=; 2 b: Ymo=; Yme=; default: Ymo=; Yme=; module AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 66 Modelação de máquinas de estados em Verilog Alternativa 2: combinando estado corrente e próximo estado always @(posedge clock or negedge reset) if (!reset) state <= 2 b; case (state) 2 b: if (i) state<=2 b; state<=2 b; 2 b: if (i2) state<=2 b; state<=2 b; 2 b: state<=2 b; default: state<=2 b; module (saídas Ymo e Yme) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 67

Modelação de máquinas de estados em Verilog Alternativa 3: combinando estado corrente com próximo estado e modelando Ymo como saída síncrona always @(posedge clock or negedge reset) if (!reset) Ymo<=; state <= 2 b; case (state) 2 b: if (i) Ymo<=; state<=2 b; Ymo<=; state<=2 b; (saída Yme) AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 68