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

Slides:



Advertisements
Apresentações semelhantes
Tópicos em System-Level
Advertisements

SystemVerilog: Síntese de Lógica combinatória Função lógica combinatória pode ser representada como: logic_output(t) = f(logic_inputs(t)) Regras Evite.
1 Hardware Description Language (HDL) Para quê precisamos de uma Linguagem de Descrição de Hardware ? Modelar, Representar e simular hardware digital Concorrência.
Do DRIP ao DRIP RTR Ivan Saraiva Silva. DRIP - Dynamically Reconfigurable Image Processor Baseado no processador de vizinhança NP9 Processador matricial.
Curso: Banco de Dados I Análise de Sistemas PUC Campinas
Projecto de Hardware com FPGAs
VHDL - VHSIC Hardware Description Language
Fernando Moraes e Ney Laert Vilar Calazans
GAPH - PPGCC - FACIN - PUCRS
BRAZIL IP The BrazilIP Network BRAZIL IP The BrazilIP Network Verificação funcional por simulação Curso do projeto Fênix Agosto 2003 Elmar Melcher UFCG.
Ney Laert Vilar Calazans
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
Sistemas Digitais Projeto RTL – Unidade de Execução
Unidades de Execução e de Controle Sistemas Digitais.
Verilog AULA - 3.
VHDL AULA - 2.
Lógica reconfigurável por hardware
Finite State Machines.
MC542 Organização de Computadores Teoria e Prática
VHDL Introdução Paulo C. Centoducatte fevereiro de 2005
Camila R. Rocha RA: Silvia C. M. Soares RA: Disciplina: Engenharia de Software I Professora: Eliane Martins SDL Specification and Description.
MC542 Organização de Computadores Teoria e Prática
Descrição de hardware em SystemC
Co-simulação Régio Michelin.
Especificação e Verificação funcional
Circuitos Sequenciais
Flip-Flop J-K.
Registradores de deslocamento (Shift Register)
VERILOG HDL (HARDWARE DESCRIPTION LANGUAGE)
Hardware Description Language (HDL)
O latch RS QN (QN)inv 1 S R QN+1 (QN+1)inv
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
O Flip-Flop Mestre/Escravo
Índice SUMÁRIO Introdução ao projeto de lógica seqüencial.
EPUSP – PTC Guido Stolfi
Engenharia de Software para Computação Embarcada
Engenharia de Software para Computação Embarcada
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Lógica reconfigurável por hardware
JAVA Linguagem Ambiente de Desenvolvimento
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
Uma Linguagem de Especificação de Sistemas
Validação de VHDL: técnicas e ferramentas
Criando uma Interface Modular Envolve a criação das três classes descritas anteriormente:  “Metaporta” de entrada.  “Metaporta” de saida.  Canal. Esse.
Prof. Manoel Eusebio Prof. Abel Guilhermino
MO801 - Tópicos em Arquitetura e Hardware Michele Tamberlini 05/2006
Hardware Description Language Aula 6 -VHDL Prof. Afonso Ferreira Miguel, MSc.
Hardware Description Language Aula 3 – AHDL (continuação)
Introdução a Organização e Arquitetura de Computadores
BRAZIL IP The BrazilIP Network SystemVerilog para Verificação funcional com OVM Curso do Brazil-IP Elmar Melcher UFCG
BRAZIL IP The BrazilIP Network Ferramenta para geração de templates para Testbench Projeto Fênix Fevereiro 2004 Karina Rocha G. da Silva UFCG
Hardware Description Language Aula 8 –Verilog HDL
Hardware Description Language Aula 4 –VHDL (introdução)
Hardware Description Language Aula 9 –Verilog HDL Prof. Afonso Ferreira Miguel, MSc.
Introdução à Linguagem VHDL
VERILOG.
VERILOG Monitoria Infra-Estrutura de Hardware Álvaro João – ajss Húgaro Bernardino – hbb Fred Rabelo - ferrf Leonardo Leandro – lsl2 Jéssica de.
Introdução a VHDL Monitoria de Digitais.
EDA – Electronic Design Assistant
1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital.
Projetando Sistemas Digitais com SystemVerilog
Verilog HDL. Introduzida em 1985 pela Gateway Design System Corporation Após 1990, passou a ser de domínio público, e em 1995 passou a ser padrão IEEE.
VHDL (Very High Speed Integrated Circuit HDL (VHSIC HDL)) GRECO CIn-UFPE.
Projeto de Circuitos Integrados Semidedicados
Lógica Programável e VHDL Prof. Marcio Cunha Aula 04 – Projeto de Máquina de Estados.
Projeto de Circuitos Integrados Semidedicados
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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.

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

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

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

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

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; 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

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; 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 IP The BrazilIP Network  linhas  palavras  letras Menos trabalho Menos erros Mais fácil de entender Mais espaço para comentários  Maior produtividade SystemVerilog vs. VHDL

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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 |&^||&&

BRAZIL IP The BrazilIP Network 33 Operador condicional ? :

BRAZIL IP The BrazilIP Network 34 Precedência de operadores

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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); (posedge reset or posedge clock) ‏ if (reset) Data_out <= 4'b0; else Data_out <= Data_in; endmodule Reset assíncrono

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

BRAZIL IP The BrazilIP Network  Shift register can be implemented knowing how the flip-flops are connected (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

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]; (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 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

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

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

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

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

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

BRAZIL IP The BrazilIP Network module mod_name ( input …, output … ); parameter size = … ; enum logic [size-1: 0] {state_0, state_1,... } state; (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 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 out_bit = 0 out_bit = 1 FSM Flow-Chart Detector de Seqüência

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; (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 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 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

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 …

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

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

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

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

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

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

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

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

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.

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.

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

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

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 clk) (a ##2 b) |=> (c) );

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.

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.

BRAZIL IP The BrazilIP Network 82 Cobertura Funcional covergroup 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

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

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!

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.

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

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

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.

BRAZIL IP The BrazilIP Network 89 Dúvidas ?