configuración de la compuerta más rápida para agregar 7 enteros de 32 bits

2

Me gustaría agregar 7 enteros de 32 bits cada uno, usando puertas. La solución ingenua es sumar dos juntos, que la suma de estos dos con el tercer entero. La suma de los tres primeros agregados al cuarto entero ... etc. Sin embargo, esta es probablemente la solución más lenta. Estoy buscando una manera rápida de hacerlo. Esto es para el algoritmo sha256. El cuello de botella de la velocidad principal se debe a un sumador de 32 bits de 7 entradas.

Considere los 32 bits etiquetados: a, b, c, d, e, f, g. Me gustaría generar a + b + c + d + e + f + g usando puertas lo antes posible.

Una forma más rápida sería

(((a + b) + (c + d)) + ((e + f) + (g)))   //This is performed in 3 steps.

(((((((a + b) + c) + d) + e) + f) + g)    //This is performed in 6 steps.

Me gustaría saber si se puede hacer más rápido que el proceso de 3 pasos, mediante el uso de sumadores especiales que pueden tomar múltiples entradas.

    

4 respuestas

2

Su sumador de 3 etapas probablemente sea el mejor posible. Debe equilibrar la necesidad de un sumador con múltiples entradas y múltiples etapas de adición. Probablemente podrías terminar diseñando un sumador de 7 entradas desde cero, pero probablemente sea terriblemente lento debido a su complejidad.

Dicho esto, si su objetivo es acelerar la implementación de SHA, a veces es posible que deba tener una visión general del sistema.

    
respondido por el sybreon
2

El enfoque práctico más rápido es probablemente construir un circuito que tome tres entradas y devuelva un conteo de dos bits de cuántas entradas son altas (busque "sumador de acarreo y ahorro"). Si las entradas son A, B y C, las salidas son (AB o AC o BC, A xo B xo C). Usando 32 de estos, uno puede producir fácilmente un circuito que toma tres números de 32 bits y después de dos retrasos en la puerta devuelve dos números cuya suma es la de los tres originales.

Para sumar siete números, tome los primeros seis números como dos grupos de tres y conviértalos en cuatro números (por lo tanto, habrá un total de cinco números por agregar). Toma repetidamente tres de esos números y múntelos para producir dos, hasta que a uno solo le queden dos números. En ese momento, uno puede agregar los dos números restantes mediante un sumador "convencional".

Otro enfoque sería utilizar un sumador de 7 a 3 carry-save; hay varios enfoques con diferentes números de retardos de compuerta y niveles de fan-in. Quizás divida la entrada en un grupo de 3 y un grupo de 4; use dos etapas lógicas para desarrollar salidas para al menos una, al menos dos, al menos tres o las cuatro entradas activas, y luego use otras dos etapas lógicas para combinarlas en al menos una a través de al menos siete. Dos etapas lógicas más serán suficientes para producir el resultado de tres bits del sumador carry-save, y dos más lo convertirán en dos bits. Es probable que uno termine con más circuitos de los que se necesitarían con los agregadores 3: 2 carry-save, pero una ruta lógica algo más rápida (el máximo de entrada de la puerta sería seis).     

respondido por el supercat
1

Un enfoque sería análogo al acumulador carry-save que se usa a menudo en los multiplicadores. La idea básica es que cuando sumas dos números (X1 + X2), obtienes un nuevo par (S + C), donde S contiene la suma de las salidas de los 32 medios sumadores, y C las salidas de acarreo (una posición desplazada). a la izquierda para que estén en el lugar apropiado). Por lo tanto, C [0] es 0.

En el siguiente paso, agrega S + C + X3 (usando sumadores completos), y nuevamente obtiene un par S '+ C', en el que C '[0] = 0. Repita esto para todos los enteros que desee añadir El punto importante es que estas adiciones no se ralentizan con ninguna forma de propagación de acarreo, por lo que pueden ser rápidas (y pequeñas en las puertas).

Como último paso, deberá agregar el S + C final, utilizando todos los medios disponibles.

Por lo tanto, su tiempo total es de 7 adiciones de tres vías sin propagación de acarreo, más una adición de doble vía de lado completo con acarreo.

Cuando se usa para la multiplicación, la situación es aún mejor, porque el último paso no es necesario.

    
respondido por el Wouter van Ooijen
0

Llevar un usuario seleccionado debe ser una buena opción Requiere mucho hardware, pero también es muy eficiente.

    
respondido por el Neel Mehta

Lea otras preguntas en las etiquetas

Comentarios Recientes

a 0. Prefijo de dirección ------------------------------- la dirección Historial de revisiones3. 09.2004 El límite predeterminado de longitud de modulación digital de 128 bits se ha reducido en addrorder en 1, lo que significa que las entradas de memoria de encabezado en tamaños de dirección de 64 bits pueden ser 0.3.03.2004 Corrige los errores de pedido de memoria que surgen del límite de 128 bits. Se modificó el modo de decodificación de raíz al formato de datos de un solo discrepenuer (scripts), según... Lees verder