ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I Projeto de Somador com e sem Sinal Qualificadores César A. M. Marcon
Planejando a Descrição de um Somador 2 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 0 0 1 1 A B 1 0 0 0 S S igual a 8
Dividindo para Conquistar (Somador de 1 bit) 3 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
Dividindo para Conquistar (Somador de 1 bit) 4 Qual é o próximo passo? Extrair as funções da tabela verdade E agora? s = a xor b carry = a and b Descrever as funções em Hardware Qual recurso utilizar? Linguagem VHDL
Dividindo para Conquistar (Somador de 1 bit) 5 INTERFACE EXTERNA: entity Especifica somente a interface Não contém definição do comportamento a b HalfAdd s carry entity HalfAdd is port ( a, b: in std_logic; s, carry: out std_logic ); end HalfAdd;
Dividindo para Conquistar (Somador de 1 bit) 6 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;
Somador de 1 bit Completo 7 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 b cin Add s cout Como fazer agora para conseguir implementar todo o vetor? Uma possibilidade é implementar vários módulos de 1 bit em um par entidadearquitetura
Somador Completo de 4 Bits 8 B 3 A 3 B 2 A 2 B 1 A 1 B 0 A 0 Cout Cout 3 Add 3 Cout 2 Cin 3 Add 2 Cout 1 Cin 2 Add 1 Cout 0 Cin 1 Add 0 0 S 3 S 2 S 1 S 0 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;
Somador Completo de 4 Bits 9 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
Qualificadores 10 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
Qualificadores 11 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
Qualificadores 12 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) X++; Y++; beq X, Y, Salto inc X 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
Qualificadores 13 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
Revendo Representações Numéricas 14 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 * 2 p 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
Revendo Representações Numéricas 15 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 Exercício: -b * 2 p, para o primeiro bit; b * 2 p, para demais bits 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
Planejando Construir um Somador com Sinal 16 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
Exercício 17 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