BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG [email protected].

81
BRAZIL IP BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG [email protected]

Transcript of BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG [email protected].

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

BRAZIL IPBRAZIL IP

The BrazilIP Network

Verilog

Curso do Brazil-IP

Elmar Melcher

UFCG

[email protected]

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

• . . .

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

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

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

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

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

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

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

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

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

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

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

BRAZIL IPBRAZIL IP

The BrazilIP Network 19

Histórico

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

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

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

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BRAZIL IPBRAZIL IP

The BrazilIP Network 33

Operador condicional

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

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

BRAZIL IPBRAZIL IP

The BrazilIP Network 34

Precedência de operadores

+-!~ (unar io ) mais+- (b inar io )

<< >>< <= => >

== !=&^|

&&| |

?: (condic iona l ) menos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BRAZIL IPBRAZIL IP

The BrazilIP Network 45

Formato:if (condition) procedural_statementelse if (condition) procedural_statementelse procedural_statement

if

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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.

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

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)

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

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

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

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

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

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.

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

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.

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

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

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

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

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

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!

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

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.

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

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

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

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

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

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.

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

BRAZIL IPBRAZIL IP

The BrazilIP Network 89

Dúvidas

?