Научная статья на тему 'ПРОЕКТИРОВАНИЕ УМНОЖИТЕЛЯ ЦЕЛЫХ ЧИСЕЛ СО ЗНАКОМ МЕТОДОМ ПРАВОГО СДВИГА И СЛОЖЕНИЯ В БАЗИСЕ ПЛИС'

ПРОЕКТИРОВАНИЕ УМНОЖИТЕЛЯ ЦЕЛЫХ ЧИСЕЛ СО ЗНАКОМ МЕТОДОМ ПРАВОГО СДВИГА И СЛОЖЕНИЯ В БАЗИСЕ ПЛИС Текст научной статьи по специальности «Математика»

CC BY
153
26
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук

Аннотация научной статьи по математике, автор научной работы — Строгонов Андрей, Винокуров Александр, Джиоти Алан

Показан пример проектирования последовательностного универсального умножителя целых чисел, представленных в дополнительном коде, методом правого сдвига и сложения (MAC-блок) в базисе ПЛИС. Использование этого метода для умножения чисел в базисе сигнальных процессоров чрезвычайно популярно у разработчиков РЭА. На базе этого метода реализуются схемы быстрого умножения (например, кодирование по Буту, которое позволяет уменьшать число частичных произведений вдвое, умножение по основанию 4, модифицированное кодирование по Буту) [1-4].

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ПРОЕКТИРОВАНИЕ УМНОЖИТЕЛЯ ЦЕЛЫХ ЧИСЕЛ СО ЗНАКОМ МЕТОДОМ ПРАВОГО СДВИГА И СЛОЖЕНИЯ В БАЗИСЕ ПЛИС»

Проектирование умножителя целых чисел со знаком

методом правого сдвига и сложения в базисе ПЛИС

Андрей СТРОГОНОВ, д. т. н.

andreistrogonov@mail.ru Александр ВИНОКУРОВ Алан ДЖИОТИ

Показан пример проектирования последовательностного универсального умножителя целых чисел, представленных в дополнительном коде, методом правого сдвига и сложения (МАС-блок) в базисе ПЛИС. Использование этого метода для умножения чисел в базисе сигнальных процессоров чрезвычайно популярно у разработчиков РЭА. На базе этого метода реализуются схемы быстрого умножения (например, кодирование по Буту, которое позволяет уменьшать число частичных произведений вдвое, умножение по основанию 4, модифицированное кодирование по Буту) [1—4].

Введение

Существует огромное число разновидностей матричных умножителей, превосходящих по скорости последовательностные умножители, основанные на методе сдвига и сложения. Известны и более сложные процедуры, например, с представлением суммирования в древовидном формате. Авторы не ставят цель разработать умножитель, превышающий по своим техническим характеристикам матричные умножители. Мы хотим показать читателю процедуру умножения чисел, представленных в дополнительном коде, методом правого сдвига и сложения, пригодную для реализации в базисе ПЛИС.

В качестве сравнения рассмотрим один из хорошо известных умножителей чисел в дополнительном коде, так называемый умножитель Бо-Вули (Baugh-Wooley). Если А и В — целые десятичные числа со знаком, то в дополнительном двоичном коде они будут представлены в виде:

т-2

А = —а .2т~1+Уя.2'

т-1 ^^ I

¡=0

и

¡=о

Тогда

т-2 п-2

АхХ = ат_Л_,2т+"-2+ £

1=0 >о

т-2 п-2

-^-Л^-^т-^-1. (1) 1=0 у=0

а4 а3 а2 а1 а0

X *4 х3 х2 Х1 Хо

-84X0 азхо ¡¡2*0 а1*0 Эо^^О

+ -а4*1 а3*1 а2х1 а1х1 а0х1

_а4х2 аЗх2 а2х2 а1х2 аоХ2

-а4><з аЗхЗ а2х3 а1х3 а0х3

-аз*4 -а2Х4 -а-|Х4 ~а6х4

Р/ Рб Рб Р4 Рз Р2 Р1 Ро

а4 а3 а2 а1 а0

X Х4 х3 х2 Х1 Хо

а4х0 азхо ЭгХо 81X0 а()Хо

+ а4х1 азХ1 а2х1 а1х1 а0х1

а4х2 аЗх2 Э2Х2 а1х2 а0*2

а4х3 аЗхЗ 81*4 а1х3 а0х3

а4*4 83X4 а2Х4 а2х3 аоХ4

а4 34

1 Х4 Х4

Рэ Р8 Р7 Рб Рб Р4 Рз Р2 Р1 Ро

-29 28 27 26 25 24 23 22 21 2°

Рис. 1. Пример умножения чисел 5x5, представленных дополнительным кодом: а) по формуле (1); б) по схеме Бо-Вули

—сЦХ| — 84(1—Х|)—Э4 — а4Хг—84 -а,Х4 = Х4(1-а,)-Х4 = ХдЭ^Хд

——> 84—284 —^ 84+(—84 перенос в следующий столбец) => ~~^ Х4—2X4 Х4+(—Х4 перенос в следующий столбец)

—84X0 => 84X0 + 84 +(—84 перенос в следующий столбец) -Х4ао => Х410+Х4 -84X0^84X0+84

—84X1 Э4Х1 + 84 "84 -ь^—Эд перенос в следующий столбец) -Х481 —^ Х4Э-] —84X1 —^ 84Х-|

—84X2 => 84X2 + 84 "84 перенос в следующий столбец) —Х482 —^ Х4Э2 —Э4Х2 84X2

—84X3 84X3 + 84 "84 34 перенос в следующий столбец) ~Х4Э3 ^ ^483 —84*3 ^ а4Хз

—84X4 => 84X4 + 84 —84 +(—84 перенос в следующий столбец) -Х484 -7> Х484 —84X4 ^ Э4Х4

—Х4 - Х4-1 -а4=Э4-1

Рис. 2. Схема преобразований Бо-Вули

Таблица 1. Примеры умножения

для различных случаев по схеме Бо-Вули

Множимое — | положительное число, множитель — отрицательное число

Множимое — отрицательное число,

множитель — положительное число

Множимое и множитель — I положительные числа

Множимое и множитель — отрицательные числа

0 1 =13

1 1 =-5

0 110 1 0 110 1 0 0 0 0 0 0 0 110 1 10 0 10

1110 111111 = -65

110 11

0 110 1

0 10 11 1 0 0 0 0

001011 0 0 10 0

1110 111111 =-65

0 110 1 =13 0 0 10 1 =5

0 110 1 0 0 0 0 0 0 110 1

0 о о о о о

1 0 0 0 0

0001000001

1 1 1 1

0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 0 110 0

0001000001

На рис. 1а показан пример умножения чисел 5x5, представленных дополнительным кодом по формуле (1), а на рис. 1б — пример умножения чисел 5x5, представленных дополнительным кодом по схеме Бо-Вули. На рис. 2 приведена схема преобразований, позволяющая перевести частичные произведения со знаком в беззнаковые величины. А на рис. 3 — матричный умножитель Бо-Вули размерностью 5x5 чисел, представленных в дополнительном коде. Наличие полных сумматоров (РА) в матричной структуре такого умножителя является главным достоинством при реализации в базисе заказных БИС, а его недостаток — пониженное

быстродействие за счет увеличения высоты столбца с 5 до 7.

В таблице 1 показаны примеры умножения для различных случаев по схеме Бо-Вули.

Процедура умножения чисел, представленных в дополнительном коде, методом правого сдвига и сложения

В качестве базовой схемы разрабатываемого МАС-блока возьмем схему умножителя целых беззнаковых чисел с управляющим автоматом на четыре состояния [5].

Рассмотрим вычитание чисел со знаком в столбик (рис. 4). Дополнение до двух можно получить, если прибавить «1» к результату обращения. Обращение логически эквивалентно инверсии каждого бита в числе. Вентили «исключающее ИЛИ» можно применить для избирательной инверсии в зависимости от значения управляющего сигнала.

0

Знак, расширения знакового разряда^

Знаковый разряд

1011 (-5:

1101 (—3 Е

доп. коде) доп. коде)

-+«1011 00000

1011 (-5 в доп. коде) 0100

+_1

0101 (5 в прямом коде)

обращение числа -5

.»111011 <1011

<1100111 00101

00001111

И

1011 1101

(-5 в доп. коде) (-3 в доп. коде)

1011 «1101

1111 >11 000 о 11101100 00101000 00000000

Знаковый разряд

При сложении единица переноса в СЗР игнорируется обращение числа -5

частичное произведение множимое с учетом знака

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

частичное произведение сдвинутое множимое

частичное произведение сдвинутое множимое

частичное произведение сдвинутое множимое

00001111 произведение

Пример

Уменьшаемое А +14 01110 +7 00111

Вычитаемое В -(+7) -00111 -(+14) - 01110

перевод В в дополн. код 01110 + 11000 + 1 00111 + 10001 + 1

Разность +7 1] 00111 ^Перенос игнорируется -7 11001

Рис. 4. Вычитание с использованием дополнительного кода (дополнение до двух). Осуществляется инвертирование вычитаемого и суммирование, а также перенос «1» в младший разряд с последующим сложением

Прибавление «1» к результату обращения можно реализовать, задавая «1» на входе переноса сумматора.

На рис. 5 показан принцип умножения чисел, представленных дополнительным кодом, на примере умножения (-5)х(-3).

Представление процесса умножения в точечной нотации, в которой под каждой точкой подразумевается «лог. 1» или «лог. 0», позволяет получить рекуррентную формулу (рис. 6).

В таблице 2 показы примеры умножения, рассматриваемые при разработке схемы универсального умножителя.

а Множимое X Множитель

Матрица битов

частичных

произведений

• •••••••

Ра+1) = (РШ+хС)*а 2к)2-1

Р Произведение

- Сложение —|

- Сдвиг вправо —

Рис. 5. Умножение: а) в столбик; б) методом сдвига множимого и последующего сложения с частичным произведением (умножение чисел (—5)х(—3), представленных в дополнительном коде)

Рис. 6. Представление процесса умножения методом правого сдвига и сложения в точечной нотации

Таблица 2. Примеры умножения

Случай 1 Множимое — отрицательное число, множитель — положительное число (—10)х 11

Случай 2 Множимое и множитель — отрицательные числа ( 10)х( 11)

Случай 3 Множимое и множитель — четные отрицательные числа (-4)х(-4)

Случай 4 Множимое — положительное число, множитель — отрицательное число 5х(-3)

MSB 2 тетрада 1 тетрада MSB 2 тетрада 1 тетрада

а(-10) х(11) 10 110 01011 а(-10) х(-11) 10110 1010 1

р(0) +х0*а 00000 10 110 р(0) +х0*а 00000 10110

2р(1) Р(1) +х1*а 1 10 110 11011 10 110 0 2р(1) Р(1) +х1*а 1 10110 11011 00000 0

2р(2) Р(2) +х2*а 1 1 000 1 11000 00000 0 1 0 2р(2) Р(2) +х2*а 1 11011 1110 1 10110 0 1 0

2р(3) Р(3) +хЗ*а 1 11000 11100 10 110 1 0 0 1 0 2р(3) Р(3) +хЗ*а 1 10011 11001 00000 1 0 1 1 0

2Р<4) Р(4) +х4*а 1 10010 11001 00000 0 1 0 00 10 2р(4) Р(4) (-х4*а) 1 11001 11100 0 1010 1 1 0 1110

2р5 р5 1 11001 11100 00 10 10010 2р5 р5 0 00110 0001 1 1110 01110

н 0

Рис. 7. Принцип умножения методом правого сдвига и сложения: а) умножение (—10)х 11; б) умножение (—10)х(—11)

На рис. 7 показан принцип умножения методом правого сдвига и сложения для двух случаев в формате проектируемого МАС-блока. В первом случае осуществляется умножение числа со знаком (-10) на число (11), а во втором — умножение (-10) на (-11). В первом случае множимое (-10) переводится в дополнительный код (дополнение до двух).

Множитель (11) — целое положительное число, расширенное знаковым разрядом 0, представлено в прямом коде. Для удвоенных частичных произведений 2p(1), 2p(2), 2p(3), 2p(4) и 2p(5) в поле MSB (название полей произвольное) необходимо добавить «лог. 1». При формировании частичных произведений методом правого сдвига p(1), p(2), p(3), p(4) и p(5) «лог. 1» из поля MSB попадает в старший разряд второй тетрады. (Название «тетрада» в данном случае некорректно, так как это поле уже 5-разрядное, но сохранено для преемственности с принципом умножения беззнаковых чисел.) При сложении p(3) c x3*a единица переноса в старший разряд, то есть в поле MSB, игнорируется. Данная схема вычислений справедлива только для случая, когда в младшем разряде множителя находится «1».

При умножении двух отрицательных чисел, представленных дополнительным кодом, например (-10)х(-11), следует произвести два действия.

Первое: необходимо учесть знак при представлении числа в дополнительном коде, что достигается обращением произведения старшего разряда множителя на множимое с последующим прибавлением «1» к младшему разряду. Дополнительный код произведения (-x4*a) при x4 = 1 есть число «10». Перевод в дополнительный код произведения (-x4*a) должен быть осуществлен до операции сложения, то есть до получения удвоенного частичного произведения 2p(5).

Второе: при формировании удвоенного частичного произведения 2p(5) необходимо провести коррекцию, то есть в поле MSB поставить логический ноль.

Рассмотрим умножение четных чисел со знаком (рис. 8). При умножении (-4)х(-4) в поле MSB для удвоенных значений частичных произведений 2p(1) и 2p(2) должны стоять нули. А при умножении (-8)х(-8) в поле MSB должен быть еще и «0» для частичного произведения 2p(3). Принцип умножения не отличается от умножения чисел, представленных дополнительным кодом, например (-10)х(-11).

На рис. 9 показан принцип умножения методом правого сдвига и сложения в случае, когда множимое — положительное, а множитель — отрицательное число.

Разработанный MAC-блок также способен умножать числа без знака. Для этого применяется принцип, показанный на рис. 10. Единица переноса при сложении в поле «2-я тетрада» уже не игнорируется, а переносится в поле Cout. (Сигнал Cout является выходом переноса многоразрядного сумматора масштабирующего аккумулятора.)

MSB 2 тетрада 1 тетрада MSB 2 тетрада 1 тетрада MSB 2 тетрада 1 тетрада MSB 2 тетрада 1 тетрада

аН) хИ) 11100 11100 а(-8) х(-8) 11000 11000 а(-5) х(-3) 00101 11101 а(-2) х(-2) 0001 0 11110

Р(0) +х0*а 00000 00000 Р(0) +х0*а 00000 00000 Р(0) +х0*а 00000 00101 Р(0) +х0*а 00000 00000

2р(1) Р(1) +х1*а 0 00000 00000 00000 0 2р(1) Р(1) +х1*а 1 00000 00000 00000 0 2р(1) Р(1) +х1*а 0 00101 000 1 0 00000 1 2р(1) Р(1) +х1*а 0 00000 00000 0001 0 0

2р(2) Р(2) +х2*а 0 00000 00000 11100 0 00 2р(2) Р(2) +х2*а 1 00000 00000 00000 0 00 2р(2) Р(2) +х2*а 0 000 1 0 00001 00101 1 0 1 2р(2) Р(2) +х2*а 0 0001 0 0000 1 0001 0 0 00

2р(3) Р(3) +хЗ*а 1 11100 11110 11100 00 000 2р(3) Р(3) +хЗ*а 1 00000 00000 11000 00 000 2р(3) Р(3) +хЗ*а 0 00110 000 1 1 00101 0 1 00 1 2р(3) Р(3) +хЗ*а 0 0001 1 0000 1 0001 0 00 1 00

2р(4) Р(4) -(х4*а) 1 110 10 1110 1 00100 000 0000 2р(4) Р(4) (-х4*а) 1 11000 11100 0 1000 000 0000 2р(4) Р(4) -(х4*а) 0 01000 00 100 110 11 00 1 000 1 2р(4) Р(4) (-х4*а) 0 0001 1 0000 1 11110 1 00 1100

2р5 р5 0 0000 1 00000 0000 1 0000 2р5 р5 0 00 100 0001 0 0000 00000 2р5 р5 1 11111 11111 000 1 1 0001 2р5 р5 1 11111 11111 1100 11100

0 0 0 0

Рис. 8. Принцип умножения методом правого сдвига и сложения: а) умножение (—4)х(—4); б) умножение (—8)х(—8) Рис. 9. Принцип умножения методом правого сдвига и сложения: а) умножение 5х(—3); б) умножение 2х(—2)

Cout 2 тетрада 1 тетрада 1 и 2 тетрады

а X 1111 1111

р<°> +Хоа 0000 1111

2р<1> pfi) +Х!Э 0 1111 0 111 1111 1000 120

2р<2> р(2> +х2а 1 0 110 10 11 1111 0 100 180

2р(3) р(3) +х3а 1 10 10 1101 1111 0010 210

2р<4> pit) 1 1100 1110 000 1 225

Рис. 10. Принцип умножения методом правого сдвига

и сложения (умножение 15x15)

Разработка схемы умножителя в базисе ПЛИС

Поскольку принципы умножения чисел со знаком и без знака отличаются, то необходимо откорректировать код языка VHDL цифрового автомата (пример). В коде содержится шесть операторов process, которые выполняются параллельно.

Первые три оператора process реализуют цифровой автомат Мура на четыре состояния с логикой переходов и логикой формирования выхода для управления процессом умножения. Память состояний (регистр состояний) автомата тактируется фронтом синхроимпульса. Следует принимать во внимание, что на синхровход автомата clk подключен инвертор. Автомат формирует три управляющих сигнала ena_add_temp (сигнал разрешения суммирования многоразрядному сумматору масштабирующего аккумулятора), load_acc (сигнал разрешения загрузки в регистр со сдвигом вправо) и ena_shift_ temp (сигнал разрешения сдвига) (рис. 11).

Четвертый оператор process представляет собой 5-разрядный суммирующий счетчик на сигнале cnt_sub_add (тактируется срезом синхроимпульса clk'event and clk = '0'). Таким образом, удается обеспечить конвейерный режим работы масштабирующего аккумулятора, при этом формируемые сигналы ena_ add_temp, load_acc и ena_shift_temp являются синхронными для всех регистров умножителя. Так, второй передний фронт синхроимпульса оказывается ровно над половиной высокого уровня сигнала ena_add_temp. Это обеспечивает корректную работу синхронного многоразрядного сумматора масштабирующего аккумулятора.

Согласно схемам на рис. 7-9 удвоенные частичные произведения 2p(1), 2p(2), 2p(3), 2p(4) и 2p(5) будут получены на 2-м, 6-м, 10-м и 14-м тактах сигнала cnt_sub_add.

Пятый оператор process, в списке чувствительности которого стоит сигнал cnt_sub_ add, используется как дешифратор случаев 4 и 1, 2 и 3. На сигнале cnt_sub_add осуществляется подсчет синхроимпульсов.

Рассмотрим подробно случаи 1, 2 и 3: when "00010", "00110" и "01010". Приведем примеры для множителя X:

• X=XXXX0 (например, 11110 BIN или -2D);

• X=XXX00 (например, 11100 BIN или -4D,

или же число со знаком -12 (10100 BIN));

• X=XX000 (11000 BIN или -8D),

где X — или «лог. 1», или «лог. 0».

В случае обнаружения этих чисел цифровой автомат сформирует два сигнала sign<='1' и sub_add<='0', для того чтобы в поле MSB (2p[5]) установился «лог. 0». В этих случаях умножение идет согласно принципу, показанному на рис. 8.

Существует еще случай when "10001", когда будет подсчитан 17-й такт синхроимпульса, при достижении которого формируется двоичное дополнение. Это распространяется на умножение двух четных отрицательных чисел. И когда оба числа оказываются отрицательными, одно из них может быть четное, а другое нечетное и наоборот (рис. 8б).

Сигнал sub_add используется для подачи «лог. 1» на вход переноса многоразрядного сумматора Cin масштабирующего аккумулятора, в случае обнаружения «1» в старшем разряде X(4)=1, а также для селективной инверсии числа A при переводе его в обратный код.

Когда будет подсчитан 18-й такт синхросигнала (when "10010"), цифровой автомат сформирует сигналы sign<='1' и sub_add<='0', и в поле MSB будет установлен «лог. 0».

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

Приведем пример — код языка VHDL цифрового автомата умножителя:

LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY avtomat IS

PORT(

Res,clk : IN STD_LOGIC;

X,A: IN STD_LOGIC_VECTOR(4 downto 0);

Ena_Add, LoadPSC,ena_shift,Stop,sub_add, sign: OUT STD_ LOGIC;

Q_sub_add : OUT STD_LOGIC_VECTOR(4 downto 0);

Q_stop : OUT STD_LOGIC_VECTOR(4 downto 0)); END avtomat;

ARCHITECTURE a OF avtomat IS TYPE state_values IS (SA, SB, SC, SD); signal state,next_state: state_values;

SIGNAL cnt_sub_add: STD_LOGIC_VECTOR(4 downto 0); SIGNAL cnt_stop: STD_LOGIC_VECTOR(4 downto 0); BEGIN

statereg: process(clk,Res) begin

if (Res = '1') then state<=SA;

elsif (clk'event and clk='1') then state<=next_state;

end if; end process statereg; process(state) begin

case state is

when SA=> next_state<=SB; when SB=> next_state<=SC; when SC=> next_state<=SD;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

when SD=> next_state<=SA;

end case;

end process;

process (state)

begin

case state is

when SA=>Ena_Add<='0';

LoadPSC<='0';

ena_shift<='1';

when SB=>

Ena_Add<='1';

LoadPSC<='0';

ena_shift<='0';

when SC=>

Ena_Add<='0';

LoadPSC<='0';

ena_shift<='0';

when SD=>

Ena_Add<='0';

LoadPSC<='1';

ena_shift<='1';

end case;

end process;

process (clk, res)

begin

if (res = '1') then cnt_sub_add <=(others=>'0');

elsif (clk'event and clk = '0') then

cnt_sub_add <= cnt_sub_add+'1';

end if;

end process;

Q_sub_add <= cnt_sub_add;

process(cnt_sub_add,X,A)

begin

-- Случай 4

if A(4)='0' and X(4)='1' then

sign<='1'; sub_add<='0';

case cnt_sub_add is

when "10001" =>

sign<='0'; sub_add<='1';

when "10010" =>

sign<='1'; sub_add<='1';

when others => sign<='1'; sub_add<='0';

end case;

-- Для случаев 1, 2 и 3

elsif A(4)='1' then

case cnt_sub_add is

when "00010" =>

if (X(0)='0' ) then sign<='1'; sub_add<='0'; else

sign<='0'; sub_add<='0'; end if;

when "00110" =>

if (X(1) = '0' and X(0)='0') then sign< = '1'; sub_add< = '0';

else sign<='0'; sub_add<='0'; end if;

when "01010" =>

if (X(2) = '0' and X(1) = '0' and X(0) = '0') then sign< ='1';

sub_add<='0'; else sign<='0'; sub_add<='0'; end if;

when "01110" =>

if (X(3)='0' and X(2)='0' and X(1)='0' and X(0)='0') then

sign<='1'; sub_add<='0'; else sign<='0'; sub_add<='0'; end if;

when "10001" =>

--2S complement else no 2S complement

if (X(4) = '1') then sign< = '1'; sub_add< = '1'; else

sub_add<='0';sign<='0';end if;

when "10010" =>

----2S complement and 2p[5]=0 else no 2S complement

and 2p[5] = 1

if (X(4)='1')

or (X(4) = '0' and X(3) = '0' and X(2) = '0' and X(1) ='0'

and X(0)='0')

then sign<='1'; sub_add<='0'; else sub_add<='0';sign< ='0';

end if;

when others => sign<='0';

sub_add<='0';

end case;

end if;

end process;

process (clk, res)

begin

if (res = '1') then cnt_stop <=(others=>'0');

elsif (clk'event and clk = '1') then

if cnt_stop = "10101" then Stop<='1';

else cnt_stop <= cnt_stop+'1';

end if;

end if;

end process;

Q_stop <= cnt_stop;

END a;

На рис. 11 показан верхний уровень иерархии проекта универсального умножителя двух чисел в дополнительном коде, как со знаком, так и без него, в САПР ПЛИС Quatus II Web Edition 13.0.1sp1 (сборка 232). В отличие от схемы умножения беззнаковых чисел, в эту схему введена дополнительная

const Inst2

mux2v1 data1xI4..0]

data0x[4..P]

reauH14..0l

PSC

right shift

CONSTX 1 5к-

ХХ[4..0]

inst? 5 elk > clock q[4..0]

епа_Х

adr

1П814

res_stop

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

A[4..0] load SumandCout[5..0] D[4..0] sum_reg_2p[5..0] sub_add sum[4,.0] ena_shift_temp p[4..0] reset resuttp-.O] elk p_shrftf5..0]

sub add

^na_shiftjemp

res_stop

X elk

sign

ena_add_temp ena_add_temp shlft_out gg QD[4..0] MSB

gg

> SumandCout[5..0|

> sum_reg_2p{5 0]

> sum_2p[4..bi

> B[4 0] ...............

> -asult;9..C]..............

> о 8hi4(5..0:............

> ISR;4 oi................

> shift au*.

> QD[4 oj...................

Проверка на знак, если дд = 1 то множимое и множитель числа без знака, представлены в прямом коде

Рис. 11. Схема умножителя в САПР ПЛИС Quаtus II (верхний уровень иерархии)

проверка на знак. Если сигнал gg=1, то множимое A и множитель X — беззнаковые числа. На рис. 12 черным, красным и зеленым цветом отмечена дополнительная логика, обеспечивающая умножение чисел как со знаком, так и без него. Блок complementer

обеспечивает формирование обратного кода. Переключение между беззнаковыми и знаковыми числами осуществляет мультиплексор тих21 (выделен на рис. 12 зеленым цветом), на адресный вход которого подается сигнал gg. В целом принцип работы

масштабирующего аккумулятора не отличается от описанного в работе [5], за исключением увеличения разрядности всех блоков на один бит.

Поле MSB (рис. 12) формируется с помощью двух элементов «исключающее ИЛИ»

Если дд = 1 то выход переноса Cout сумматора является старшим разрядом сигнала 2р[5..0], согласно принципу умножения беззнаковых чисел

Если дд = 0 то согласно принципу умножения чисел со знаком

Рис. 12. Схема масштабирующего аккумулятора

п_

V.......

я '¡я

ч

л- «*

I» ■

I» —

ч

|> -ч > --»

I) . ■

■г-

Ы *

*

* ч <>

" л.

Ч 4Л.

ес

.г I,

СПС

■ У Г : I ; X ■ ■

ГХЖЭС

г

X. . .Лм.ОССГГГГТГХТГ'

г-г-г» и I. .к ч г-гт—Й~¡Г"Й—ггтг

-х~¡ОГ-г-Г-Й-цхг

он ни нгн Шч 3^14 Ми к-щ ИЕП МЕН Ч0*Н Мичч РЧИ»

V ■■ ч 1 ..

- .»л II

чтг > ■

■ -I 11

1 ._-« 1 4

"> г

Ч "А --

ь --

^ > к

Ъ-

"5 — 71 V

К

■Ч'К Г

ГХ!.!. . = "Т"

Шг

Ч 4>ь» и 9

|ртгггт-гтг-ггтг-гтг-т-4 1 1 1.. 1 ■ К ..Г:.:1 Д Г-П , I . к д

б

Рис. 13. Временные диаграммы процесса умножения: а) (—10)ж11 (результат —110); б) (—10)х(—11) (результат 110)

а

Рис. 14. Временные диаграммы процесса умножения 5х(—3) (результат —15)

................................................................ load

в i-х

.............................................................. ГВ8

..........................E2....S.......i—*

i elk..........................j=y INPUT.......i ""_х

...................................................... toed mem

: load_mem I-•> lHPtfT -x

mac_scal_acc

inst7

Рис. 15. Тестирование мегафункции ALTMEMMULT и разработанного MAC-блока

Рис. 16. Временные диаграммы процесса умножения (—10)х(—11) MAC-блоком и мегафункцией ALTMEMMULT (результат — 110)

(XOR). Вспомогательная схема выделена на рис. 12 красным цветом. Один из входов элемента XOR (inst10) подключен к напряжению питания. Это необходимо для заполнения поля MSB «лог. 1» или «лог. 0», как требуется для случаев 1-4.

На рис. 13 показаны случаи 1 и 2, а на рис. 14 — случай 4. В случае 1 в поле MSB в процессе умножения сохраняется «лог. 1». В случае 2 в поле MSB при вычислении удвоенного частичного произведения 2p(5) прописывается «лог. 0» по 18-му такту синхроимпульса. В случае 4 в поле MSB все происходит с точностью до наоборот.

На рис. 15 показаны тестовые схемы для умножения (-10)х(-11) для реализации в ПЛИС серии Cyclone II. На вход coeff_ in[4..0] мегафункции ALTMEMMULT подключается константа (-10) (22D). Такое же значение подается и на вход AA[4..0] разработанного MAC-блока (рис. 11 и 12). На информационный вход data_in[4..0] мегафункции ALTMEMMULT и на вход X[4..0] MAC-блока подается число (-11).

На рис. 16 показан процесс умножения (-10)х(-11) MAC-блоком и мегафункци-

ей для случая, когда константа загружается с внешнего порта. В мегафункцию предварительно загружена константа (режим загрузки из блочной памяти ПЛИС) — число 3.

Заключение

Разработан MAC-блок с использованием метода правого сдвига и сложения для умножения чисел, представленных в дополнительном коде, как четных, так и нечетных, со знаком и без него, для реализации в базисе ПЛИС. Предложенная схема реализации MAC-блока умножает за 21 такт синхро-частоты и может быть использована при проектировании КИХ-фильтров. ■

Литература

1. Computer Arithmetic: Algorithms and Hardware Designs. Oxford U. Press, 2010.

2. http://khadivi.iut.ac.ir/

3. Koren I. Digital Computer Arithmetic. ECE 666. Part 3. Sequential Algorithms for Multiplication and Division. University of Massachusetts Dept. of Electrical & Computer Engineering.

http://euler.ecs.umass.edu/arith/parts-pdf/ Part3-seq.pdf

4. Cheng X. Multiplication and Division Multiplication and Division. Csci 136. Computer Architecture II.

5. Строганов А., Быстрицкий А. Проектирование умножителя методом правого сдвига и сложения с управляющим автоматом в базисе ПЛИС // Компоненты и технологии. 2013. № 12.

ПЛАТЫ ПЕЧАТНЫЕ опытное и серии им производство, проектирование, монтаж

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

КОНТРАКТНАЯ РАЗРАБОТКА И ПРОИЗВОДСТВО ЭЛЕКТРОН ими

i Надоели баннеры? Вы всегда можете отключить рекламу.