Использование сумматора с запоминанием переноса

 

tсум=ntкс+tпр.кода

 

Основная идея:

n-разрядный сумматор строится на базе одноразрядных сумматоров с разорванными цепями переноса. Переносы запоминать на регистре и прибавлять к сдвинутой сумме частичных произведений в следующем такте.

В цикле проверки Bn

1такт – y(+) (множитель+сумма част.произведений+перенос)

2такт – y(-)(сдвиг)

 

Пропуски тактов суммирования в этом алгоритме запрещены, т.к. перенос всегда необходимо прибавлять.

После n циклов вычисленное произведение будет представлено двумя числами С и Р. их нужно сложить на обычном сумматоре с замкнутыми цепями переноса.

Пример:

                                       
                   


В 0 0111 0 0111 0 1011 0 1011 0 0101 0 0101 0 0010 0 0010 0 1001

СМ 00 0000 00 1111 00 0111 00 1000 00 0100 00 1100 00 0110 00 0001 00 0000

Р 0000 0000 0000 0111 0111 0111 0111 0110 0110

А 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111

Сч 00 00 01 01 10 10 11 11 00

 
 


0 1001 7/16*15/16=105/256

00 0110 6/16+9/256=105/256

0 1111

 

Дерево сумматора.

 

Идея: увеличить количество сумматоров с разорванными цепями переноса, чтобы умножение производилось за 1 такт.

С123=S1s+S2p

C1+C2+…+Cn= 2/3n слагаемых

4/9n слагаемых и т.д.

Ускорение достигается за счет того, что при выработке каждой суммы в каждом из n-2 сумматоров нет задержки распространения переноса. Последние два слагаемых складываются на n-1 сумматоре, у которых цепи переноса замкнуты.

Если очередной ярус слагаемого не делится на 3 , свободные входы сумматоров можно использовать для прибавления суммы из другого яруса.

Дерево сумматора для умножения 12-разрядных чисел:

Сi(1:n)=A(1:n)*bi

tсум=17tкс<=24tкс<=2ntкс

 

Все слагаемые подаются на сумматоры с необходимым сдвигом.

Пример:

 

0,1111*0,1111

 

дерево сумматора:

tсум=2tкс+5tкс=7tкс

 

å1         C1 Sum8
                      C2 C2
          C3
        S1
        S2
å2                         S1 Sum7  
                          L1(S2)  
                      C4  
        S3
        S4
å3       S3 Sum6
        L1(S1)
        Sum(1:5)

Умножение чисел представленных в дополнительных кодах.

С=А*В

 

1) В>0

Алгоритм умножения применяется без изменения. К сумме частичных произведений в каждом такте прибавляется А, если цифра Bn =1. знаковые разряды С иа учавствуют в суммировании, у А знаковый разряд при суммировании удваивается.

С 11 0111

После сдвига 11 1011

С 10 1000

После сдвига 11 0100

2) B<0

А*(-В)=А*(1-В)=А-АВ

1-АВ

А-АВ+(1-А)=1-АВ

Корректирующее слагаемое

После умножения в цикле на n цифр множителя к сумматору прибавляется корректирующее слагаемое(кс). Если B>0, то корректирующее слагаемое=0, иначе – 1-А .

А*В

5*6 кс=0

-5*6 кс=0

5*(-6) кс=1-5=11 1011

-5*(-6) кс=00 0101

микропрограмма: