BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br.
Post on 19-Apr-2015
107 Views
Preview:
Transcript
BRAZIL IPBRAZIL IP
The BrazilIP Network
Verilog
Curso do Brazil-IP
Elmar Melcher
UFCG
elmar@dsc.ufcg.edu.br
BRAZIL IPBRAZIL IP
The BrazilIP Network 2
Plano do curso início
• Introdução– Fluxo de projeto– Representação gráfica vs. textual– Requisitos de linguagens de descrição de
hardware– Comparação Verilog vs. VHDL– Evolução Histórica de Verilog– Código bonito
BRAZIL IPBRAZIL IP
The BrazilIP Network 3
Plano do curso continuação
• Elementos Básicos– Module
– Tipos de Dados
– Representação de valores numéricos
– Operadores
– Diretivas de Compilador
BRAZIL IPBRAZIL IP
The BrazilIP Network 8
Introdução
– Fluxo de projeto– Representação gráfica vs. textual– Requisitos de linguagens de descrição de
hardware– Comparação Verilog vs. VHDL– Evolução Histórica de Verilog
BRAZIL IPBRAZIL IP
The BrazilIP Network 9
Fluxo de projeto (simplificado)
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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 10
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
if (function==1)y = a-b;
elsey = a+b;
A
B
F
BRAZIL IPBRAZIL IP
The BrazilIP Network 11
Representação gráfica vs. textual
• 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
BRAZIL IPBRAZIL IP
The BrazilIP Network 12
• Expressar ações concorrentes• Expressar tempo (atraso, clock)• Permitir descrição TL, RTL, estrutural• 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 13
Exemplos de 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
Você acha a letra pequena ?
module dpcm(input reset, clock,
input signed [3:0] data_in,
output logic signed [3:0] data_out);
logic [3:0] prev;
always_ff @(posedge clock) if(reset) begin data_out <= 0; prev <= 0; end else begin data_out <= data_in - prev; prev <= data_in; end
endmodule
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_arith.all;
entity dpcm is port( reset: in std_logic; clock: in std_logic; data_in: in std_logic_vector(3 downto 0); data_out: out std_logic_vector(3 downto 0) );end dpcm;
architecture behv of dpcm is signal prev: std_logic_vector(3 downto 0);
begin process(clock) begin if (clock='1' and clock'event) then if (reset = '0') then data_out <= "0000"; prev <= "0000"; else data_out <= data_in - prev; prev <= data_in; end if; end if; end process;
end behv;
SystemVerilog vs. VHDL
BRAZIL IPBRAZIL IP
The BrazilIP Network
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_arith.all;
entity dpcm is port( reset: in std_logic; clock: in std_logic; data_in: in std_logic_vector(3 downto data_out: out std_logic_vector(3 downend dpcm;
architecture behv of dpcm is signal prev: std_logic_vector(3 downto 0);
begin process(clock) begin if (clock='1' and clock'event) then
module dpcm(input reset, clock,
input signed [3:0] data_in,
output logic signed [3:0] data_out);
logic [3:0] prev;
always_ff @(posedge clock) if(reset) begin data_out <= 0; prev <= 0; end else begin data_out <= data_in - prev; prev <= data_in; end
endmodule
O.K, mas agora 'ta faltando VHDL
SystemVerilog vs. VHDL
BRAZIL IPBRAZIL IP
The BrazilIP Network
31
77
687
17
40
339
linhaspalavras letras
Menos trabalho Menos erros Mais fácil de entender Mais espaço para comentários Maior produtividade
SystemVerilog vs. VHDL
BRAZIL IPBRAZIL IP
The BrazilIP Network 17
Propriedades de SystemVerilog
• Expressar ações concorrentes
• Expressar tempo (atraso, clock)
• Permitir descrição TL, RTL, estrutural
• 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 18
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 19
Histórico
• Verilog, 1981• SystemVerilog, padrão IEEE em 2005• OVM, Janeiro 2008
BRAZIL IPBRAZIL IP
The BrazilIP Network 20
Código bonito
• 50% é comentário• todas as declarações tem comentário• Um arquivo não ultrapassa 100 linhas• 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
BRAZIL IPBRAZIL IP
The BrazilIP Network 21
• 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 22
–*_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 23
Elementos Básicos
– Comentários– Tipos de Dados
– Representação de valores numéricos
– Operadores
– Diretivas de Compilador
BRAZIL IPBRAZIL IP
The BrazilIP Network 24
Comentário
/* Comentário atravessandovárias linhas */
// Comentário até o fim da linha
Cuidado com acentos á é ô à etc.
BRAZIL IPBRAZIL IP
The BrazilIP Network 25
Númerosdecimal, hexadecimal, binário com tamanho em bits:6'd33, 8'hA6, 4'b1101default: decimal sem tamanhopermitido usar _ + -8'b1001_0011
Cadeias de caracteres"Delimite usando aspas numa mesma linha"limitado a 1024 caracteres
Convenções Lexicais
BRAZIL IPBRAZIL IP
The BrazilIP Network 26
IdentifierA ... Za ... z0 ... 9Underscore
Primeiro caractere de um identifier não pode ser um dígito
Verilog diferencia letras maiúsculos de minúsculos
Convenções Lexicais
BRAZIL IPBRAZIL IP
The BrazilIP Network 27
Variável de 1 bitlogic nome;
Um vetor de bits
logic [ msb : lsb ] nome; Enumeração
enum logic [ size-1 : 0 ] { A, B, C } nome;
Exemploslogic [ 3 : 0 ] cabo; // Um cabo de 4 fiosenum logic [1:0] {red, yellow, green} lamp;
Tipos de dados
BRAZIL IPBRAZIL IP
The BrazilIP Network 28
Memória
logic [ msb : lsb ] memory1 [ upper : lower ];
Exemplologic [ 3 : 0 ] mem [ 0 : 63 ];// An array of 64 4-bit registers
logic mem [ 0 : 4 ];// An array of 5 1-bit registers
Tipos de dados
BRAZIL IPBRAZIL IP
The BrazilIP Network 29
Outros Tipos de Dados
integer 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 30
Operadores lógicos unários
z é tratado como x
~ negação bit por bit
! negação lógica| ou bit por bit^ ou exclusivo- negativo
BRAZIL IPBRAZIL IP
The BrazilIP Network 31
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 32
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 33
Operador condicional
<condição> ? <expressão_verdadeira> : <expressão_falsa>
BRAZIL IPBRAZIL IP
The BrazilIP Network 34
Precedência de operadores
+-!~ (unar io ) mais+- (b inar io )
<< >>< <= => >
== !=&^|
&&| |
?: (condic iona l ) menos
BRAZIL IPBRAZIL IP
The BrazilIP Network 35
`define – (Similar to #define in C) used to define global parameter
Example: `define BUS_WIDTH 16 logic [ `BUS_WIDTH - 1 : 0 ] System_Bus;
`include – used to include another file
Example`include “./fulladder.sv”
Compiler Directives
BRAZIL IPBRAZIL IP
The BrazilIP Network 37
Definição geral
module module_name (port_list );…variable declaration;…description of behavior;
endmodule
Exemplo
module HalfAdder ( input A, B, output logic Sum, Carry);
/* ta vazio */
endmodule
Module
BRAZIL IPBRAZIL IP
The BrazilIP Network 38
Formato (portas lógicas primitivas):and G2(Carry, A, B);Primeiro parâmetro (Carry) – OutputOutros parâmetros (A, B) - Inputs
Instanciação de Primitivas
module or_nand_1 ( input enable, x1, x2, x3, x4, output logic y); logic w1, w2, w3; or (w1, x1, x2); or (w2, x3, x4); or (w3, x3, x4); nand (y, w1, w2, w3, enable);endmodule
BRAZIL IPBRAZIL IP
The BrazilIP Network 39
Connexão por posição
module child_mod( input sig_a, sig_b, output logic sig_c,sig_d);// descrição do module
endmodule
module parent_mod; logic [3:0] g;
child_mod U1(g[3],g[1], g[0],g[2]);
// ordem é significativa
endmodule
parent_mod
Conexão de instâncias de modules
BRAZIL IPBRAZIL IP
The BrazilIP Network 40
Connexão explícita
module child_mod( input sig_a, sig_b, output logic sig_c,sig_d);// descrição do module
endmodule
module parent_mod; logic [3:0] g;
child_mod U1(.sig_c(g[0]), .sig_b(g[1]), .sib_d(g[2]), .sig_a(g[3]));
// ordem arbitrária endmodule
parent_mod
Conexão de instâncias de modules
BRAZIL IPBRAZIL IP
The BrazilIP Network 41
Connexão por casamento
module child_mod( input a, b, output logic c,d);// descrição do module
endmodule
module parent_mod; logic a,b,c,d;
child_mod U1( .* );
endmodule
a b c d
child_mod
a b c d
parent_mod
Conexão de instâncias de modules
BRAZIL IPBRAZIL IP
The BrazilIP Network 43
Fluxo de dados: Representa sinais de saída em função de sinais de entrada
Exemplo:always_comb out <= (sel & a) | (~sel & b);
sel
b
a
outsel_n
sel_b
sel_a
Atribuição
BRAZIL IPBRAZIL IP
The BrazilIP Network
Exemplo:module or_nand_2 ( input enable, x1, x2, x3, x4, output logic y); always_comb y <= !(enable & (x1 | x2) & (x3 | x4));endmodule
Atribuição
BRAZIL IPBRAZIL IP
The BrazilIP Network 45
Formato:if (condition) procedural_statementelse if (condition) procedural_statementelse procedural_statement
if
BRAZIL IPBRAZIL IP
The BrazilIP Network 46
Exemplo 1:
module mux_2x1(input a, b, sel, output logic out);always_comb
if (sel == 1) out <= a; else out <= b;
endmodule
if
a
b
sel
outBlack Box
2x1 MUX
BRAZIL IPBRAZIL IP
The BrazilIP Network
Exemplo 2:
module mux_4pri ( input a, b, c, d, sel_a, sel_b, sel_c, output logic y); always_comb begin if (sel_a == 1) y <= a; else if (sel_b == 0) y <= b; else if (sel_c == 1) y <= c; else y <= d; endendmodule
if
BRAZIL IPBRAZIL IP
The BrazilIP Network 48
Instrução CaseExemplo:
case (X) 2’b00: Y <= A + B; 2’b01: Y <= A – B; 2’b10: Y <= A / B;endcase
case
BRAZIL IPBRAZIL IP
The BrazilIP Network
Exemplo
module mux_4bits ( input [3:0] a, b, c, d, input [1:0] sel, output logic [3:0] y); always_comb case (sel) 0: y <= a; 1: y <= b; 2: y <= c; default: y <= d; endcaseendmodule
sel[1:0]
a[3:0]
y[3:0]b[3:0]
c[3:0]
d[3:0]
case
BRAZIL IPBRAZIL IP
The BrazilIP Network
Regra Geral: Uma variável será sintetizada como flip-flop se o seu valor á atribuída só no momento da transição de um sinal.
Exemplo:module D_reg4a ( input [3:0] Data_in, input clock, reset, output logic [3:0] Data_out); always_ff @ (posedge reset or posedge clock) if (reset) Data_out <= 4'b0; else Data_out <= Data_in;endmodule
Reset assíncrono
BRAZIL IPBRAZIL IP
The BrazilIP Network
Combinational logic that is included in a synchronous behavior will be synthesized with registered output.
Example:module mux_reg (
input [7:0] a, b, c, d, output logic [7:0] y, input [1:0] select); always_ff @ (posedge clock) if(reset) y<= 0; else case (select) 0: y <= a; 1: y <= b; 2: y <= c; default: y <= d; endcaseendmodule
Reset síncrono
BRAZIL IPBRAZIL IP
The BrazilIP Network
Shift register can be implemented knowing how the flip-flops are connected
always_ff @ (posedge clock) begin
if (reset) begin
reg_a <= 0;
reg_b <= 0;
reg_c <= 0;
reg_d <= 0;
end
else begin
reg_a <= Shift_in;
reg_b <= reg_a;
reg_c <= reg_b;
reg_d <= reg_c;
end
end
Registrador de deslocamento
BRAZIL IPBRAZIL IP
The BrazilIP Network
Shift register can be implemented using concatenation operation referencing the register outputs
module Shift_reg4 (
input Data_in, clock, reset,
output logic Data_out);
logic [3:0] Data_reg;
always_comb Data_out <= Data_reg[0];
always_ff @ (negedge reset or posedge clock) begin
if (reset == 0) Data_reg <= 0;
else Data_reg <= {Data_in, Data_reg[3:1]};
end
endmodule
Registrador de deslocamento
BRAZIL IPBRAZIL IP
The BrazilIP Network
Load counter with Data_in when load = 1
Counter counts when counter_on = 1counts-up when count_up = 1Counts-down when count_up = 0
Functional Specs.
Contador
BRAZIL IPBRAZIL IP
The BrazilIP Network
module up_down_counter ( input clk, rst, ld, ud, cnt, input [2:0] D_in, output logic [2:0] count);
always_ff @ (posedge rst or posedge clk) if (rst) count <= 0; else if (ld) count <= D_in; else if (count) begin if (ud) count <= count +1; else count <= count –1; endendmodule
Contador
BRAZIL IPBRAZIL IP
The BrazilIP Network
Quando a sequencia das ações no seu projeto dependem do estado de um elemento sequüencial, uma máquina de estados finitos (FSM) pode ser implementada.
FSMs são amplamente usadas em aplicações que requerem uma atividade seqüencialExemplos:
• Sequence Detector• Fancy counters• Traffic Light Controller• Data-path Controller• Device Interface Controller• etc.
FSM
BRAZIL IPBRAZIL IP
The BrazilIP Network
Next-StateLogic
MemoryInputs Current
State
Next State
All state machines have the general feedback structure consisting of: Combinational logic implements the next state logic
• Next state (ns) of the machine is formed from the current state (cs) and the current inputs
State register holds the value of current state
FSM
BRAZIL IPBRAZIL IP
The BrazilIP Network
Moore State MachineMoore State Machine
Next state depends on the current state and the inputs but the output depends only on the present state
next_state(t) = h(current_state(t), input(t)) output = g(current_state(t))
Inputs Outputsns cs
State Register
Next-State Logic
Output Logic
Tipos de FSM
BRAZIL IPBRAZIL IP
The BrazilIP Network
Mealy State MachineMealy State Machine
Next state and the outputs depend on the current state and the inputs
next_state(t) = h(current_state(t), input(t)) output(t) = g(current_state(t), input(t))
Inputs
Outputs
Next-State Logic
State Register
Output Logicns cs
Tipos de FSM
BRAZIL IPBRAZIL IP
The BrazilIP Network
module mod_name ( input … , output … );
parameter size = … ; enum logic [size-1: 0] {state_0, state_1, ... } state;
always_ff @ (negedge reset or posedge clk) if (reset == 0) state <= state_0; else
case (state) state_0: state <= state_1; state_1: ... ... default: state <= state_0;
endcase always_comb ...
endmodule
Estrutura típica de uma FSM
BRAZIL IPBRAZIL IP
The BrazilIP Network
Functionality: Detect two successive 0s or 1s in the serial input bit stream
read_1_zero read_1_one
read_2_zero read_2_one
reset_state
reset
0 1
10 0 1
1
0
0 1
out_bit = 0
out_bit = 0out_bit = 0
out_bit = 1 out_bit = 1
FSMFlow-Chart
Detector de Seqüência
BRAZIL IPBRAZIL IP
The BrazilIP Network
module seq_detect ( input clock, reset, in_bit, output logic out_bit); enum logic [2:0] { reset_state, read_1_zero, read_1_one, read_2_zero, read_2_one } state;
always_ff @ (posedge clock or posedge reset)
if (reset) state <= reset_state; else
case (state)
reset_state:
if (in_bit == 0)
state <= read_1_zero;
else
state <= read_1_one;
read_1_zero: if (in_bit == 0) state <= read_2_zero; else state <= read_1_one; read_2_zero: if (in_bit == 0) state <= read_2_zero; else state <= read_1_one; read_1_one: if (in_bit == 0) state <= read_1_zero; else state <= read_2_one;
Detector de Seqüência
BRAZIL IPBRAZIL IP
The BrazilIP Network
read_2_one: if (in_bit == 0) state <= read_1_zero; else state <= read_2_one; default: state <= reset_state; endcase
always_comb out_bit <= ( (state == read_2_zero) || (state== read_2_one));endmodule
Detector de Seqüência
BRAZIL IPBRAZIL IP
The BrazilIP Network 66
Construções ProceduraisExistem dois:
initial : Executa uma única vez no início da simulação,NÃO sintetizável
always_comb : Executa repetidamente, sintetizávelExemplo:
…initial begin Sum <= 0; Carry <= 0;end…
…always_comb begin Sum <= A ^ B; Carry <= A & B;end…
BRAZIL IPBRAZIL IP
The BrazilIP Network 67
Transação em OVM
• uma ovm_transaction class • exemplo:
class acesso 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 carosseiro do lixo vai passando...
BRAZIL IPBRAZIL IP
The BrazilIP Network 68
FIFO
• Na classe transmissor:– declaração:ovm_put_port #(acesso) vai;
– uso:acesso a;a = new();vai.put(a);
• Na classe receptor:– declaração:ovm_get_port #(acesso) vem;
– uso:acesso b;b = vem.get();
BRAZIL IPBRAZIL IP
The BrazilIP Network 69
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 elemento
s
BRAZIL IPBRAZIL IP
The BrazilIP Network 70
FIFO Exemplo• Fonte.sv:
class fonte extends ovm_threaded_component; ovm_put_port #(packet) to_destino; function new(string name, ovm_component parent); super.new(name,parent); to_destino = new("to_destino", this); endfunction
task run(); packet p; while(1) begin p = new(); assert(p.randomize()); to_destino.put(p); end endtask endclass
BRAZIL IPBRAZIL IP
The BrazilIP Network 71
FIFO Exemplo• Destino.sv
class destino extends ovm_threaded_component; ovm_get_port #(packet) from_fonte; function new(string name, ovm_component parent); super.new(name,parent); from_fonte = new("from_fonte", this); endfunction
task run(); packet pd; while(1) begin from_fonte.get(pd); end endtask endclass
BRAZIL IPBRAZIL IP
The BrazilIP Network 72
FIFO Exemplo• Conector.sv
module conector; `include "ovm.svh" `include "sdi.svh" `include "fonte.sv" `include "destino.sv" logic reset,clk;
fonte src = new("src", null); destino dest = new("dest", null);
tlm_fifo #(packet) fonte_destino = new("fonte_destino", null, 1); [...] initial begin src.to_destino.connect(fonte_destino.put_export); dest.from_fonte.connect(fonte_destino.get_export); endendmodule
BRAZIL IPBRAZIL IP
The BrazilIP Network 73
Assertions
• Em uma simulação usa-se assertions (monitors) para ver:– Se uma condição específica ocorre, ou– Se uma seqüência de eventos específica ocorre
• Estes monitores geram warnings ou erros:– Se condições ou seqüências de condições
requeridas falham– Se condições ou seqüências de condições não
permitidas ocorrem
BRAZIL IPBRAZIL IP
The BrazilIP Network 74
Assertions
• Dois principais usos de assertions:– Para controlar a interface de um módulo
• Quadros brancos na figura
– Para controlar os sinais dentro de um módulo• Quadros pretos na figura
BRAZIL IPBRAZIL IP
The BrazilIP Network 75
SystemVerilog Assertions (SVA)
• SVA Immediate Assertions– Sintaxe[ label ] assert boolean_expression [ action_block ] ;
– Testa uma expressão quando a instrução é executada em um código procedural.
if (enable) begin
enable_set_during_during_read_op_only :
assert (state == start_read || state == finish_read);
else $warning("enable set in state ", state); end
– Verifica que enable só é setado numa operação de leitura.
BRAZIL IPBRAZIL IP
The BrazilIP Network 76
Seqüências SVA
• Uma expressão de seqüência descreve um comportamento que pode durar um certo tempo.
É composto por expressões separadas por atrasos no tempo.
BRAZIL IPBRAZIL IP
The BrazilIP Network 77
Seqüências SVA
• O valor de atraso (delay) em uma expressão de seqüência pode ser
• ##n– Especifica o número de ciclos de clock que ocorrem entre
sequence expressions
• ##var– variável com valor inteiro maior ou igual a 0 (zero)
BRAZIL IPBRAZIL IP
The BrazilIP Network 78
Seqüências SVA
• Operador de Implicação
• sequence_expression |=> boolean_expression
– A ocorrência de uma sequência implica numa condição booleana no próximo ciclo de relógio.
• (a ##2 b) |=> (c)– a em '1' e 2 ciclos depois b em '1' implica em c estar em
'1' no cíclo seguinte
BRAZIL IPBRAZIL IP
The BrazilIP Network 79
SystemVerilog Assertions (SVA)
• SVA Concurrent Assertions– Sintaxe[ label ] assert property (property_expression)
[ action_block ] ;
– Podem descrever comportamento Booleano ou padrões de comportamento que atravessa ciclos de clock.
assert property ( @(posedge clk) (a ##2 b) |=> (c) );
BRAZIL IPBRAZIL IP
The BrazilIP Network
Cobertura Funcional
• Consiste em medir o número de vezes que uma variável recebe um determinado valor durante uma simulação:
– É fácil de interpretar;– Ajuda a identificar valores ou intervalos não
testados;– Quando a cobertura desejada é atingida a
simulação é encerrada.– Porém, a complexidade aumenta com o
aumento do intervalo de valores, e com a inclusão de cruzamentos, de combinações e de valores inválidos.
BRAZIL IPBRAZIL IP
The BrazilIP Network
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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 82
Cobertura Funcional
covergroup cg1 @(posedge clk); option.at_least 55;coverpoint b { bins b1 = {0, 1, 2, 3}; bins b2 = { [5:8], 9 };}
endgroup Valores quedevem serobservados
variável
Número de vezesque um valor deveocorrer durante asimulação para atingircobertura completa
• Definindo um covergroup
BRAZIL IPBRAZIL IP
The BrazilIP Network 83
Cobertura Funcional
cg1 cg1_inst = new();
• Instanciando um covergroup
Define a instânciacg1_instdo covergroup cg1
O uso deparêntesesé opcional
BRAZIL IPBRAZIL IP
The BrazilIP Network 84
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!
BRAZIL IPBRAZIL IP
The BrazilIP Network 85
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.
BRAZIL IPBRAZIL IP
The BrazilIP Network 86
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 o intervalo como sendo os valores 0, 2, e 7:
bins b1 = {0,2,7};
BRAZIL IPBRAZIL IP
The BrazilIP Network 87
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:$]};
BRAZIL IPBRAZIL IP
The BrazilIP Network 88
Cosimulaçã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 89
Dúvidas
?
top related