A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG

Apresentações semelhantes


Apresentação em tema: "BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG"— Transcrição da apresentação:

1 BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

2 BRAZIL 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

3 BRAZIL 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

4 BRAZIL IP The BrazilIP Network 4 Plano do curso continuação Descrição Estrutural –Instanciação de Primitvas –Instanciação e Conexão de Modules

5 BRAZIL IP The BrazilIP Network 5 Plano do curso continuação Descrição de Lógica Combinacional –Atribuições –Estruturas Condicionais if case –Exemplos Multiplexador

6 BRAZIL IP The BrazilIP Network 6 Plano do curso continuação Descrição RTL –Sistemas seqüenciais síncronos reset síncrono e assíncrono –Exemplos contador registro de deslocamento –FSM

7 BRAZIL IP The BrazilIP Network 7 Plano do curso fim Descrição TLM –initial –class –Transação e FIFO Portas Acesso (get, put)‏ Conexão –Assertions Seqüências –Cobertura –Subrotinas em C –Exemplos

8 BRAZIL 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

9 BRAZIL 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 consumo, área, etc.

10 BRAZIL IP The BrazilIP Network 10 Representação grá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; else y = a+b; A B F

11 BRAZIL 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

12 BRAZIL 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áveis de uma HDL

13 BRAZIL 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...

14 BRAZIL 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 process; end behv; SystemVerilog vs. VHDL

15 BRAZIL 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 down 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 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

16 BRAZIL IP The BrazilIP Network 31 77 687 17 40 339  linhas  palavras  letras Menos trabalho Menos erros Mais fácil de entender Mais espaço para comentários  Maior produtividade SystemVerilog vs. VHDL

17 BRAZIL 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

18 BRAZIL IP The BrazilIP Network 18 Especificação Descrição TL Descrição estrutural Layout Função Descrição RTL Função & Timing consumo, área, etc. Fluxo de projeto usando SystemVerilog

19 BRAZIL IP The BrazilIP Network 19 Histórico Verilog, 1981 SystemVerilog, padrão IEEE em 2005 OVM, Janeiro 2008

20 BRAZIL 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

21 BRAZIL 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_in Estilo Pascal: PacketAddr, DataIn Estilo Modula: packetAddr, dataIn Código bonito identificadores

22 BRAZIL 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 bonito sufixos de identificadores

23 BRAZIL IP The BrazilIP Network 23 Elementos Básicos –Comentários –Tipos de Dados –Representação de valores numéricos –Operadores –Diretivas de Compilador

24 BRAZIL IP The BrazilIP Network 24 Comentário /* Comentário atravessando várias linhas */ // Comentário até o fim da linha Cuidado com acentos á é ô à etc.

25 BRAZIL IP The BrazilIP Network 25  Números decimal, hexadecimal, binário com tamanho em bits: 6'd33, 8'hA6, 4'b1101 default: decimal sem tamanho permitido usar _ + - 8'b1001_0011  Cadeias de caracteres "Delimite usando aspas numa mesma linha" limitado a 1024 caracteres Convenções Lexicais

26 BRAZIL IP The BrazilIP Network 26  Identifier A... Z a... z 0... 9 Underscore  Primeiro caractere de um identifier não pode ser um dígito  Verilog diferencia letras maiúsculos de minúsculos Convenções Lexicais

27 BRAZIL IP The BrazilIP Network 27 Variável de 1 bit logic nome; Um vetor de bits logic [ msb : lsb ] nome; Enumeração enum logic [ size-1 : 0 ] { A, B, C } nome; Exemplos logic [ 3 : 0 ] cabo; // Um cabo de 4 fios enum logic [1:0] {red, yellow, green} lamp; Tipos de dados

28 BRAZIL IP The BrazilIP Network 28  Memória logic [ msb : lsb ] memory1 [ upper : lower ];  Exemplo logic [ 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

29 BRAZIL 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 flutuante string s; // string de caractères coisa p; // ponteiro para instancia de classe Não para síntese

30 BRAZIL 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

31 BRAZIL 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

32 BRAZIL IP The BrazilIP Network 32 Operadores lógicos binários Deslocamento com preenchimento com ‘0’ Deslocamento negativo não pode > (direita)‏ comparação == != >= lógico |&^||&&

33 BRAZIL IP The BrazilIP Network 33 Operador condicional ? :

34 BRAZIL IP The BrazilIP Network 34 Precedência de operadores

35 BRAZIL 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

36 BRAZIL IP The BrazilIP Network 36 Descrição Estrutural Module Instanciação de Primitivas Instanciação e Conexão de Modules

37 BRAZIL 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

38 BRAZIL IP The BrazilIP Network 38  Formato (portas lógicas primitivas): and G2(Carry, A, B);  Primeiro parâmetro (Carry) – Output  Outros 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

39 BRAZIL 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

40 BRAZIL 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

41 BRAZIL 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

42 BRAZIL IP The BrazilIP Network 42 Descrição de Lógica Combinacional –Atribuições –Estruturas Condicionais if case –Exemplo Multiplexador

43 BRAZIL 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 out sel_n sel_b sel_a Atribuição

44 BRAZIL 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

45 BRAZIL IP The BrazilIP Network 45  Formato: if ( condition ) procedural_statement else if ( condition) procedural_statement else procedural_statement if

46 BRAZIL 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 out Black Box 2x1 MUX

47 BRAZIL 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; end endmodule if

48 BRAZIL IP The BrazilIP Network 48  Instrução Case  Exemplo: case (X) 2’b00: Y <= A + B; 2’b01: Y <= A – B; 2’b10: Y <= A / B; endcase case

49 BRAZIL 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; endcase endmodule sel[1:0] a[3:0] y[3:0] b[3:0] c[3:0] d[3:0] case

50 BRAZIL IP The BrazilIP Network 50 Descrição RTL –Sistemas seqüenciais síncronos reset síncrono e assíncrono –Exemplos contador registro de deslocamento –FSM

51 BRAZIL 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

52 BRAZIL 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; endcase endmodule Reset síncrono

53 BRAZIL 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 Registrador de deslocamento

54 BRAZIL 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

55 BRAZIL IP The BrazilIP Network  Load counter with Data_in when load = 1  Counter counts when counter_on = 1  counts-up when count_up = 1  Counts-down when count_up = 0 Functional Specs. Contador

56 BRAZIL 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; end endmodule Contador

57 BRAZIL 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üencial  Exemplos: Sequence Detector Fancy counters Traffic Light Controller Data-path Controller Device Interface Controller etc. FSM

58 BRAZIL IP The BrazilIP Network Next-State Logic Memory Inputs 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

59 BRAZIL IP The BrazilIP Network Moore 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 Outputs ns cs State Register Next-State Logic Output Logic Tipos de FSM

60 BRAZIL IP The BrazilIP Network Mealy 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 Logic ns cs Tipos de FSM

61 BRAZIL 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

62 BRAZIL IP The BrazilIP Network Functionality: Detect two successive 0s or 1s in the serial input bit stream read_1_zeroread_1_one read_2_zeroread_2_one reset_state reset 01 1001 1 0 01 out_bit = 0 out_bit = 1 FSM Flow-Chart Detector de Seqüência

63 BRAZIL 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

64 BRAZIL 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

65 BRAZIL IP The BrazilIP Network 65 Descrição TLM –initial –Transação e FIFO Portas Acesso (get, put)‏ Conexão –Assertions Seqüências –Cobertura –Subrotinas em C –Exemplos

66 BRAZIL IP The BrazilIP Network 66 Construções Procedurais  Existem dois:  initial : Executa uma única vez no início da simulação, NÃO sintetizável  always_comb : Executa repetidamente, sintetizável  Exemplo: … initial begin Sum <= 0; Carry <= 0; end … always_comb begin Sum <= A ^ B; Carry <= A & B; end …

67 BRAZIL 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...

68 BRAZIL 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();

69 BRAZIL 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 elementos

70 BRAZIL 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

71 BRAZIL 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

72 BRAZIL 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); end endmodule

73 BRAZIL 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

74 BRAZIL 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

75 BRAZIL 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.

76 BRAZIL 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.

77 BRAZIL 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)‏

78 BRAZIL 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

79 BRAZIL 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) );

80 BRAZIL 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.

81 BRAZIL 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.

82 BRAZIL 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 que devem ser observados variável Número de vezes que um valor deve ocorrer durante a simulação para atingir cobertura completa Definindo um covergroup

83 BRAZIL IP The BrazilIP Network 83 Cobertura Funcional cg1 cg1_inst = new(); Instanciando um covergroup Define a instância cg1_inst do covergroup cg1 O uso de parênteses é opcional

84 BRAZIL 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!

85 BRAZIL 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.

86 BRAZIL 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};

87 BRAZIL 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:$]};

88 BRAZIL 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.

89 BRAZIL IP The BrazilIP Network 89 Dúvidas ?


Carregar ppt "BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG"

Apresentações semelhantes


Anúncios Google