Você está na página 1de 17

ORGANIZAÇÃO E ARQUITETURA DE

COMPUTADORES I

Projeto de Somador
com e sem Sinal

Qualificadores

César A. M. Marcon
2

Planejando a Descrição de um Somador

• Como descrever uma soma?


– S <= A + B;
• Como esta soma pode ser realizada em hardware?
– Dividir as entradas e saídas em vetores de bits
• Exemplo:
– A e B são vetores de 4 bits
– A contém 5 e B contém 3 0 1 0 1 A
+ 0 0 1 1 B

1 0 0 0 S

– S igual a 8
3

Dividindo para Conquistar (Somador de 1 bit)

• O que fazer com cada bit?


– Descrever em hardware uma função que implementa a operação de
soma deste bit
• Qual é a função?
– Supondo a soma de dois bits, para cada par de bit somado existem
duas saídas: o vai um (carry) e o resultado da soma
• Como implementar a função?
– Por exemplo uma tabela verdade

a b s (soma) carry
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
4

Dividindo para Conquistar (Somador de 1 bit)

• Qual é o próximo passo?


– Extrair as funções da tabela verdade
• s = a xor b
• carry = a and b

• E agora?
– Descrever as funções em Hardware

• Qual recurso utilizar?


– Linguagem VHDL
5

Dividindo para Conquistar (Somador de 1 bit)

• INTERFACE EXTERNA: entity


– Especifica somente a interface
– Não contém definição do comportamento

a s
HalfAdd
b carry

entity HalfAdd is
port
(
a, b: in std_logic;
s, carry: out std_logic
);
end HalfAdd;
6

Dividindo para Conquistar (Somador de 1 bit)

• COMPORTAMENTO : architecture
– Especifica o comportamento da entity
– Deve ser associada a uma entity específica
– Uma entity pode ter associada várias architectures
(diferentes formas de implementar um mesmo módulo)

architecture HA of HalfAdd is
begin
s <= a xor b;
carry <= a and b;
end HA;
7

Somador de 1 bit Completo


• A arquitetura HD, apresentada é suficiente para descrever uma soma de um
estágio?
– Não, falta considerar o vai um do estágio anterior
• Exercício::
– Fazer um novo par entidade-arquitetura que implementa uma soma completa. Fazer a
tabela verdade e a entidade e a arquitetura.
– Chame esta entidade de Add (será usada mais adiante)

a s
b Add
cin cout

• Como fazer agora para conseguir implementar todo o vetor?


– Uma possibilidade é implementar vários módulos de 1 bit em um par entidade-
arquitetura
8

Somador Completo de 4 Bits

B3 A3 B2 A2 B1 A1 B0 A0

Cout3 Cout2 Cout1 Cout0


Cout Add3 Add2 Add1 Add0 0
Cin Cin Cin
3 2 1

S3 S2 S1 S0

entity Adder4Bits is
port
(
A, B: in std_logic_vector(3 downto 0);
cout: out std_logic;
S : out std_logic_vector(3 downto 0)
);
end Adder4Bits;
9

Somador Completo de 4 Bits


library IEEE;
use IEEE.std_logic_1164.all;

architecture Somador of Adder4Bits is


signal c: std_logic_vector(3 downto 0);
begin
A0: entity Add port map(cin=>'0', A=>A(0),B=>B(0),cout=>c(0),s=>S(0));
A1: entity Add port map(cin=>c(0),A=>A(1),B=>B(1),cout=>c(1),s=>S(1));
A2: entity Add port map(cin=>c(1),A=>A(2),B=>B(2),cout=>c(2),s=>S(2));
A3: entity Add port map(cin=>c(2),A=>A(3),B=>B(3),cout=>c(3),s=>S(3));
cout <= c(3);
end Somador;

• Perguntas e exercícios:
– A descrição acima é estrutural ou comportamental? Porque?
– Para que serve o cout do somador de 4 bits, já que não há mais estágios
– Faça um somador de 8 bits, tendo como base o somador de 4 Bits descrito
acima
10

Qualificadores

• Como operações aritméticas podem informar o fluxo de controle


sobre o resultado de suas operações?
– Com qualificadores! Mas o que é isto?
• Note: Comandos de alto nível são compilados para operações
suportadas pela arquitetura alvo. Estas operações são executadas por
unidades tais como os somadores descritos aqui. Exemplo:

if(X != Y)
X++;
Y++;

Em uma linguagem de montagem do processador MIPS poderia ser


implementado como

beq X, Y, Salta
inc X
Salta:
inc Y
11

Qualificadores

• Como a instrução de montagem é implementada em


hardware?
Uma comparação, tal como descrito abaixo, pode ser implementada com
uma subtração!
Caso subtração resulte em 0, então os valores subtraídos são iguais
beq X, Y, Salta
• Como implementar uma subtração em hardware?
• Utilizando circuitos somadores e considerando operandos com sinal
• Voltando e reformulando a pergunta inicial. Como, neste
caso, os somadores podem informar o fluxo de controle
sobre o resultado de suas operações?
• Utilizando uma porta de um bit, que informe se a operação resultou, ou
não, em 0
• Este bit é um qualificador, também chamado de bit de status, ou flag.
Neste caso, a flag de ZERO
12

Qualificadores

• Com qualificadores poderíamos reler a descrição C/Java, descrita a


seguir, com uma de linguagem de montagem equivalente no MIPS

if(X != Y) beq X, Y, Salto


X++; inc X
Y++; Salto:
inc Y

Da seguinte forma

Atribui 1 para Z se X + (–Y) der zero, senão atribui 0


Se Z for igual a 1 vai para Salto, senão segue o código
X recebe X mais 1
Salto:
Y recebe Y mais 1

• Neste caso Z é um qualificador que indica que a operação deu 0


13

Qualificadores

• Existem mais qualificadores possíveis. Aqui analisaremos apenas 4, com


suas abreviaturas
– Resultado da operação é zero (Z)
• Qualificador Z recebe 1 quando todos os bits do resultado de uma operação forem 0, senão
recebe 0
– Resultado da operação é um número negativo (N)
• Qualificador N recebe 1 quando o bit mais significativo do resultado de uma operação for 1,
(representação de um número negativo em complemento de 2) senão recebe 0
– Não foi possível representar o resultado da operação com números sem sinal (carry,
ou apenas C)
• Qualificador C recebe 1 quando o último estágio do somador gerar um “vai um”
– Não foi possível representar o resultado da operação com números com sinal
(overflow, ou apenas Ov, ou também V)
• Qualificador V recebe 1 quando a soma de dois positivos der negativa, a soma de dois
negativos der positiva, um positivo subtraído de um negativo der negativo, um negativo
subtraído de um positivo der positivo, senão recebe 0
• Conforme os tipos de dados que estamos trabalhando em alto nível, a
informação dos qualificadores pode ser utilizada pelos compiladores para
gerar linguagem de montagem adequada
– Qualificadores Z e C são usados em operações aritméticas de números sem sinal
– Qualificadores Z e N são usados em operações lógicas
– Qualificadores Z, N e V são usados em operações aritméticas de números com sinal
14

Revendo Representações Numéricas

• Representação de números sem sinal


– Notação posicional
– Cada bit tem exatamente o peso de sua posição
– O valor do bit (b = 0, 1) é multiplicado pela base (2) elevada na posição (p)
b * 2p
– O valor do número é obtido com a soma de todos os bits com seus pesos
parciais
– Exercício:
• Calcule o intervalo de representação numérico de um inteiro de 16 bits
• Verifique se é possível armazenar o número 1034 em 10 bits
• Realize as seguintes somas em 8 bits (primeiro converta para número binário):
a. 129 + 76
b. 150 + 200
– Como saber se uma operação de número sem sinal teve um resultado
correto?
• Analisando o qualificador carry
15

Revendo Representações Numéricas

• Representação de números com sinal


– Em complemento de 2, temos a mesma notação posicional, porém o bit
mais significativo vale menos, enquanto os demais valem mais
-b * 2p, para o primeiro bit;
b * 2p, para demais bits
– Exercício:
• Calcule o intervalo de representação numérico de um inteiro de 16 bits
• Verifique se é possível armazenar os seguintes números em 10 bits
a. -512
b. 345
• Realize as seguintes somas em 8 bits (primeiro converta para número binário):
a. -129 - 76
b. 150 - 200
– Como saber se uma operação de número com sinal teve um resultado
correto?
• Analisando o qualificador overflow
16

Planejando Construir um Somador com Sinal

• O que deve ser alterado no hardware de um somador, quando é


considerado o sinal?
– Deve ser inserido o cálculo do qualificador de overflow (V)
• Entendendo melhor
– Overflow significa que uma operação aritmética com sinal não teve o
resultado correto, pois não foi possível representar todo o número.
– Situações em que isto pode acontecer:
• Soma de dois inteiros positivos e resultado um inteiro negativo
• Soma de dois inteiros negativos e resultado um inteiro positivo
• Subtrair um inteiro positivo de um inteiro negativo e o resultado der negativo
• Subtrair um inteiro negativo de um inteiro positivo e o resultado der positivo

• Como obter o cálculo deste qualificador?


– Com ou exclusivo entre o carry do último estágio e do penúltimo estágio
17

Exercício

1. Implementar um somador de 4 bits com sinal, levando em


consideração os qualificadores necessários
2. Implementar um somador de 4 bits com e sem sinal, levando em
consideração os qualificadores necessários

Você também pode gostar