SystemVerilog para Verificação funcional com...

76
The Brazil-IP Network BRAZIL-IP BRAZIL-IP Elmar Melcher UFCG [email protected] Curso do Brazil-IP SystemVerilog para Verificação funcional com OVM

Transcript of SystemVerilog para Verificação funcional com...

Page 1: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

Elmar Melcher

UFCG

[email protected]

Curso do Brazil-IP

SystemVerilog paraVerificação funcional

com OVM

Page 2: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 2

BRAZIL-IPBRAZIL-IP

Roteiro

1)Introdução

2)Fluxo de projeto

3)Representação gráfica vs. textual

4)Requisitos de uma linguagem de descrição de hardware

5)Um exemplo de uma descrição em SystemVerilog

6)Simulação com SystemVerilog

Page 3: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 3

BRAZIL-IPBRAZIL-IP

7)Descrição TLM em SystemVerilog1)Class2)FIFO

8)Testbench1)Transações2)Randomização3)Visualização4)Sinalização de erros

Roteiro

Page 4: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 4

BRAZIL-IPBRAZIL-IP

9)Cobertura de código10)Cobertura funcional11)Cosimulação com C

Roteiro

Page 5: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 5

BRAZIL-IPBRAZIL-IP

Introdução

1)Fluxo de projeto2)Representação gráfica vs. textual3)Requisitos de uma linguagem de descrição de

hardware4)Simulação com SystemVerilog

Page 6: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 6

BRAZIL-IPBRAZIL-IP

Fluxo de projeto (simplificado)

Especificação

Descrição comportamental

Descrição estrutural

Layout

Função

Descrição RTL

Função & Timing

Função & Timing

Função & Timing

consumo, área, etc.

Page 7: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 7

BRAZIL-IPBRAZIL-IP

✔ Expressar ações concorrentes✔ Expressar tempo (atraso, clock)✔ Permitir descrição comportamental, estrutural e

física✔ Permitir mesclar diferentes vistas de diferentes

subsistemas✔ Permitir simulação, síntese e verificação✔ Ser fácil e seguro de usar

Propriedades desejáveisde uma HDL

Page 8: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 8

BRAZIL-IPBRAZIL-IP

Exemplos de outras HDLs

Verilog 1995, 2001, 2005 SystemC VHDL (VLSI HDL - Very Large Scale

Integration Hardware Description Language) Abel, Palasm, Cupl, OCCAM, Handle-C, ELLA. . .

Page 9: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 9

BRAZIL-IPBRAZIL-IP

Propriedades de SystemVerilog

Expressar ações concorrentes

Expressar tempo (atraso, clock)

Permitir descrição TL, RTL, estrutural e física

Permitir mesclar diferentes vistas de diferentes subsistemas

Permitir simulação, síntese e verificação

Ser fácil e seguro de usar

Page 10: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 10

BRAZIL-IPBRAZIL-IP

Especificação

Descrição TL

Descrição estrutural

Layout

Função

Descrição RTL

Função & Timing

Função & Timing

Função & Timing

consumo, área, etc.

Fluxo de projeto usando SystemVerilog

Page 11: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 11

BRAZIL-IPBRAZIL-IP

Breve Histórico

➔ Verilog, 1981➔ SystemVerilog, padrão IEEE em 2005➔ OVM, Janeiro 2008

Page 12: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 12

BRAZIL-IPBRAZIL-IP

Código bonito✔ 50% é comentário✔ Todas as declarações tem comentário✔ Um module ou class não ultrapassa 100 linhas (uma

página na tela)✔ Identificadores refletem o que é o objeto identificado✔ Indentação consistente

➔ regras do SRS da Motorola➔ regras do Brazil-IP Network

http://lad.dsc.ufcg.edu.br/fenix/metodologia

Page 13: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 13

BRAZIL-IPBRAZIL-IP

➢ Evite nomes longos demais:fpop_rs1 no lugar de floating_point_opcode_rs1

➢ Evite confusão entre ‘0’ e ‘O’, ‘1’ e ‘l’.

➢ Use capitalização consistente.Estilo C: packet_addr, data_inEstilo Pascal: PacketAddr, DataInEstilo Modula: packetAddr, dataIn

Código bonitoIdentificadores

Page 14: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 14

BRAZIL-IPBRAZIL-IP

*_clk sinal de relógio*_next sinal antes de registrá-lo*_n sinal ativo nível baixo*_xi entrada do circuito*_xo saída do circuito

Código bonitoSufixo de identificadores

Page 15: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 15

BRAZIL-IPBRAZIL-IP

Comentários

/* Comentario atravessandovarias linhas */

// Comentario ateh o fim da linha

Cuidado com acentos á é ô à etc.

Page 16: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 16

BRAZIL-IPBRAZIL-IP

➢ NúmerosDecimal, hexadecimal, binário com tamanho em bits:6'd33, 8'hA6, 4'b1101default: decimal positivo sem tamanhopermitido usar _ + -8'b1001_0011

➢ Cadeias de caracteres"Delimite usando aspas numa mesma linha"Limitado a 1024 caracteres

Convenções Léxicas

Page 17: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 17

BRAZIL-IPBRAZIL-IP

➢ IdentificadorA ... Za ... zUnderscore

➢ Primeiro caractere de um identificador não pode ser um dígito

➢ SystemVerilog diferencia letras maiúsculas de minúsculas (case sensitive)

Convenções Léxicas

Page 18: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 18

BRAZIL-IPBRAZIL-IP

Tipos de Dados

bit b; //1 bit, só '1' e '0'byte B; //8 bits, só '1' e '0'shortint; //16 bits, só '1' e '0'int i; //32 bits, só '1' e '0'longint l; //64 bits, só '1' e '0'shortreal r; //32 bits, ponto flutuantereal r; //64 bits, ponto flutuantestring s; //string de caracteresname name_i; //instancia de classe

Page 19: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 19

BRAZIL-IPBRAZIL-IP

Tipos de Dados

Tipos sintetizáveis: default é sem sinal.

Tipos não sintetizáveis: default é com sinal.

Ex.: logic [15:0] value;value = [0 : 65,536].

Ex.: shortint value;value = [-32,768 : 32,767]

Page 20: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 20

BRAZIL-IPBRAZIL-IP

Operadores lógicos unários

~ negação bit a bit

! negação lógica& “e” bit a bit| “ou” bit a bit^ “ou” exclusivo- negativo+ positivo

Page 21: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 21

BRAZIL-IPBRAZIL-IP

Operadores aritméticos binários

* multiplicação / divisão % resto da divisão + soma - subtração

Page 22: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 22

BRAZIL-IPBRAZIL-IP

Operadores lógicos binários➔ Deslocamento lógico (com preenchimento com ‘0’)➔ Deslocamento negativo não pode<< (esquerda) >> (direita)

➔ Deslocamento aritmético<<< (esquerda) >>> (direita)

➔ Comparação== != < <= > >=

➔ Lógico| & ^ || &&

Page 23: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 23

BRAZIL-IPBRAZIL-IP

Operador condicional

<condição> ? <expressão_verdadeira> : <expressão_falsa>

➔ Para expressões simples é útil.➔ Usá-lo aninhando é suicídio.➔ Prefira estruturas if ... else.

Page 24: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 24

BRAZIL-IPBRAZIL-IP

Precedência de operadores

+ - ! ~ (unario) mais

+ - (binario)

<< >>

< <= => >

== !=

&

^

|

&&

||

?: (condicional) menos

Page 25: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 25

BRAZIL-IPBRAZIL-IP

● `define – (Similar a #define em C) usado para definir parâmetro global

● Exemplo:`define HALF_PERIOD 500always #(`HALF_PERIOD) clk <= !clk;

● `include – usado para incluir outro arquivo

● Exemplo:`include “./refmod.svh”

Diretivas de Compilação

Page 26: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 26

BRAZIL-IPBRAZIL-IP

● parameter – usado para definir parâmetros globais; melhor que `define

● Exemplo: parameter HALF_PERIOD = 500;always #(HALF_PERIOD) clk <= !clk;

Diretivas de Compilação

Page 27: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 27

BRAZIL-IPBRAZIL-IP

Simulaçãoa definição

Modelo:Descrição de aspetos interessantes de um sistema real

Simulação:Dado um modelo de condições de contorno (sinais de entrada), fornece a reação do sistema (sinais de saída) com respeito aos aspetos modelados

Page 28: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 28

BRAZIL-IPBRAZIL-IP

Simulaçãocomo funciona

➢ Trata eventos. ➢ Um evento é uma mudança de estado associado a um

tempo simulado.➢ Um evento ocorre devido a outro evento.

➢ Vários eventos podem ocorrer ao mesmo tempo.➢ Cuidado com a causalidade!

Page 29: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 29

BRAZIL-IPBRAZIL-IP

Simulaçãoo quê ela faz

➢ Processamento concorrente,faz de conta que diferentes ações acontecem no mesmo tempo.

➢ Obedece a especificações temporais,como atrasos.

“tempo de simulação”vs.

“tempo simulado”

Page 30: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 30

BRAZIL-IPBRAZIL-IP

Simulação

• Tempo de simulação:Tempo que a simulação dura ou demora para terminar. Tempo real.

• Tempo simulado:A simulação simula o hardware e o tempo de execução dele. Tempo virtual.

Page 31: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 31

BRAZIL-IPBRAZIL-IP

Simulaçãoum exemplo

Saída de A muda; isso leva B e C a serem executadas.

Muito embora, A não chama B nem C como numa chamada de função,B e C executam porque são conectadas a saída de A

A

B

C

Page 32: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 32

BRAZIL-IPBRAZIL-IP

Atrasos na simulação• Sintaxe:

#(valor)(unidade de tempo)• Exemplo:

task equal();if (a = b)

$display(“OK!”);else

$display(“ERROR!”);endtaskinitial #20ms equal();

Page 33: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 33

BRAZIL-IPBRAZIL-IP

Existem dois:initial : Executa uma única vez no início da simulação,

NÃO sintetizávelalways_comb : Executa repetidamente, sintetizável

Exemplo:…initial begin Sum <= 0; Carry <= 0;end…

…always_comb begin Sum <= A ^ B; Carry <= A & B;end…

Construções Procedurais

Page 34: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 34

BRAZIL-IPBRAZIL-IP

Fornecer sinais de entradaprogram tb;

logic clk; logic a,b,s,c;

initial clk <= 0; always #5 clk <=

~clk;

initial begin a <= 0; b <= 1; @(posedge clk); a <= 1; b <= 0; end

duv U1(.*);

endprogram

Page 35: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 35

BRAZIL-IPBRAZIL-IP

Processamento concorrenteclass transmitter; (...) task run(); (…) endtask

endclass

program tb;

(...)

initial run_test();

(...)

endprogramclass receptor; (...) task run(); (…) endtask

endclass

Page 36: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 36

BRAZIL-IPBRAZIL-IP

Encerrando a simulaçãoprogram tb;

(...)

initial #1ms global_stop_request;

endprogram

Page 37: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 37

BRAZIL-IPBRAZIL-IP

Transação em SystemVerilog

Uma ovm_transaction classExemplo:

class packet extends ovm_transaction; enum {RD, WR} cmd; int addr; int data;endclass

Referências a uma class são ponteiros.• Um ponteiro é nulo antes de ser atribuído.• O carroceiro do lixo vai passando...

Page 38: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 38

BRAZIL-IPBRAZIL-IP

FIFO

no módulo transmissor: declaração:

ovm_put_port #(packet) to_receptor; uso:

packet x;x = new();to_receptor.put(x);

no módulo receptor: declaração:

ovm_get_port #(packet) from_transmitter; uso:

packet b;from_transmitter.get(b);

Page 39: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 39

BRAZIL-IPBRAZIL-IP

FIFO (cont.)

No módulo que instancia transmissor (tx_i) e receptor (rx_i): declaração:

tlm_fifo #(packet) myfifo;myfifo = new(“myfifo”, this, 10);

conexão:tx_i.to_receptor.connect(myfifo.put_export);rx_i.from_transmitter.connect(myfifo.get_export);

10 elementos

Page 40: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 40

BRAZIL-IPBRAZIL-IP

Transações e FIFOs

➢ Somente FIFOs (e não sinais) conectam source, driver, checker, modref e monitor.

➢ Transações são transportadas explicitamente de um módulo para outro, mas o handshake para garantir sincronismo é implícito.

➢ Metodologia simples, eficiente e aplicável para todas as situações.

Page 41: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 41

BRAZIL-IPBRAZIL-IP

FIFO Exemplo• source.sv:

class source extends ovm_threaded_component; ovm_put_port #(packet) to_sink; function new(string name, ovm_component parent); super.new(name, parent); to_sink = new("to_sink", this); endfunction

task run(); packet p; forever begin p = new(); assert(p.randomize()); to_sink.put(p); end endtask endclass

Page 42: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 42

BRAZIL-IPBRAZIL-IP

FIFO Exemplo• sink.sv:

class sink extends ovm_component; ovm_get_port #(packet) from_source; function new(string name, ovm_component parent); super.new(name, parent); from_source = new("from_source", this); endfunction

task run(); packet pd; forever begin from_source.get(pd); end endtask endclass

Page 43: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 43

BRAZIL-IPBRAZIL-IP

FIFO Exemplo• conector.sv:

module conector; `include "trans.sv" `include "source.sv" `include "sink.sv"

source source_i = new("source_i", null); sink sink_i = new("sink_i", null);

tlm_fifo #(packet) source_sink = new("source_sink", null, 3); [...] initial begin source_i.to_sink.connect(source_sink.put_export); sink_i.from_source.connect(source_sink.get_export); endendmodule

Page 44: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 44

BRAZIL-IPBRAZIL-IP

TWO HEAD FIFO

Page 45: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 45

BRAZIL-IPBRAZIL-IP

TWO HEAD FIFO

No módulo que instancia transmissor e receptor:➢ declaração:

tlm_fifo #(acesso) fifo1;fifo1 = new(“fifo1”, this, 10);

tlm_analysis_fifo #(acesso) fifo2;fifo2 = new(“fifo2”, this);

Page 46: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 46

BRAZIL-IPBRAZIL-IP

TWO HEAD FIFO

No módulo que instancia transmissor e receptor:➢ conexão:

src.out_port.connect(fifo1.put_export);rm.in_port.connect(fifo1.get_export);

fifo1.put_ap.connect(fifo2.analysis_export);driver.in_port.connect(fifo2.get_export);

Page 47: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 47

BRAZIL-IPBRAZIL-IP

Métodos para FIFO de OVM

Bloqueantes:

put, get, peekNão bloqueantes:

try_put, try_get, try_peek

Não bloqueante requer o uso de delays. Ex.:

forever begin //same as while(1) from_source.try_get(pd); #10ns;end

Page 48: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 48

BRAZIL-IPBRAZIL-IP

Declarando elementos de um testbench

Exemplo: módulo transmissor Declaração:

class transmitter extends ovm_component; ovm_put_port #(packet) to_receptor; (...)

function new(string name, ovm_component parent); super.new(name, parent); to_receptor = new("to_receptor", this); endfunction (...)endclass

Page 49: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 49

BRAZIL-IPBRAZIL-IP

Visualização de formas de onda

Usando métodos de OVMNo início da task run():recording_detail = OVM_FULL;Antes de cada transação:begin_tr (transaction, “label”, “descriptor”);Após cada transação:end_tr(transaction);

Page 50: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 50

BRAZIL-IPBRAZIL-IP

Visualização de formas de onda

Usando métodos de OVMÉ preciso também configurar a gravação da transação, dentro da declaração da classe, redefinindo o método do_record():

rand int value1;rand int value2;(...)function void do_record (ovm_recorder recorder);

recorder.record_field("name1", value1, $bits(value1), base); recorder.record_field("name2", value2, $bits(value2), base); (...)endfunction

Page 51: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 51

BRAZIL-IPBRAZIL-IP

Sinalizar Erros

Usar ovm_report_error(“nome_transacao”, psprintf(“esperado: %d recebido %d”, valor_refmod, valor_monitor))que fornece o nome do módulo e o tempo simulado.Incrementa um contador de erros, pode visualizar o contador junto às formas de onda e às transações.

Page 52: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 52

BRAZIL-IPBRAZIL-IP

Sinalizar Erros

Usar

record_error_tr(“Checker”);Para visualizar nas formas de onda o tempo simulado em que o erro ocorreu.

Page 53: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 53

BRAZIL-IPBRAZIL-IP

Randomização direcionada de transações

class packet extends ovm_transaction;rand int i;constraint i_range { i > 0; i < 16;}

endclass

Page 54: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 54

BRAZIL-IPBRAZIL-IP

class packet extends ovm_transaction;rand int i;constraint i_range { i dist {[1:9] :/ 5, [10:15] := 4};}

endclass

Randomização direcionada de transações

Page 55: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 55

BRAZIL-IPBRAZIL-IP

packet sample; //conforme slide anterior(...)task run(); (...) sample = new(); assert(sample.randomize()); (...)endtask

Randomização direcionada de transações

Page 56: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 56

BRAZIL-IPBRAZIL-IP

Task e Function

Tasks têm domínio de tempo.Functions são timeless.

Exemplos:task my_task (int a, real b);function longint my_function (int a, real b);

Page 57: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 57

BRAZIL-IPBRAZIL-IP

Concorrência (fork)

Possibilidades:fork... joinfork... join_anyfork... join_nonedisable_forkwait_fork

Page 58: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 58

BRAZIL-IPBRAZIL-IP

Concorrência (fork)Exemplo:fork task_A(); task_B();join_anyfork task_C(); task_B();join_nonewait_fork

Page 59: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 59

BRAZIL-IPBRAZIL-IP

Cobertura funcional

O Plano de Verificação define as situações que devem ser simuladas.A cobertura funcional é uma medida de quantas situações do plano de teste já foram simuladas.Por definição, cobertura de 100% significa que a verificação funcional está concluída.

Page 60: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 60

BRAZIL-IPBRAZIL-IP

Cobertura funcional (cont.)

Estímulos são criados na forma de transações randômicos (rand),Respostas são gerados pelo monitor e pelo modelo de referência,TDriver e TMonitor podem medir cobertura funcional de transações e do handshake de sinais.O Refmod deve medir a cobertura de funções executadas.

Page 61: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

Cobertura Funcional

Covergroups

Os engenheiros de verificação podem observar os valores das variáveis agrupando-as em um ou mais grupos de cobertura (covergroups).Um covergroup é um agrupamento de pontos de cobertura (coverpoints – um grupo de variáveis cujos valores serão simultaneamente amostrados e contados.

Page 62: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

62

Cobertura Funcional

covergroup cg1;coverpoint b { bins b1 = {0, 1, 2, 3}; bins b2 = { [5:8], 9 };}

endgroup Valores quedevem serobservados

variável

Definindo um covergroup

Page 63: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

63

Cobertura Funcional

cg1 cg1_inst = new();

Instanciando um covergroup

Define a instânciacg1_instdo covergroup cg1

O uso deparêntesesé opcional

Page 64: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

64

Cobertura Funcional

Instanciando um covergroup

Um covergroup pode ser instanciado dentro de um módulo, uma interface, um bloco de programa, ou de uma classe.

Não é suportado por SystemVerilog:Atribuições nulas a uma instância de um covergroup

cg1 cg1_inst = null;

Atribuições diretas entre duas instâncias de covergroups

cg1_inst1 = cg_inst2;

Page 65: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

65

Cobertura Funcional

Definindo um coverpoint

As variáveis cujos valores devem ser observados são definidas como coverpoints dentro de um ou mais covergroups.

Durante a simulação os valores das variáveis definidas como coverpoints são medidos e armazenados na base de dados da cobertura.

Expressões de mais de 32 bits não são suportadas!

Page 66: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

66

Cobertura Funcional

Caixas (bins)

Um coverpoint bin é usado para definir os valores que devem ser medidos e armazenados durante uma simulação.

A definição do intervalo de um bin pode ser em qualquer base (binária, decimal, hexadecimal, ou octal).

Adicionalmente, o intervalo de um bin pode ter uma constante ou uma expressão.

Page 67: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

67

Cobertura Funcional

Caixas (bins), exemplos:

Para definir o intervalo como sendo os valores de 0 a 5 e 10:

bins b1 = {[0:5], 10};

Para definir o intervalo como sendo os valores de 0 a 5 e 9 a 14:

bins b1 = {[0:5], [9:14]};

Para definir um bin para cada valor, 0, 2, e 7 (bin vetorial):

bins b_vect[] = {0,2,7};

Page 68: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

68

Cobertura Funcional

Caixas (bins), exemplos:

Para definir o intervalo como sendo os valores em hexadecimal de 0 a F:

bins b1 = {[‘h0:‘hF]};

Para definir o intervalo como sendo os valores menor que ou igual a 5, e 10:

bins b1 = {[$:5], 10};

Para definir o intervalo como sendo os valores maior que ou igual a 7:

bins b1 = {[7:$]};

Para definir o intervalo como sendo os valores pares entre 0 e 15:

wildcard bins b1 = {4'b???0};

Page 69: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

69

Cobertura Funcional

Ignorando valores nos resultados de cobertura

Valores associados a um coverpoint podem ser ignorados na medição da cobertura especificando-os como ignore_bins.

Os valores especificados com ignore_bins são excluídos da medição de valores de coverpoints e não resultam em um incremento na contagem da cobertura.

Page 70: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

70

Cobertura Funcional

ignore_bins ignore_vals = {2, 3};

Ignorando valores nos resultados de cobertura

Palavra-chave paradefinir valores a seremignorados

Os valores 2 e 3serão ignoradosna medição dacobertura

Page 71: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

71

Cobertura Funcional

Especificando valores como sendo ilegais

Valores associados a um coverpoint podem ser definidos como ilegais na medição da cobertura especificando-os como illegal_bins.

Se um valor de um coverpoint for detectado e tiver sido especificado com illegal_bins, a simulação gera um erro.

Page 72: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

72

Cobertura Funcional

illegal_bins ill_vals = {1, 2};

Especificando valores como sendo ilegais

Palavra-chave paradefinir valores queserão consideradosilegais

Os valores 1 e 2são ilegais egerarão um errose detectados

Page 73: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

73

Cobertura Funcional

Diferenças e semelhanças entre illegal_bins e ignore_bins

O cálculo da cobertura para illegal_bins é exatamento o mesmo para ignore_bins.

A diferença entre os dois é que no caso de detectados illegal_bins, a simulação reporta um erro.

Não são reportados erros no caso de ignore_bins.

Illegal_bins têm precedência sobre quaisquer outros bins, o que implica que eles resultam em um erro em tempo de execução, mesmo caso eles estejam incluídos em um outro bin.

Page 74: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network

BRAZIL-IPBRAZIL-IP

74

Cobertura Funcional

Cobertura cruzada (cross-coverage)

Page 75: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 75

BRAZIL-IPBRAZIL-IP

Cossimulação

• Aqui: SystemVerilog + C(VHDL e SystemVerilog pode ser feito também)

• Para quê?– Usar C para o modelo de referência e SystemVerilog para TL e

RTL.

• Sintaxe usando a DPI– Exemplos:

import “DPI-C” real function cos(real x);import “DPI-C” void function my_function(int y);import “DPI-C” task my_task();

Page 76: SystemVerilog para Verificação funcional com OVMlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_TLM_open.pdf · 2014. 12. 5. · Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr,

The Brazil-IP Network 76

BRAZIL-IPBRAZIL-IP

Cossimulação

• Usando a função ou task importada no código:– Como uma função ou task normal de SystemVerilog.– Exemplo:

cos_a = cos(a);my_function(b);