Você está na página 1de 6

Sistemas Digitais Prof.

Antonio Ramirez Hidalgo

Modelagem a Nível de Portas (Gates)


OBJETIVOS
• Identificar portas lógicas primitivas fornecidas pelo Verilog.
• Entender a instanciação de portas, símbolos de portas e tabelas da verdade para as portas
and/or e buf/not.
• Entender como construir uma descrição Verilog desde o diagrama do circuito.

Tipos de Porta

Um circuito lógico pode ser projetado usando portas lógicas. Verilog suporta portas lógicas básicas
predefinidas como primitivas (primitives). Estas primitivas são instanciadas parecidas aos módulos
exceto que eles são predefinidos em Verilog e não precisam de uma definição de módulo. Todos os
circuitos lógicos podem ser projetados usando portas básicas. Existem duas classes de portas
básicas: and/or e buf/not.
Portas And/Or
Portas And/Or tem uma saída escalar e múltiplas entradas escalares. O primeiro terminal na lista
de terminais da porta é uma saída e os outros terminais são entradas. A saída de uma porta é
avaliada tão pronto como uma das entradas muda. As portas and/or disponíveis em Verilog são:
and, nand, or, nor, xor e xnor.

Para construir blocos lógicos as portas são instanciadas. O exemplo a seguir mostra portas de duas
entradas e uma saída.

//Portas de duas entradas e uma saída // Para mais de duas entradas; 3 entradas na
porta nand

wire OUT, IN1, IN2; nand na1_3input(OUT, IN1, IN2, IN3);

//Instanciações das portas básicas //instanciação de porta sem nome na instância

and a1(OUT, IN1, IN2); and (OUT, IN1, IN2); //instanciação aceita

nand na1(OUT, IN1, IN2);

or or1(OUT, IN1, IN2);

nor nor1(OUT, IN1, IN2);

xor x1(OUT, IN1, IN2);

xnor nx1(OUT, IN1, IN2);

1
Sistemas Digitais Prof. Antonio Ramirez Hidalgo

As tabelas da verdade para estas portas definem como vai ser a saída dependendo das entradas.

i1 i1 i1
and 0 1 x z nand 0 1 x z or 0 1 x z
0 0 0 0 0 0 1 1 1 1 0 0 1 1 x
i2 1 0 1 x x i2 1 1 0 x x i2 1 1 1 x 1
x 0 x x x x 1 x x x x x 1 x x
z 0 x x x z 1 x x x z x 1 x x

i1 i1 i1
nor 0 1 x z xor 0 1 x z xnor 0 1 x z
0 1 0 x x 0 0 1 x x 0 1 0 x x
i2 1 0 0 0 0 i2 1 1 0 x x i2 1 0 1 x x
x x 0 x x x x x x x x x x x x
z x 0 x x z x x x x z x x x x

Portas Buf/Not
Portas buf/not tem uma entrada escalar e uma ou mais saídas escalares. O último terminal da lista de
ports é conectado à entrada. Outros terminais são conectados às saídas. Nós estudaremos portas que
tem uma entrada e uma saída.
Duas portas básicas primitivas são fornecidas pelo Verilog : buf e not. Ver figura 3.1.
in out
in out
not
buf
Figura 3.1. Portas buf e not

Estas portas são instanciadas em Verilog como se mostra no exemplo a seguir.


//Instanciações das portas básicas
buf b1(OUT1, IN); buf in out not in out
not n1(OUT1, IN); 0 0 0 1
// Para mais de duas saídas 1 1 1 0
buf b1_2out(OUT1, OUT2, IN);
x x x x
//instanciação de porta sem nome na instância
z x z x
not (OUT1, IN); //instanciação de porta aceita

2
Sistemas Digitais Prof. Antonio Ramirez Hidalgo

Portas Bufif/Notif
Portas com um sinal de controle adicional sobre as portas buf e not são disponíveis. Estas são:
bufif1, bufif0, notif1 e notif0. Estas portas se propagam somente se seu sinal de controle está
ativo. Eles propagam z se seu sinal de controle está desativado.

in out in out

ctrl ctrl
bufif1 notif1

in out in out

ctrl ctrl

bufif0 notif0
Figura 3.2. Portas bufif e notif

ctrl ctrl
bufif1 0 1 x z notif1 0 1 x z
0 z 0 L L 0 z 1 H H
in 1 z 1 H H in 1 z 0 L L
x z x x x x z x x x
z z x x x z z x x x

ctrl ctrl
bufif0 0 1 x z notif0 0 1 x z
0 0 z L L 0 1 z H H
in 1 1 z H H in 1 0 z L L
x x z x x x x z x x
z x z x x z x z x x

3
Sistemas Digitais Prof. Antonio Ramirez Hidalgo

Estas portas só tem uma saída quando o sinal de controle é ativado.

//Instanciações das portas bufif

bufif1 b1(out, in, ctrl);

bufif0 b0(out, in, ctrl);

//Instanciações das portas notif

notif1 n1(out, in, ctrl);

notif0 n0(out, in, ctrl);

EXEMPLOS

1) Descrever em Verilog o seguinte circuito

2) Descrever em Verilog o seguinte circuito. Que faz este circuito?


i0 y0
U1A

i1 y1
U1B

U2A Out
i2 y2
U1C

i3 y3
U1D

S1n S0n

U3B U3A

S1

S0

3) Implementar um somador completo de 1 bit em verilog (nível de portas)sabendo que a equação


deste é:
sum = a ⊕ b ⊕ cin
cout = (a.b) + cin.(a ⊕ b)

4
Sistemas Digitais Prof. Antonio Ramirez Hidalgo

4) Usando o exemplo anterior implementar um somador completo de 4 bits (ripple carry) em


Verilog.
Solução:
Cada bloco apresentado na seguinte figura representa um somador completo de 1 bit, como se
mostra a seguir.

an bn
U2A
a s1 U2B

Full Adder b sum

cout (F.A) cin


fan U1A
c1
U1B
s2 U3A
cout

cin

sumn

Então um somador de 4 bits é formado por 4 somadores completos de 1 bit como se mostra a seguir.

a[3] b[3] a[2] b[2] a[1] b[1] a[0] b[0]

cout (F.A) c3 (F.A) c2 (F.A) c1 (F.A) cin


fa3 fa2 fa1 fa0

sum[3] sum[2] sum[1] sum[0]

5)Usando o exemplo anterior implementar em verilog (nível de portas) um somador BCD de 4 bits.
Solução:
Um somador BCD de 4 bits é representado pelo circuito mostrado abaixo.
Podemos notar que precisamos de 2 módulos de somador de 4 bits e três portas, portanto levando
em consideração o exemplo anterior onde temos o somador de 4 bits podemos instanciar este para
compor nosso somador BCD de 4 bits.

5
Sistemas Digitais Prof. Antonio Ramirez Hidalgo

B3
B2
B1
B0
Código BCD

Carry do
somador
y3 cout anterior
Somador 4 bits cin

A0
U1A S3 S2 S1 S0
x U2A A1
saida
Carry para A2
y1 U1B
o proximo A3
y2
somador BCD Código BCD

B3 B2 B1 B0

cin1
cout1 Somador 4 bits
não usado
Somador de correção

A3 A2 A1 A0

Soma BCD
S3
S2
S1
S0

Exercícios

1) Baseado no exemplo 5 implementar em Verilog um somador BCD de 8 bits. Instanciar o


somador BCD de 4 bits.
2) Implementar em Verilog um somador BCD de 4 bits usando a técnica que utiliza o principio do
“CARRY ANTECIPADO (CARRY LOOKAHEAD)”.
3) Baseado no exercício 2 implementar em Verilog um somador BCD de 8 bits (CARRY
LOOKAHEAD). Instanciar o somador BCD de 4 bits.
4) Implementar em verilog (nível de portas) um decodificador de 7 segmentos de 0 a 9 e outro de 0
a F.
5) Usando o exercício (2) mostrar o resultado nos displays de 7 segmentos (obs: os resultados serão
de 0 a 15)