Você está na página 1de 47

LINGUAGEM DE

DESCRIÇÃO DE
HARDWARE

Prof. Marcos Morais


DEE/UFCG
2010
SUMÁRIO
 Níveis de abstração
 Fluxos de desenvolvimento
 Abordagens top-down e bottom-up
 Linguagens de descrição de hardware
 Verilog
 Descrição de circuitos combinacionais
 Atribuição contínua
 SystemVerilog: evolução de Verilog
NÍVEIS DE ABSTRAÇÃO E DOMÍNIOS
FLUXO DE DESENVOLVIMENTO

Especificação

= Função

Projeto
Arquitetural
= Função
Projeto
Lógico
= Função
Projeto
de Circuito
= Função
Temporização
Projeto
Potência
Físico
DESCRIÇÃO

 É possível descrever qualquer sistema (em


determinado nível de abstração) através de
seus elementos constituintes, como estão
relacionados e das suas semânticas.
 Ou seja, para descrever um sistema,
precisamos de:
 Módulos

 Conexões
DIAGRAMA ESQUEMÁTICO
 O método antigo de descrição era o
diagrama esquemático (esquema)
 O esquemático possui algumas vantagens:
 Descreve de forma visual.
 Pode ser formal, ou seja, entrada para o
processamento automático
 Descreve itens

 E muitas desvantagens (para sistemas


complexos):
DESCRIÇÃO COM HDL

 Uma HDL descreve um sistema (digital) de


forma textual
 Adequado ao fluxo de desenvolvimento onde
se utilizam ferramentas automáticas
 Permite a entrada em todos os níveis de
abstração *
 * Verilog não atingia os níveis mais altos de
abstração. SystemVerilog sim.
HDL E NÍVEIS DE ABSTRAÇÃO
 As HDLs descrevem um sistema digital em
vários níveis:
 Os projetos podem ser descritos desde um
nível muito abstrato - nível comportamental, até
o nível de layout

 Nivel comportamental – descreve as


funcionalidades do projeto sem detalhar a
implementação.
 Nível de netlist- componentes básicos em um
chip/FPGA.
COMO VERILOG É USADO
 Praticamente todo ASIC é projetado usando ou Verilog
(SystemVerilog atualmente) ou VHDL (uma linguagem
similar, mais prolixa)
 Modelagem comportamental com alguns elementos
estruturais
 “Subconjunto de síntese” é o que pode ser traduzido por
um sintetizador em uma netlist
 O projeto é escrito em Verilog
 Simulado exaustivamente para verificar a funcionalidade
 Sintetizado (o netlist é gerado)
 É feita análise de temporal para verificar as
temporizações
DESCRIÇÃO COM HDL
Especificações do Projeto

Descrições de procedimento

Descrições RTL (HDL)

Verificação Funcional de Testes

Síntese Lógica

Net List -- Nível-porta

Verificação lógica e teste

Floorplan Plano de Fundo Automático

Layout físico

Verificação de layout

Implementação
A LINGUAGEM VERILOG
 Originalmente uma linguagem de modelagem para
um simulador de lógica digital baseado em eventos
muito eficiente
 Mais tarde foi posto em uso como uma linguagem de
especificação para síntese lógica
 Atualmente, uma das duas linguagens mais
utilizadas em projeto de hardware digital (VHDL é a
outra)
 Praticamente todo chip (ASIC, genérico) ou circuito
em FPGA é desenvolvido usando uma destas duas
linguagens
 Combina estilos de modelagem estrutural e
comportamental
O todo e as partes

MODELAGEM ESTRUTURAL
VANTAGENS E DESVANTAGENS

 Pouco diferente dos métodos tradicionais de


projeto
 Principal vantagem a integração com as
outras formas de descrição de verilog
 Pode ser simulado em conjunto com
módulos em outros níveis
 Usado como formato intermediário
MÓDULOS E INSTÂNCIAS

 Estrutura básica de um módulo Verilog:


module mymod(out1, out2, in1, in2);
output out1;
output [3:0] out2;
Na convenção de
input in1; Verilog listamos
Input [2:0] in; as saídas
primeiro
endmodule
MULTIPLEXADOR A PARTIR DE PRIMITIVAS
module mux(f, a, b, sel);
output f;
Programas em Verilog são
input a, b, sel; feitos de módulos
and g1(f1, a, nsel), Cada módulo tem uma
g2(f2, b, sel);
or g3(f, f1, f2);
interface
not g4(nsel, sel); Módulos podem conter estrutura:
endmodule instâncias de primitivas e outros
módulos
MUX COM ATRIBUIÇÃO CONTÍNUA
module mux(f, a, b, sel);
output f;
input a, b, sel;
VLE varia com o VLD, estão
“unidos”
assign f = ~sel ? a : b;

Uma mudança no lado direito


endmodule
provoca reavaliação
ATRIBUIÇÃO CONTÍNUA
 Outra forma de descrever uma função combinacional
 Conveniente para especificações lógicas ou de caminho
de dados (datapath)
Define a larguras
do barramento
wire [8:0] sum;
Atribuição
wire [7:0] a, b; contínua:
wire carryin; permanentemente
coloca o valor de
assign sum = a + b + carryin; sum como sendo
a+b+carryin.
Recalculado
quando a, b ou
carryin muda
Mux com Primitiva Definida pelo Usuário
primitive mux(f, a, b, sel);
output f;
Comportamento definido
input a, b, sel;;
usando uma tabela verdade
table que inclui “don’t cares”
1?0 : 1;
0?0 : 0;
?11 : 1;
?01 : 0;
11? : 1;
00? : 0;
endtable
endprimitive
DECODIFICADOR 2 PARA 4
IMPLEMENTAÇÃO EM VERILOG
MULTIPLEXADOR 4 PARA 1
DESCRIÇÃO EM VERILOG
DESCRIÇÃO DO DECODIFICADOR EM
VERILOG-DATAFLOW 1
DESCRIÇÃO DO DECODIFICADOR EM
VERILOG-DATAFLOW 2
OPERADORES A NÍVEL DE BIT VERILOG
DESCRIÇÃO USANDO COMBINAÇÃO
DESCRIÇÃO USANDO DECISÃO BINÁRIA
ABORDAGENS TOP-DOWN E BOTTOM-UP

– Top-down
BS

SB SB SB SB

CB CB CB CB CB CB CB CB

– Botton-up
BS

SB SB SB SB

CB CB CB CB CB CB CB CB

28
BLOCOS FUNCIONAIS: SOMA
 Soma binária é usada frequentemente
 Desenvolvimento da soma:
 Meio-Somador (HA), um bloco funcional de 2 entradas
binárias,
 Somador-Completo (FA), um bloco funcional de 3
entradas binárias,
 Somador Ripple Carry, um arranjo iterativo que realiza
soma binária, e
 Somador Carry-Look-Ahead (CLA), uma estrutura
hierárquica para aumentar o desempenho (menor
atraso).
REPRESENTANDO HIERÁRQUIA

somador completo

meio somador meio somador

FULL_ADD
A SUM
HALF_ADD HALF_ADD
B U1 U2

Cin
OR CARRY

Nomes de instância

30
IMPLEMENTAÇÕES: MEIO-SOMADOR
 A implementação mais comum
para um meior somador é a

S = X⊕Y
C = X⋅Y

X
Y S

C
IMPLEMENTAÇÃO: SOMADOR COMPLETO
 Esquemático do somador
completo
Ai Bi
 Observe que é formado por Gi
2 meio-somadores

Pi
Ci

Ci+1 Si
SOMADORES BINÁRIOS
 Para somar vários operandos, juntamos os sinais
lógicos em vetores e usamos blocos funcionais que
operam nos vetores
Descrição Subscrito Nome
 Examplo: Somador de 4 bits 3210
com ripple carry: Soma as Carry In 0110 Ci
entradas A(3:0) e B(3:0) Parcela 1011 Ai
obtendo um vetor soma S(3:0) Parcela 0011 Bi
 Nota: A saída carry da célula Soma 1110 Si
i torna-se a entrada carry da Saída de Carry 0011 Ci+1
célula i + 1
SOMADOR BINÁRIO DE 4 BIT TIPO RIPPLE-
CARRY
 Um somador binário ripple-carry de 4 bits é
feito a partir de quatro somadores completos
de 1-bit:
B3 A3 B2 A2 B1 A1 B0 A0

C3 C2 C1
FA FA FA FA C0

C4 S3 S2 S1 S0
MEIO SOMADOR
SOMADOR COMPLETO A PARTIR DE MEIO
SOMADOR
SOMADOR BINÁRIO 4 BITS
VERILOG COMPORTAMENTAL DO
SOMADOR DE 4 BITS
INSTANCIANDO UM MÓDULO

 Instâncias de
module mymod(y, a, b);
 Aparecem como
mymod mm1 (y1, a1, b1); // Conecta por posição
mymod (y2, a1, b1),
(y3, a2, b2); // Nomes das instâncias
omitidos
// conecta por nome
mymod mm2 (.a(a2)), .b(b2), .y(c2));
PRIMITIVAS A NÍVEL DE PORTAS
 Verilog fornece os seguintes:
and nand AND/NAND lógicos
or nor OR/NOR lógicos
xor xnor XOR/XNOR lógicos
buf not buffer/inversor

Outros...

Usado geralmente na definição de bibliotecas


PRIMITIVAS A NÍVEL DE CHAVES
 Verilog também fornece mecanismos para
modelagem de transistores CMOS que se
comportam como chaves

 Não é usado normalmente

 Os circuitos elétricos com transistores são


simulados com SPICE ou similares (outro
formato de netlist)
PRIMITIVAS DEFINIDAS PELO USUÁRIO

 Maneira de definir portas e elementos


seqüenciais usando uma tabela verdade

 Usado para especificar uma biblioteca de


portas lógicas
 Não utilizaremos neste curso
VERILOG 1995, VERILOG 2001 E SYSTEMVERILOG

 Conexão de instâncias de módulos


 Portas ordenadas
 Portas com nome

 dff d1 (out, /*não usado*/, in, clock, reset);

 .<nome_porta>(<nome_variavel_ou_net)

 dff d1 (.q(out), .qb(/* não usado */,


.d(in), .clk(clock), .rst(reset) );
MÓDULOS E INSTÂNCIAS EM VERILOG2001 E
SYSTEMVERILOG
 Estrutura básica de um módulo Verilog:
module mymod(output out1, output [3:0] out2,
input in1, input [2:0] in2);

Como C ANSI
endmodule
CONEXÕES .NOME E .* IMPLÍCITAS

 Se o nome da porta for igual ao nome do


net, pode-se omitir o nome do net (os
parênteses)
 Ex: .data equivale a .data (data)

 .* quando todos os nomes forem iguais

 Alias clk = clock; (só para net types)


O QUE VIMOS HOJE

 Projetos digitais modernos (complexos)


utilizam linguagens de descrição de
hardware
 É possível expressar um sistema digital em
diversos níveis de abstração
 O nível estrutural é utilizado para definir
hierarquia e conectividade
 SystemVerilog é uma evolução de Verilog
Próxima aula

NÍVEL COMPORTAMENTAL E RTL