BRAZIL IPBRAZIL IP
The BrazilIP Network
SystemVerilog paraVerificação funcional
com OVM
Curso do Brazil-IP
Elmar Melcher
UFCG
BRAZIL IPBRAZIL IP
The BrazilIP Network 2
Plano do tópico início
IntroduçãoFluxo de projeto
Representação gráfica vs. textual
Requisitos de uma linguagem de descrição de hardware
Um exemplo de uma descrição SystemVerilog
Simulação com SystemVerilog
BRAZIL IPBRAZIL IP
The BrazilIP Network 3
Plano do tópico continuação
Descrição TLM em SystemVerilog
class
FIFO
BRAZIL IPBRAZIL IP
The BrazilIP Network 5
Introdução
Fluxo de projeto
Representação gráfica vs. textual
Requisitos de uma linguagem de descrição de hardware
Simulação com SystemVerilog
BRAZIL IPBRAZIL IP
The BrazilIP Network 6
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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 7
Representaçãográfica vs. textual
intuitivo
hierarquia
trabalhoso de fazer bem feito
trabalhoso de modificar
aprender a linguagem
hierarquia
rápido de fazer, mas precisa de comentários
rápido de modificar
fácil de processar automaticamente
A
B
F
if (function==1)y = a-b;
elsey = a+b;
BRAZIL IPBRAZIL IP
The BrazilIP Network 8
Representação gráfica melhor para domínio estrutural
Representação textual melhor para domínio comportamental, atingindo um nível de abstração maior
continuação
Representaçãográfica vs. textual
BRAZIL IPBRAZIL IP
The BrazilIP Network 9
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 10
Exemplos de outros HDLs
Verilog 1995
SystemC
VHDL (VLSI HDL (Very Large Scale Integration Hardware Description Language))
Abel, Palasm, Cupl, OCCAM, Handle-C, ELLA
. . .
BRAZIL IPBRAZIL IP
The BrazilIP Network 11
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 12
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 13
Histórico
Verilog, 1981
SystemVerilog, padrão IEEE em 2005
OVM, Janeiro 2008
BRAZIL IPBRAZIL IP
The BrazilIP Network 14
Código bonito50% é comentário
todas as declarações tem comentário
um module ou class não ultrapassa 50 linhas (uma página na tela)
identificadores refletem o que é o objeto identificado
indentação consistente
regras do SRS da Motorolaregras do Brazil-IP Network http://lad.dsc.ufcg.edu.br/fenix/metodologia
BRAZIL IPBRAZIL IP
The BrazilIP Network 15
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 16
*_clk sinal de relógio*_next sinal antes de registra-lo*_n sinal ativo nível baixo*_xi entrada do circuito*_xo saída do circuito
Código bonitosufixos de identificadores
BRAZIL IPBRAZIL IP
The BrazilIP Network 17
Comentário
/* Comentário atravessandovárias linhas */
// Comentário até o fim da linha
Cuidado com acentos á é ô à etc.
BRAZIL IPBRAZIL IP
The BrazilIP Network 18
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 19
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”
BRAZIL IPBRAZIL IP
The BrazilIP Network 20
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!
BRAZIL IPBRAZIL IP
The BrazilIP Network 21
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
BRAZIL IPBRAZIL IP
The BrazilIP Network 22
Fornecer sinais de entradamodule 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(.*);
endmodule
BRAZIL IPBRAZIL IP
The BrazilIP Network 23
Visualização de formas de onda
No início da simulação (para Cadence, pode ser diferente para Mentor):
$shm_open(“filename”);$shm_probe(a,b,s,c);
No fim da simulação:
$shm_close();
BRAZIL IPBRAZIL IP
The BrazilIP Network 24
Tipos de dados
logic [3:0] d; // verdadeiro/falso ( 1 bit) enum {A, B} s; // enumeraçãointeger j; // 32 bits incluindo 'z' e 'x' com sinal (compl.2)int i; // 32 bits, só '1' e '0'byte b; // 8 bits, só '1' e '0'longint l; // 64 bits, só '1' e '0'float f; // ponto flutuantestring s; // string de caractèrescoisa p; // ponteiro para instancia de classe
Não para síntese
BRAZIL IPBRAZIL IP
The BrazilIP Network 25
Operadores lógicos unários
z é tratado como x
~ negação bit a bit
! negação lógica& e bit a bit| ou bit a bit^ ou exclusivo- negativo
BRAZIL IPBRAZIL IP
The BrazilIP Network 26
Operadores aritméticos binários
Se um dos bits envolvidos for x ou z, todo o resultado é x.
*multiplicação / divisão % resto da divisão + soma - subtração
BRAZIL IPBRAZIL IP
The BrazilIP Network 27
Operadores lógicos binários
Deslocamento com preenchimento com ‘0’Deslocamento negativo não pode<< (esquerda) >> (direita)
comparação== != < <= > >=
lógico| & ^ || &&
BRAZIL IPBRAZIL IP
The BrazilIP Network 28
Operador condicional
<condição> ? <expressão_verdadeira> : <expressão_falsa>
BRAZIL IPBRAZIL IP
The BrazilIP Network 29
Precedência de operadores
+ - ! ~ (unario) mais
+ - (binario)
<< >>
< <= => >
== !=
&
^
|
&&
||
?: (condicional) menos
BRAZIL IPBRAZIL IP
The BrazilIP Network 31
Transação
- inicia num determinado momento no tempo
- termina num determinado momento no tempo
- contém dados e/ou operações
ex.: escrita numa memória, pacote ethernet, imagem de vídeo
BRAZIL IPBRAZIL IP
The BrazilIP Network 32
Transação em SystemVerilog
uma ovm_object class
exemplo:class acesso extends ovm_object; 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...
BRAZIL IPBRAZIL IP
The BrazilIP Network 33
FIFO
no módulo transmissor:declaração:ovm_put_port #(acesso) vai;
uso:acesso a;a = new();vai.put(a);
no módulo receptor:declaração:ovm_get_port #(acesso) vem;
uso:acesso b;b = vem.get();
BRAZIL IPBRAZIL IP
The BrazilIP Network 34
FIFO (cont.)
no módulo que instancia transmissor e receptor:declaração:tlm_fifo #(acesso) myfifo;myfifo = new(“myfifo”, this, 10);
conexão:tx_i.vai.connect(myfifo.put_export);rx_i.vem.connect(myfifo.get_export);
10 elementos
BRAZIL IPBRAZIL IP
The BrazilIP Network 35
Transações e FIFOs
Somente FIFOs (e não sinais) conectam source, driver, checker, Modelo de Referência 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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 36
Visualização de Transações
No início da simulação(para Cadence, pode ser diferente para Mentor):
$sdi_open(“nome_de_diretório”);
BRAZIL IPBRAZIL IP
The BrazilIP Network 37
Visualização de Transações (cont.)
No início de driver ou monitor:
integer record;
No lugar onde quer gravar uma transação
record = $sdi_transaction(“nome”,”tipo”,”label”,”descricao”);. . . aqui acontece a transação . . .$sdi_set_atribute(record, address);
$sdi_end_transaction(record);
BRAZIL IPBRAZIL IP
The BrazilIP Network 38
Randomização direcionada de transações
Por condições:class packet extends ovm_object;
rand int i;constraint i_range {
// aqui vai o direcionamento: i > 0; i < 16;}
endclass
BRAZIL IPBRAZIL IP
The BrazilIP Network 39
Randomização direcionada de transações
Direcionamento por distribuições: i dist { 0, 1, 2, 3 };unsando intervalos: i dist { [0:2] , 3 };Com pesos: i dist { [0:2] :/3, 3 :/1 };
BRAZIL IPBRAZIL IP
The BrazilIP Network 40
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.
e gravar transação de erroincrementa um contador de erros,
visualizar o contador junto às formas de onda e às transações.
BRAZIL IPBRAZIL IP
The BrazilIP Network 41
Cobertura funcional
O Plano de Teste 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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 42
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, Monitor e Actor podem medir cobertura funcional de transações e do handshake de sinais.
O Refmod deve medir a cobertura de funções executadas.
BRAZIL IPBRAZIL IP
The BrazilIP Network 43
Medir cobertura funcional
covergroup cg;coverpoint b { bins b1 = {0, 1, 2, 3}; option.at_least = 100;}
endgroup
Valores quedevem serobservados
Variável a ser coberta
Número de vezesque os valores devemocorrer durantea simulação
BRAZIL IPBRAZIL IP
The BrazilIP Network 44
Medir cobertura funcional
covergroup cg;coverpoint a { bins b1 = {0, 1, 2, 3}; bins b2[] = {0, 1, 2, 3}; option.at_least = 100;}
endgroup
*****ajeitar **********
BRAZIL IPBRAZIL IP
The BrazilIP Network 45
Cossimulação
Aqui: SystemVerilog + C(VHDL e SystemVerilog pode ser feito também)
Para quê?Quer usar C para o modelo de referência e SystemVerilog para TL e RTL.
BRAZIL IPBRAZIL IP
The BrazilIP Network 46
Cossimulação – como ?
SystemC compilado pelo gcc vira código objetoVerilog compilado pelo VCS vira código objetoO linker junta tudo em um só executável(Direct Kernel Interface)
Problemas:sincronização de dois tempos simuladosSynopsys resolve
comunicação entre sinais SystemC e sinais Verilogusuário precisa fornecer um arquivo de mapeamento
BRAZIL IPBRAZIL IP
The BrazilIP Network 47
Cossimulação – receita de bolo
Exemplo de arquivo de mapeamento duv.port:
Comando para criar um wrapper do DUV:
ccss_cosim -vcs -conn dki duv.v:duv -port duv.port
Comando para executar cosimulação:ccss_cosim -vcs -conn dki
duv.vdef:duv_i -sc_files tb.cpp -gen=sim -design tb
ocp_Clk 1 bit boolocp_MAddr 20 bitvector sc_uint
BRAZIL IPBRAZIL IP
The BrazilIP Network 48
Cosimulação – receita de bolo
No testbench tb.cpp é necessário acrescentar _if ao nome do módulo do duv, tanto no #include como na instanciação.
Comando para executar a cosimulação:ccss_cosim -vcs -conn dki
duv.vdef:duv_i -sc_files tb.cpp -gen=sim -design tb
Nome da instância, não do módulo
BRAZIL IPBRAZIL IP
The BrazilIP Network 49
Resumo
Source em SystemVerilog
Driver em SystemVerilog
Monitor em SystemVerilog
Modelo de referência em SystemVerilog
Checker em SystemVerilog
Testbench em SystemVerilog
Fonte de transações
Transforma transaçõesem sinais
BRAZIL IPBRAZIL IP
The BrazilIP Network 50
Resumo
Source em SystemVerilog
Driver em SystemVerilog
Monitor em SystemVerilog
Modelo de referência em SystemVerilog
Checker em SystemVerilog
Testbench em SystemVerilog
Transforma sinaisem transações
Modelo do DUV a nível de transação
BRAZIL IPBRAZIL IP
The BrazilIP Network 51
Resumo
Transações em SystemVerilog
Source em SystemVerilog
Driver em SystemVerilog
Monitor em SystemVerilog
Modelo de referência em SystemVerilog
Checker em SystemVerilog
Testbench em SystemVerilog
Compara transações
Junta tudo