Top Banner
The BrazilIP Network BRAZIL IP BRAZIL IP Elmar Melcher UFCG [email protected] Curso do Brazil-IP SystemVerilog para descrição RTL
59

SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG [email protected]

Dec 20, 2018

Download

Documents

vuonghuong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

Elmar Melcher

UFCG

[email protected]

Curso do Brazil-IP

SystemVerilog paradescrição RTL

Page 2: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 2

BRAZIL IPBRAZIL IP

Fluxo de projeto (simplificado)

Especificação

Descrição comportamental

Descrição estrutural

Layout

Função

Descrição RTL

Função & Timing

Função & Timing

Função & Timing

consumo, área, etc.

Page 3: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 3

BRAZIL IPBRAZIL IP

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;

Page 4: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 4

BRAZIL IPBRAZIL IP

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

Representaçãográfica vs textual

Page 5: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 5

BRAZIL IPBRAZIL IP

✔ Expressar ações concorrentes✔ Expressar tempo (atraso, clock)✔ Permitir descrição comportamental, estrutural e

física✔ Permitir mesclar diferentes vistas de diferentes

subsistemas✔ Permitir simulação, síntese e verificação✔ Ser fácil e seguro de usar

Propriedades desejáveisde uma HDL

Page 6: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 6

BRAZIL IPBRAZIL IP

Exemplos de outras HDLs

Verilog 1995, 2001, 2005 SystemC VHDL (VLSI HDL - Very Large Scale

Integration Hardware Description Language) Abel, Palasm, Cupl, OCCAM, Handle-C, ELLA. . .

Page 7: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 8: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 tá faltando VHDL

SystemVerilog vs. VHDL

Page 9: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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

Page 10: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 10

BRAZIL IPBRAZIL IP

Propriedades de SystemVerilog

Expressar ações concorrentes

Expressar tempo (atraso, clock)

Permitir descrição TL, RTL, estrutural e física

Permitir mesclar diferentes vistas de diferentes subsistemas

Permitir simulação, síntese e verificação

Ser fácil e seguro de usar

Page 11: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 11

BRAZIL IPBRAZIL IP

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 12: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 12

BRAZIL IPBRAZIL IP

Breve Histórico

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

Page 13: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 13

BRAZIL IPBRAZIL IP

Código bonito✔ 50% é comentário✔ Todas as declarações tem comentário✔ Um module ou class não ultrapassa 100 linhas (uma

página na tela)✔ 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 14: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 14

BRAZIL IPBRAZIL IP

➢ 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 15: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 15

BRAZIL IPBRAZIL IP

*_clk sinal de relógio*_next sinal antes de registrá-lo*_n sinal ativo nível baixo*_xi entrada do circuito*_xo saída do circuito

Código bonitoSufixo de identificadores

Page 16: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 16

BRAZIL IPBRAZIL IP

Comentários

/* Comentario atravessandovarias linhas */

// Comentario ateh o fim da linha

Cuidado com acentos á é ô à etc.

Page 17: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 17

BRAZIL IPBRAZIL IP

➢ NúmerosDecimal, hexadecimal, binário com tamanho em bits:6'd33, 8'hA6, 4'b1101default: decimal positivo sem tamanhopermitido usar _ + -8'b1001_0011

➢ Cadeias de caracteres"Delimite usando aspas numa mesma linha"Limitado a 1024 caracteres

Convenções Léxicas

Page 18: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 18

BRAZIL IPBRAZIL IP

➢ IdentificadorA ... Za ... zUnderscore

➢ Primeiro caractere de um identificador não pode ser um dígito

➢ SystemVerilog diferencia letras maiúsculas de minúsculas (case sensitive)

Convenções Léxicas

Page 19: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 19

BRAZIL IPBRAZIL IP

Variável de 1 bitlogic nome;

Um vetor de bitslogic [msb : lsb] nome;

Enumeraçãoenum 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 (sintetizáveis)

Page 20: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 20

BRAZIL IPBRAZIL IP

● Memória

logic [msb : lsb] memory1 [upper : lower];

● Exemplologic [3:0] mem [63:0];// An array of 64 4-bit registers

logic mem [4:0];// An array of 5 1-bit registers

Tipos de dados (sintetizáveis)

Page 21: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 21

BRAZIL IPBRAZIL IP

Outros Tipos de Dados

integer j; //32 bits incluindo 'z' e 'x' e sinal (compl. 2)

Page 22: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 22

BRAZIL IPBRAZIL IP

Tipos de Dados

Tipos sintetizáveis: default é sem sinal.

Tipos não sintetizáveis: default é com sinal.

Ex.: logic [15:0] value;value = [0 : 65,536].

Ex.: shortint value;value = [-32,768 : 32,767]

Page 23: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 23

BRAZIL IPBRAZIL IP

Operadores lógicos unários

➔ z é tratado como x

~ negação bit a bit

! negação lógica& “e” bit a bit| “ou” bit a bit^ “ou” exclusivo- negativo+ positivo

Page 24: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 24

BRAZIL IPBRAZIL IP

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 25: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 25

BRAZIL IPBRAZIL IP

Operadores lógicos binários➔ Deslocamento lógico (com preenchimento com ‘0’)➔ Deslocamento negativo não pode<< (esquerda) >> (direita)

➔ Deslocamento aritmético<<< (esquerda) >>> (direita)

➔ Comparação== != < <= > >=

➔ Lógico| & ^ || &&

Page 26: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 26

BRAZIL IPBRAZIL IP

Operador condicional

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

➔ Para expressões simples é útil.➔ Usá-lo aninhando é suicídio.➔ Prefira estruturas if ... else.

Page 27: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 27

BRAZIL IPBRAZIL IP

Precedência de operadores

+ - ! ~ (unario) mais

+ - (binario)

<< >>

< <= => >

== !=

&

^

|

&&

||

?: (condicional) menos

Page 28: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 28

BRAZIL IPBRAZIL IP

● `define – (Similar a #define em C) usado para definir parâmetro global

● Exemplo:`define BUS_WIDTH 16logic [`BUS_WIDTH - 1 : 0] SystemBus;

● `include – usado para incluir outro arquivo

● Exemplo:`include “./fulladder.svh”

Diretivas de Compilação

Page 29: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 29

BRAZIL IPBRAZIL IP

Compiler Directives

parameter – used to define global parameter; better than `define

Example: parameter BUS_WIDTH = 16; logic [ BUS_WIDTH - 1 : 0 ] System_Bus;

Page 30: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 30

BRAZIL IPBRAZIL IP

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 31: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 31

BRAZIL IPBRAZIL IP

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 32: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 32

BRAZIL IPBRAZIL IP

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 33: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 33

BRAZIL IPBRAZIL IP

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 34: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 34

BRAZIL IPBRAZIL IP

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 dchild_mod

a b c d

Conexão de instâncias de modules

parent_mod

Page 35: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 35

BRAZIL IPBRAZIL IP

Parametrização de modules

- Na hora de declarar o module:

module dpcm #(parameter N=10) (input a, ..., output b, ...);

- Na hora de instanciá-lo:

dpcm dpcm_i #(.N(20)) (.a(x), ..., .b(y), ...);

Page 36: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 36

BRAZIL IPBRAZIL IP

Existem dois:initial : Executa uma única vez no início da simulação,

NÃO sintetizávelalways_comb : Executa repetidamente, sintetizável

Exemplo:

…initial begin Sum <= 0; Carry <= 0;end…

…always_comb begin Sum <= A ^ B; Carry <= A & B;end…

Construções Procedurais

Page 37: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 37

BRAZIL IPBRAZIL IP

Descrição de Lógica Combinacional

– Atribuições– Estruturas Condicionais

• if• case

– Exemplo• Multiplexador

Page 38: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 38

BRAZIL IPBRAZIL IP

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 39: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 40: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 40

BRAZIL IPBRAZIL IP

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

if

Page 41: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 41

BRAZIL IPBRAZIL IP

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 42: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 43: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 43

BRAZIL IPBRAZIL IP

Instrução CaseExemplo:

case (X) 2’b00: Y <= A + B; 2’b01: Y <= A – B; 2’b10: Y <= A / B;endcase

case

Page 44: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 45: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network 45

BRAZIL IPBRAZIL IP

Descrição RTL

– Sistemas seqüenciais síncronos• reset síncrono e assíncrono

– Exemplos• contador• registro de deslocamento

– FSM

Page 46: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 47: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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) case (select) 0: y <= a; 1: y <= b; 2: y <= c; default: y <= d; endcaseendmodule

Reset síncrono

Page 48: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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

Registrador de deslocamento

Page 49: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 50: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 51: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 (cnt) begin if (ud) count <= count +1; else count <= count –1; endendmodule

Contador

Page 52: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

Quando a sequência das ações no seu projeto dependem do estado de um elemento seqü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 53: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 54: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 55: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 56: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 57: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 58: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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 59: SystemVerilog para descrição RTL - lad.dsc.ufcg.edu.brlad.dsc.ufcg.edu.br/lad/uploads/Lad/BVM_SV_RTL_open.pdf · The BrazilIP Network BRAZIL IP Elmar Melcher UFCG elmar@dsc.ufcg.edu.br

The BrazilIP Network

BRAZIL IPBRAZIL IP

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