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

Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

  • Upload
    buidiep

  • View
    218

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

1

Projecto de Sistemas Digitais

Setembro de 2007António José Duarte Araújo

Linguagens de descrição de hardware - Verilog

Page 2: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

1

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 2

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 3

• 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-end 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 depender das ferramentas

Linguagens de descrição de hardware

Page 3: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

2

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 4

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 recomendaçõ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 5

Modelação em HDLs: recomendaçõ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

Page 4: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

3

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 6

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)

– Aprendizagem• 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 7

VHDL e Verilog: exemplo (comportamental)

library IEEE;use IEEE.STD_Logic_1164.all;entity MUX_2_1 isport(S1,A1,B1,S2,A2,B2,S3,A3,B3:in std_logic;

Y1,Y2,Y3:out std_logic);end entity MUX_2_1;

architecture COND_DATA_FLOW of MUX_2_1 isbeginY1 <= A1 when S1=‘1’ else B1;TWO_2_1_MUXES:process(S2,A2,B2,S3,A3,B3)begin

Y2<=B2;if (S2=‘1’) then

Y2<=A2;endif;if (S3=‘1’) then

Y3<=A3;else

Y3<=B3;endif;

end process TWO_2_1_MUXESend architecture COND_DATA_FLOW;

module MUX_2_1(S1,A1,B1,Y1,S2,A2,B2,Y2,S3,A3,B3,Y3);

input S1,A1,B1,S2,A2,B2,S3,A3,B3;output Y1,Y2,Y3;reg Y2,Y3;

assign Y1=S1?A1:B1;

always@(S2 or A2 or B2 or S3 or A3 or B3)begin

Y2=B2;if (S2)

Y2=A2;if (S3)

Y3=A3;else

Y3=B3;end

endmodule

VHDL Verilog

Page 5: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

4

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 8

VHDL e Verilog: exemplo (estrutural)

library IEEE;use IEEE.STD_Logic_1164.all;

entity HALF_ADDER isport(a,b:in std_logic;

sum,carry:out std_logic);end entity HALF_ADDER;

architecture STRUCT of HALF_ADDER is

component xor2port(a,b:in std_logic; c:out std_logic);

end component;

component and2port(a,b:in std_logic; c:out std_logic);

end component;

beginX1: xor2 port map(a=>a,b=>b,c=>sum);A1: and2 port map(a=>a,b=>b,c=>carry);

end STRUCT;

module HALF_ADDER(a,b,sum,carry);input a,b;output sum,carry;

xor X1(sum,a,b);and A1(carry,a,b);

endmodule

VHDL Verilog

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 9

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’

Page 6: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

5

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 10

Exemplo de um modelo em Verilog

Entradas Saída

O(D1, D0, S0) = D1·S0 + D0·S0

AND_1

AND_2

OR_1

mux2_1

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 11

Elementos do modelo exemplificado

interface

implementação

nome do blocoentradas

saídas

primitivaslógicas

nomes dasinstâncias

saídaentradas

ligações (“fios”)

comentário

operador de negação

Page 7: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

6

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 12

Formas de modelação de circuitos

• Estruturalmodelo descrito pela interligação de blocos que compõem o circuito (como no exemplo anterior, mux2_1)

• Comportamentalmodelo descrito pelo comportamento funcional que o circuito deve possuir (como nos exemplos seguintes)

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 13

Exemplos de modelos comportamentais

‘assign’ ‘always’

O mesmo mux de 2 para 1, agora com:

próximo da ‘equação’ próximo do ‘algoritmo’

Page 8: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

7

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 14

Modelação de circuitos combinacionais com ‘assign’

• 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

traduz uma atribuição contínua: a expressão exp épermanentemente avaliada e o resultado écontinuamente atribuído a O

exp

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 15

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-else’ e ‘case’)

• Construção essencial em que se fundamenta a modelação comportamental

Page 9: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

8

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 16

Modelação de circuitos combinacionais com ‘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 dependem

Formas da lista de sensibilidades(admissíveis no Verilog-2001)

(equivale a indicar na lista todos os sinais lidos no bloco ‘always’)

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 17

Algumas primitivas lógicas

• 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

inv

a1 na1

o1 no1

x1 xn1

Page 10: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

9

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 18

Constantes numéricas

8’b1011_0100

o underscore é ignorado

formato de representação (d, b, o, h)

decimal que indica o número de bits

Exemplos:

0100

1111111100010001

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!)

4’d4

16’hff_11

reg [3:0] a;...initialbegina = 28; // 28=11100 -> a fica com 1100=1210...

end

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 19

Tipos de operadores

• Aritméticos• Lógicos• Relacionais• Bitwise

• Redução• Deslocamento• Outros

Nos exemplos seguintes:

A = 4’b0110, B = 4’b0010, C = 4’b0101 e D = 4’b0000

Page 11: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

10

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 20

Operadores aritméticos

B**B → 0100potência**

C%B → 0001divisão (resto)%

C/B → 0010divisão (quociente)/

A*B → 1100multiplicação*

A-B → 0100subtracção-

A+B → 1000adição+

exemplooperaçãosímbolo

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 21

Operadores lógicos

A||B → 1, A||D → 1ou||

A&&B → 1, A&&D → 0e&&

!A → 0, !D → 1negação!

exemplosoperaçãosímbolo

Page 12: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

11

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 22

Operadores relacionais

B<=C → 1, B<=D → 0menor ou igual a<=

A>=C → 0, B>=B → 1maior ou igual a>=

A<C → 0, B<D → 0menor que<

A>B → 1, B>C → 0maior que>

B!=D → 1desigualdade!=

A==B → 0igualdade==

exemplosoperaçãosímbolo

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 23

Operadores bitwise

A~^C → 1100não ou exclusivo~^

A^C → 0011ou exclusivo^

A|C → 0111ou|

A&C → 0100e&

~A → 1001negação~

exemplooperaçãosímbolo

Page 13: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

12

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 24

Operadores de redução

~^A → 1, ~^D → 1não ou exclusivo~^

^A → 0, ^D → 0ou exclusivo^

~|A → 1, ~|D → 1não ou~|

|A → 1, |D → 0ou|

~ &A → 0, ~ &D → 1não e~ &

&A → 0, &D → 0e&

exemplosoperaçãosímbolo

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 25

Operadores de deslocamento

A<<1 → 1100, C<<2 →0100

deslocamento para a esquerda<<

A>>1 → 0011, C>>2 →0001

deslocamento para a direita>>

exemplosoperaçãosímbolo

Page 14: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

13

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 26

Outros operadores

A==B ? C : D → 0000condicional? :

{2{A}} → 01100110replicação{ { } }

{A,B} → 01100010concatenação{ }

exemplooperaçãosímbolo

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 27

Projecto de um somador completo

A BCiCo

S

A

B

Ci

Co

S11111

01011

01101

10001

01110

10010

10100

00000

SCoCiBA

Co = A·B + B·Ci + A·Ci

S = A B Ci+ +

circuito lógico

símbolo do full-adder

Page 15: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

14

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 28

Projecto de um somadorcompleto: Verilog

Como verificar que um modelo realiza a função pretendida?

Elaboração de um testbench para o full-adder

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 29

Projecto de um somadorcompleto: simulação

Page 16: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

15

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 30

Projecto de um somador de 4 bits: especificação

A3

CiCoA B

CiCoS

A BCiCo

S

A BCiCo

S

A BCiCo

S

B3

S3

A2 B2 A1 B1 A0 B0

S2 S1 S0

w1w2w3

ou, mais simplesmente

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 31

Projecto de um somador de 4 bits: verificação funcional

Testbench: instância o módulo a testar (adder4)

`timescale 1ns/100psmodule adder4_testbench;reg [3:0] a, b;reg cin;wire [3:0] s;

wire cout;

adder4 DeviceUnderTest(a, b, cin, s, cout);

// adder4 DeviceUnderTest(.Ci(cin), .Co(cout), .A(a), .B(b), .S(s));

initialbegin$monitor($time, “ ci=%b, a=%d, b=%d, s=%d, co=%b”, cin, a, b, s, cout);cin=0; a=2; b=4; #30b=12; #30 cin=1; #30a=4'b1110; b=4'b0110; #30 $stop;

endendmodule

o circuito a testar

monitor de sinais

estímulos de

simulação

registos (seguram valores !)

fios (propagam valores !)

controlo do simulador (pára)

espera 30 unidades de tempo (30ns)

módulo sem interface

quando o simulador inicia ...

sinais ligadospor posição

sinais ligadospor nome

Page 17: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

16

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 32

Projecto de um somador de 4 bits: resultados da simulação (texto)

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 33

Projecto de um somador de 4 bits: resultados da simulação (formas de onda)

Page 18: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

17

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 34

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 1ns por vector seriam necessários 1170 anos!)

module adder4_testbench;reg [3:0] a, b; reg cin;wire [3:0] s; wire cout;

adder4 DeviceUnderTest(a, b, cin, s, cout);

initialbegin$monitor($time, “ ci=%b, a=%d, b=%d, s=%d, co=%b", cin, a, b, s, cout);

cin = 0; $display(“Verificacao com carry-in = %b”, cin);for(a=0;a<15;a=a+1) for(b=0;b<15;b=b+1) #40;

cin = 1; $display(“Verificacao com carry-in = %b”, cin);for(a=0;a<15;a=a+1) for(b=0;b<15;b=b+1) #40;

$display(“Fim da simulação”); $stop;endendmodule

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 35

Declaração do interface• Um módulo pode não ter interface

– em módulos usados para teste de outros - testbenchesmodule myadder_testbench; // sem entradas nem saídas

• Declaração de portos de interface– unidireccionais:

input [7:0] din_a, din_b; // din_a, din_b são entradas de 8 bits// onde o MSB é din_a[7] e o LSB é din_a[0]

input clock, reset; // clock, reset são entradas de 1 bitoutput [0:8] res; // result é uma saída de 9 bits, onde o

// MSB é res[0] e o LSB é res[8]

– bidireccionais:inout [7:0] databus; // 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: 1, 0, x (desconhecido) e z (estado de alta impedância)

Page 19: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

18

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 36

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 1 bit

wire en_clock, sel_reg; // fios simples (um bit)

wire [15:0] opr_a, opr_b; // dois barramentos de 16 bits

• Sinais do tipo reg representam “registos” (um ou mais bits)– seguram valores lógicos

reg clock, reset; // registos de 1 bit

reg [7:0] Ra, Rb; // registos de 8 bits

reg [15:0] regfile[0:31]; // vector de 32 registos com 16 bits cada

• Campos de vectores de bitsRb; // todo o registo Rb de 8 bits

opr_a[15:8]; // os 8 bits mais significativos de opr_a

Rb[3]; // o bit 3 do registo Rb

regfile[6]; // o elemento no endereço 6 do vector regfile;

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 37

Parametrização

• Aumentar a legibilidade

module my_multiply(...);parameter size=16, delay=5;...endmodule

my_multiply #(8,2) mult1(...);

valores por omissão

valores atribuídosà instância mult1

// Codificaçao de estados:parameter INIT = 2’b00;parameter S0=2’b01, S1=2’b11;...if (state==INIT) //if (state==2’b00)nextstate=S1;

...

• Tornar a descriçãogenérica

module FCP(a, b, out);// Largura do operandoparameter WIDTH = 32;input [WIDTH-1:0] a, b;...

Page 20: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

19

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 38

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_1(o1, x1, x2, x3; // tp = 3 unidades de tempo

and #(3,5) and_2(out2, a, b); // tplh=3, tphl=5

bufif1 #(3,2,5) buf_1(out, in, en) // tplh=3, tphl=2, tpHiZ=5

• Para cada tempo podem ser especificados valores min, typ e maxand #(3:4:5) myand(out2, a, b); // tpmin=3, tptyp=4, tpmax=5

bufif1 #(1:2:3,2:3:4,3:4:6) buf_1(out, in, en) //atrasos min:typ:max

• O valor da unidade de tempo é definido pela directiva `timescale`timescale 1ns/100ps // uma unidade=1ns; precisão de simulação=0.1ns

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 39

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...)

Page 21: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

20

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 40

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)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 )begin

cout = (a & b) | (a & cin) | (b & cin);endendmodule

modela blocoscombinacionais

sempre que ...

o sinal s está“ligado” à expressão

operadoreslógicos

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 41

Modelos comportamentaisModelo comportamental do somador de 4 bits

module four_bit_adder_c(a, b, cin, s, cout);input [3:0] a, b;input cin;

output [3:0] s;output cout;reg cout, s;reg [5:0] ta, tb, ts; // “registos” temps.

always @( a or b or cin or ta or tb or ts )begin

ta = { 1’b0, a, 1’b1 };tb = { 1’b0, b, cin };ts = ta + tb;cout = ts[5];s = ts[4:1];

endendmodule

sempre que...

concatenaçãode bits

somador

extração de resultados

Page 22: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

21

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 42

Modelos comportamentais

• 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

Estruturação em “subrotinas”multiply(a,b,acc);...

task multiplyinput [15:0] a, b;output [31:0] prod;begin...endendtask

if (testDF(d1,d2)==2’b00)...

function [1:0] testDF;input [1:0] Duab, Dvab;begin...testDF=2’b01;endendfunction

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 43

Circuitos síncronos

O elemento mais simples: um flip-flop tipo D

module my_DFF(clk, d, q);

input clk, d;output q;reg q;

always @( negedge clk )begin

q <= d;endendmodule

modela um blocosíncrono com clk

sempre que clk

q “segura” um valor lógico

Page 23: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

22

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 44

Modelação de circuitos síncronosEx: acumulador de 8 bits

module acc(clk, reset, a, reg_sum);input clk, reset;input [7:0] a;output [7:0] reg_sum;reg [7:0] reg_sum;

always @( negedge clk )if ( reset )

reg_sum <= 8’d0;else

reg_sum <= a + reg_sum;endmodule

processosíncrono com clk

sempre que clkreg_sum “segura”um valor lógico

reg_suma

D Q

clk0

reset

circuito inferido

reset síncronocom clk

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 45

Contador up/downmodule updown_counter(clk, reset, enable, down, dout, end_count);input clk, reset, enable, down;output [3:0] dout;reg [3:0] dout;output end_count;

assign end_count = enable & (down ? (dout==0) : (dout==15) );

always @( posedge clk or posedge reset)beginif ( reset )

dout <= 0 elsebegin

if ( enable )if ( down )

dout <= dout – 1;else

dout <= dout + 1;end

endendmodule

processo síncronocom o flanco

ascendente de clk e reset (assíncrono)

processocombinacional

a avaliação do sinal de reset tem de ocorrer

no início do blocobegin...end

Page 24: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

23

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 46

Testbench para o contador up/down

`timescale 1ns/100psmodule updown_counter_testbench;reg clk, reset, enable, down;wire [3:0] dout;wire end_count;

updown_counter count_1(clk, reset, enable, down, dout, end_count);

initialbegindown = 0; reset = 0; enable = 1;#2 reset = 1; // apply reset#6 reset = 0; // release reset#300 // count up 300nsenable = 0; #40 // disable counterdown = 1; #100 // count downenable = 1; #300 // enable counter, wait 300ns$stop; // stop simulation

endinitial clk = 1’b0;always #5 clk = ~clk; // 10ns clock period

endmodule

estímulos

instância do contador

sinal derelógio

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 47

Projecto de um contador de 4 bits

Modularidade e hierarquia de counter– estruturado em 3 módulos: c16, Dff e clockgen– clockgen produz o sinal de relógio– contador c16 usa instâncias do módulo Dff (flip-flops tipo D)– hierarquia do modelo:

clockgenc16Dff Dff Dff Dff

counter

Page 25: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

24

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 48

Projecto de um contador de 4 bits

Modelo do contador c16

module c16(value, clock, fifteen, ten);input clock;output [3:0] value;output fifteen, ten;Dff D1(value[0], clock, ~value[0]),

D2(value[1], clock, value[1] ^ value[0]),D3(value[2], clock, value[2] ^ &value[1:0]),D4(value[3], clock, value[3] ^ &value[2:0]);

assign fifteen = &value;assign ten = value[3] & ~value[2] & value[1] & ~value[0];endmodule

vector de bits

operadoreslógicos

saída ten vale 1 quando value = 1010

saídas de 1 bit

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 49

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 = 0;always

@ (negedge clock)#10 q = d;

endmodule

q é reg porque “segura” um valor

no início da simulação (t=0)

sempre que clock

Page 26: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

25

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 50

Projecto de um contador de 4 bitsGerador de relógio (clockgen)

module clockgen(clock);output clock;reg clock;initial

#5 clock = 1;always

#50 clock = ~clock;endmodule

para sempre...

sinal clock gerado:

t=050 505

unidades de tempo reais: ‘timescale 1ns/100ps

unidade de atraso

arredondamentodos cálculos

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 51

Projecto de um contador de 4 bits

O circuito completo (módulo counter)

module counter;wire [3:0] count;wire clock, ten, fifteen;c16 contador( count, clock, fifteen, ten);clockgen clock( clock );initial

$monitor($time, “ Clk=%b, Count=%d, is_10=%b, is_15=%b”,clock, count, ten, fifteen);

endmodule

Page 27: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

26

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 52

Testbench

circuitoa

fabricar

geraçãode

estímulos

análisede

respostas

modelo sintetizável(vai ser um circuito digital)

modelo não sintetizável(testbench)

clockreset

memóriasA/D e D/Ainterfaces

ficheiros...

simula o comportamento dedispositivos externos

analisa respostas para verificar a correcção do modelo

registos de textowaveformsficheiros...

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 53

Atribuições blocking/nonblocking

• Atribuições procedimentais (blocking) – avaliadas em sequência

• Atribuições non-blocking – avaliadas em paralelo

begina1<=in0+in1-acc;y1<=a1+b1;z1<=y1+a1;

end

Admitindo que in0=4,in1=4,acc=1a1=4, b1=4, y1=8

a1 = 4+4-1 = 7;y1 = 7+4 = 11;z1 = 11+7 = 18;

a1 = 7;y1 = 4+4 = 8;z1 = 8+4 = 12;

begina1=in0+in1-acc;y1=a1+b1;z1=y1+a1;

end

Page 28: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

27

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 54

Atribuições blocking/nonblockingmodule shiftReg(clk, rst, E, A);input clk, rst, E;output A;reg A, B, C, D;

always @(posedge clk or posedge rst)beginif (rst) begin A=0; B=0; C=0; D=0; endelse begin

A=B;B=C;C=D;D=E;

endendendmodule

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 55

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)begin...if ( dataready )rdy = 1;

...end

always @(posedge clk)begin...if ( rdy )beginreg = datain;ack = 1;

endend

Page 29: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

28

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 56

Blocos sequenciais e paralelos

begin // sequencialx = k;#10 y = a + b;#5 z = y * x;

end

beginx = k;fork#10 y = a + b;#5 z = y * x;

joinend

avaliadas em paralelo

inicia bloco paralelo

termina bloco paralelo

xyz

10 5

xyz

10

5

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 57

Latches em blocos combinacionaisNum 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 pretendia combinacional

é geralmente fatal

always @(a or b or sel)beginif ( sel )y = a;

elsey = b;

end

always @(a or b or sel)beginif ( sel )y = a;

end

um multiplexador 2÷1uma latch transparente

Page 30: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

29

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 58

(z e x são don’t care)

Construções condicionais

• if (condition)statement1elsestatement2

• case (expression)expr1: statement1;expr2: statement2;default: statement3;endcase;

• (expression)?(true):(false)

if (a[2:0]==3’b010 && cy)...

casez

casex(z é don’t care)

case (ir[7:4])4’b0001: ...4’b0010: ...default: ...

endcasecasex (ir[7:4])

4’bxx01: ...4’bxx10: ...default: ...

endcaseacc=(ir[7:0]==4’b0011) ? 0 : 255;

if (done && init) {out, play}=2’b011;elseif (ready) beginout=2’b10; play=1;

endelse{out, play}=3’b110;

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 59

Ciclos• for(start; end_expr; update)

statement;

• forever statement;

for(i=0; i<8; i=i+1)x[i] = x[i+1];

• repeat(fixed_loop_count)statement;

repeat(10)begina[i]=a[i+1];i=i+1;

end;

forever #10 clock = ~clock;

while(i<8)begin...i=i+1;end

• while(condition)statement;

(têm utilização restrita em modelos sintetizáveis)

Page 31: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

30

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 60

Modelação de máquinas de estados

FSM (Finite State Machine)– sequência determinada de estados, sincronizada com relógio– estrutura geral

(saídas Moore)

saída

próximoestado

registo deestado

entradassaídas Mealy

reset(assíncrono)

reset(síncrono)

clock

saídas Mooresaída

estadoactual

próximoestado

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 61

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

– 0000 0001 0010 0011 0100 … 1101 1110 1111

• código Gray– 0000 0001 0011 0010 0110 … 1011 1001 1000

• código Johnson– 00000000 00000001 00000011 00000111 00001111 … 11100000 11000000

• one-hot– 0000000000000001 0000000000000010 0000000000000100 ...

Page 32: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

31

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 62

Modelação de máquinas de estados• Mealy

– as saídas dependem do estado corrente e das entradas– o valor das saídas é associado às transições entre estados

• Moore– as saídas dependem apenas do estado corrente– o valor das saídas é associado aos estados

A B

C

i1/s1

i2/s2

D E

F

s3s3

s4

i1

i3

condição de transição de estado

i3

i4

valores dassaídas

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 63

Máquinas de estados: especificação

• Tabela de transição de estados

• Diagrama de transição de estados

00 01

10

0X/1

01X/0

1

1

X1/0X0/1

XX/1

S0 S1

S2

i1/Ymei1/Yme

Ymo

Ymo

i2/Yme

Ymei2/Yme

entradas estado próximo saídasi1 i2 corrente estado Yme Ymo0 X 00 (S0) 00 (S0) 1 01 X 00 (S0) 01 (S1) 0 0X 1 01 (S1) 00 (S0) 0 1X 0 01 (S1) 10 (S2) 1 1X X 10 (S2) 00 (S0) 1 1

saídas Mealysaídas Moore

i1 i2/Yme

Ymo

Page 33: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

32

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 64

Modelação de máquinas de estadosem Verilog

Modelo incorrecto!

module FSM_mal(clock, i1, i2, Yme, Ymo);input clock, i1, i2;output Yme, Ymo;reg Yme, Ymo;reg [1:0] state;

always @(posedge clock)case (state)

2’b00: beginYmo<=0;if (i1)begin

state<=2’b01; Yme<=0;endelse

Yme<=1;end

2’b01: beginYmo<=1;if (i2)begin

state<=2’b00; Yme<=0;endelse

beginstate<=2’b10; Yme<=1;

endend

2’b10: beginYmo<=1; state<=2’b00; Yme<=1;

endendmodule

00 01

10

0X/1

01X/0

1

1

X1/0X0/1

XX/1

i1 i2/Yme

Ymo

Onde estão os erros ?

• falta de 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’b11

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 65

Modelo correcto

00 01

10

0X/1

01X/0

1

1

X1/0X0/1

XX/1

i1 i2/Yme

Ymo

always @(state or i1 or i2)begin

case (state)2’b00: begin

nextstate=2’b00;Ymo=0;if (i1)begin

nextstate=2’b01; Yme=0;endelse

Yme=1;end

2’b01: beginYmo=1;if (i2)begin

nextstate=2’b00; Yme=0;endelse

beginnextstate=2’b10; Yme=1;

endend

2’b10: beginYmo=1; nextstate=2’b00; Yme=1;

enddefault: begin

Ymo=0; nextstate=2’b00; Yme=1;end

endendmodule

module FSM_bem(reset, clock, i1, i2, Yme, Ymo);

input reset, clock, i1, i2;output Yme, Ymo;reg Yme, Ymo;reg [1:0] state, nextstate;

always @(posedge clock)if (reset)

state<=2’b00;else

state<=nextstate;

Modelação de máquinas de estadosem Verilog

Page 34: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

33

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 66

Alternativa 1: separação da lógica do próximoestado das saídas

always @(state or i1 or i2)begincase (state)2’b00: if (i1)

nextstate=2’b01;elsenextstate=2’b00;

2’b01: beginif (i2)

nextstate=2’b00;else

nextstate=2’b10;end

2’b10: nextstate=2’b00;

default: nextstate=2’b00;

endendmodule

always @(state or i1 or i2)begin

case (state)2’b00: begin

Ymo=0;if (i1)

Yme=0;else

Yme=1;end

2’b01: beginYmo=1;if (i2)

Yme=0;else

Yme=1;end

2’b10: beginYmo=1; Yme=1;

enddefault: begin

Ymo=0; Yme=1;end

endendmodule

Modelação de máquinas de estadosem Verilog

… (registo de estado)

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 67

Alternativa 2: combinando estado corrente e próximo estado

always @(posedge clock or negedge reset)beginif (!reset)

state <= 2’b00;else

case (state)2’b00: if (i1)

state<=2’b01;else

state<=2’b00;2’b01: begin

if (i2)state<=2’b00;

else state<=2’b10;

end2’b10: begin

state<=2’b00;end

default: beginstate<=2’b00;

endendendmodule

Modelação de máquinas de estadosem Verilog

… (saídas Ymo e Yme)

Page 35: Projecto de Sistemas Digitais - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · – ferramentas de síntese não processam bem circuitos muito grandes! • Problemas de

34

AJA, FEUP PSDI - Linguagens de descrição de hardware - Verilog 68

Alternativa 3: combinando estado corrente com próximo estado e modelando Ymo como saída síncrona

always @(posedge clock or negedge reset)beginif (!reset)

beginYmo<=0;state <= 2’b00;

endelse

case (state)2’b00: if (i1)

beginYmo<=1;state<=2’b01;

endelsebegin

Ymo<=0;state<=2’b00;

end...

Modelação de máquinas de estadosem Verilog

… (saída Yme)