1.5 Descrição de Hardware
2.2.5 Arquiteturas de Somadores
Somadores são circuitos digitais importantes que são utilizados não somente em unidades lógicas aritméticas, mas também em outras partes de processadores para cál- culo de endereços, índices de tabelas e operações similares. Meio somadores e somadores completos de um bit são circuitos versáteis utilizados para construções de diversas arqui- teturas de somadores. Um circuito meio somador de um bit recebe dois bits de entrada x e y e produz um bit de soma 𝑠 = 𝑥 ⊕ 𝑦 = ¯𝑥𝑦 + 𝑥¯𝑦 e um bit de carry out 𝑐𝑜𝑢𝑡 = 𝑥𝑦. A Figura 11ilustra três possibilidades de implementação lógica do circuito [21].
Um circuito somador completo de um bit tem como entrada três bits x, y e 𝑐𝑖𝑛 e produz um bit de soma 𝑠 = 𝑥 ⊕ 𝑦 ⊕ 𝑐𝑖𝑛 = 𝑥𝑦𝑐𝑖𝑛+ ¯𝑥¯𝑦𝑐𝑖𝑛+ ¯𝑥𝑦 ¯𝑐𝑖𝑛+ 𝑥¯𝑦 ¯𝑐𝑖𝑛 e um bit de carry out 𝑐𝑜𝑢𝑡 = 𝑥𝑦 + 𝑥𝑐𝑖𝑛+ 𝑦𝑐𝑖𝑛. Este circuito pode ser implementado utilizando dois circuitos meio somadores e uma porta lógica ou de duas entradas conforme ilustrado na Figura 12
[21].
Figura 12: Circuito somador completo de 1 bit [21].
A arquitetura de somadores utilizada por Nedjah [15] no multiplicador modular de Montgomery é a RCA. O circuito desta arquitetura, ilustrada na Figura 13 para quatro bits, é simples, o que permite um tempo de desenvolvimento menor para o projeto do circuito, bem como uma área menor para sua implementação, mas deixa a desejar em desempenho, pois a propagação dos sinais é lenta. O princípio de operação consiste na propagação do sinal de carry na cadeia dos somadores completos de um bit até que o último somador completo de um bit processe o sinal de carry de saída da soma (bit mais significativo da soma) [21].
Na arquitetura RCA, o caminho crítico é definido a partir da quantidade de bits do somador. Para um somador de 𝑛 bits, o caminho crítico é definido como o atraso de três portas lógicas (correspondente ao atraso das entradas e do processamento do carry de entrada) mais (𝑛 − 1) × 2, que corresponde às portas lógicas de propagação do carry. Exemplificando para um caso onde 𝑛 é igual a 1024 bits, o atraso total é de 3 + 1023 × 2, de 2049 portas lógicas [21].
Figura 13: Arquitetura RCA de quatro bits [21].
Uma forma de desenvolver um circuito somador mais rápido é através da inserção de uma lógica de baixa latência para auxílio do cálculo do bit de carry. O nome da arqui- tetura de somadores que dispõem desta técnica é somadores com lógica vai-um antecipado - CLA (Carry-Lookahead Adder ).
Um exemplo de um somador de 32 bits com arquitetura CLA é descrito a seguir. Como entrada deste somador, tem-se o operando x, o operando y e o sinal de carry de entrada 𝑐𝑖𝑛. O carry de entrada do bit 1 do somador é exatamente o carry de saída do bit 0 do somador, cuja equação lógica é:
𝑐1𝑖𝑛 = 𝑥0𝑦0+ (𝑥0⊕ 𝑦0)𝑐𝑖𝑛
De modo análogo, o carry de entrada do bit 2 do somador é dado por:
𝑐2𝑖𝑛 = 𝑥1𝑦1+ (𝑥1⊕ 𝑦1)𝑐1𝑖𝑛 Substituindo o valor do 𝑐1
𝑖𝑛 na equação lógica do 𝑐2𝑖𝑛, tem-se:
𝑐2𝑖𝑛 = 𝑥1𝑦1+ (𝑥1⊕ 𝑦1)[𝑥0𝑦0+ (𝑥0⊕ 𝑥0)𝑐𝑖𝑛)]
Observa-se que estas equações podem ser expandidas até o cálculo do último bit de carry. Entretanto, a expansão das equações é de ordem exponencial. Reagrupando a equação lógica do carry de forma genérica, obtêm-se:
𝑐𝑖+1𝑖𝑛 = 𝑥𝑖𝑦𝑖+ (𝑥𝑖⊕ 𝑦𝑖)𝑐𝑖𝑖𝑛
A partir da forma genérica é possível observar que os termos (𝑥𝑖𝑦𝑖) e (𝑥𝑖 ⊕ 𝑦𝑖) se repetem algumas vezes. Estes termos são denominados gerador (𝑔𝑖) e propagador (𝑝𝑖).
𝑔𝑖 = 𝑥𝑖𝑦𝑖 𝑝𝑖 = 𝑥𝑖⊕ 𝑦𝑖
Utilizando estas relações, defini-se a equação para 𝑐𝑖 𝑖𝑛:
𝑐𝑖+1𝑖𝑛 = 𝑔𝑖+ 𝑝𝑖𝑐𝑖𝑖𝑛
Com base nesta definição, tem-se as seguintes equações lógicas dos carries para os bits de 0 a 4:
𝑐1𝑖𝑛 = 𝑔0+ (𝑝0𝑐𝑖𝑛) 𝑐2𝑖𝑛 = 𝑔1+ (𝑝1𝑔0) + (𝑝1𝑝0𝑐𝑖𝑛) 𝑐3𝑖𝑛 = 𝑔2+ (𝑝2𝑔1) + (𝑝2𝑝1𝑔0) + (𝑝2𝑝1𝑝0𝑐𝑖𝑛)
onde 𝑐𝑖𝑛 é o carry de entrada do somador e 𝑐4𝑖𝑛 é o carry de saída do somador.
Mesmo essa formulação mais simplificada leva à equações muito grandes e, por- tanto, a circuitos lógicos grandes e de alto custo de implementação em hardware, mesmo considerando um somador de 32 bits [22]. Uma técnica utilizada para contornar este problema consiste em utilizar múltiplos níveis de lógicas CLA [21].
Uma outra forma de fazer o cálculo da soma de dois operandos é através da arqui- tetura de antecipação de sinal de carry através de computação paralela - PPA (Parallel- Prefix Adders). Esta técnica é equivalente à técnica do CLA e a diferença fundamental é a forma como o bloco de geração do carry é implementado [23]. A arquitetura genérica PPA foi proposta por Ladner e Fischer [24] em 1980 e acelerou o tempo de resposta de um somador de 𝑛 bits em tecnologia VLSI.
O projeto de um somador com arquitetura PPA geralmente é dividido em três passos. O primeiro passo consiste em criar os sinais de geração e propagação para todos os bits dos operandos. O segundo passo consiste do cálculo dos carries intermediários através do agrupameto lógico dos sinais de geração e propagação. No terceiro e último passo, os bits da soma do circuito somador são calculados com os sinais de propagação e com os bits de carry gerados a partir do agrupamento lógico dos sinais de geração e propagação [23]. A Figura14 ilustra esse processo.
Figura 14: Passos para projeto de um somador de arquitetura PPA [23].
Esta abordagem abre possibilidades para novos arranjos de lógica de cálculo para- lelo de carries que apresentam uma quantidade enorme de vantagens e desvantagens em termos de profundidade de níveis lógicos do caminho crítico, quantidade de elementos, fan-out e quantidade de interconexões. Dessa forma, o projeto de somadores se reduz ao arranjo de lógica dos grupos de geração e propagação - GPGL (Group Propagate and Ge- nerate Logic) apresentado na Figura15. A soma é calculada através de uma lógica simples de ou-exclusivo entre o grupo propagação e o agrupameto lógico dos sinais de geração e propagação [25].
O arranjo da lógica de geração dos carries intermediários caracteriza o tipo de somador PPA projetado. Dentre os arranjos de lógica mais conhecidos, pode-se citar:
Figura 15: Exemplo esquemático somador quatro bits arquitetura PPA [25].
Kogge-Stone, Brent-Kung e Han-Carlson.
O somador com arranjo de Kogge-Stone - KSA (Kogge-Stone Adder ) possui as ca- racterísticas de menor profundidade de níveis lógicos possível do caminho crítico e o menor fan-out, em contrapartida, este também possui uma grande quantidade de elementos e interconexões [23].
O somador com arranjo de Brent-Kung - BKA (Brent-Kung Adder ) tem como característica principal a menor quantidade possível de elementos, o que aumenta o apro- veitamento de área, mas possui uma profundidade de níveis lógicos do caminho crítico que impactam na latência desta estrutura [23].
O somador com arranjo Han-Carlson - HCA (Han-Carlson Adder ) combina as técnicas dos somadores KSA e BKA e apresenta uma estrutura balanceada entre a pro- fundidade de níveis lógicos do caminho crítico, quantidade de elementos e de interconexões [23].