Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ПКИМС_ПЛИС.doc
Скачиваний:
35
Добавлен:
05.06.2015
Размер:
1.85 Mб
Скачать

4.7. Умножители

Умножители являются достаточно сложными электронными блоками, особенно если речь идёт об умножении много разрядных чисел. При работе с числами небольшой разрядности операцию умножения можно свести к табличному вычислению функций. Так, например, для умножения четырехразрядных чисел достаточно организовать таблицу умножения в виде ПЗУ объемом 256 байт. При этом получается очень высокое быстродействие и минимальное количество проблем при разработке схемы.

Для работы с восьмиразрядными числами потребуется ПЗУ объёмом 64К шестнадцатиразрядных слов, что уже может создать определённые проблемы.

Задачу построения много разрядных умножителей часто решают методом последовательного умножения. При таком подходе операция умножения много разрядных чисел сводится к нескольким задачам умножения четырёхразрядных чисел. Например, для восьмиразрядных чисел, этот метод можно проиллюстрировать следующим выражением:

result[15..0] = a[7..0]*b[7..0]=

a[7..4]*b[7..4]*28

+ a[7..4]*b[3..0]*24

+ a[3..0]*b[7..4]*24

+ a[3..0]*b[3..0]

В соответствии с этим методом два восьмиразрядных операнда a[7..0] и b[7..0] разбиваются на четыре четырёхразрядных операнда a[7..4], a[3..0], b[7..4] b[3..0] и их умножение осуществляется за четыре такта.

Структурная схема такого умножителя приведена на рис 4.7.1.

Умножитель имеет следующие входные и выходные сигналы:

CLK – вход тактового сигнала, синхронизирующий работу умножителя

Start вход запуска;

Reset вход сброса;

A[7..0] - вход данных первого множителя;

B[7..0] - вход данных второго множителя;

Result[15..0]выход результата;

Done_flag - выход квитирования результата, при Done_flag=1 на выходе Result[15..0] должен быть результат умножения.

MUX4 2_1 (A)

A[4..1

B[4..1] Y[4..1]

SEL

a[3..0]

a[7..4]

MULT 44

A[4..1

Result[8..1]

B[4..1]

sel[1]

SHIFTER

IN[7..0]

OUT[15..0]

CNT[1..0]

MUX4 2_1 (B)

A[4..1

B[4..1] Y[4..1]

SEL

a[3..0]

b[7..4]

s

ACCUM

CLK

CLR

CLCEN

OUT[15..0]

A[15..0]

el[1]

result[15..0]

COUNTER

CLK

STAR

CLKEN

TACT[1..0]

CONTROL

RST SEL[1..0]

CLK SHIFT[1..0]

START DONE

CLKEN REGCLR

COUNT[1..0]

CLK

Start DONE_FLAG

CLKEN

Рис 4.6.1. Структурная схема такого умножителя восьмиразрядных чисел.

Как видно из рис 4.6.1, в состав умножителя входят:

  • два четырехразрядных мультиплексора MUX4_2_1;

  • комбинационная схема сдвига данных – SHIFTER;

  • шестнадцатиразрядный, накапливающий сумматор – ACCUM;

  • счётчик тактов – COUNTER;

  • блок управления CONTROL;

  • блок умножения четырёхразрядных чисел MULT 44.

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

На втором такте перемножается старшая тетрада множителя А на младшую тетраду множителя В, после чего результат сдвигается влево на 4 разряда (умножается на 16) и добавляется к результату.

На третьем такте перемножается младшая тетрада множителя А на старшую тетраду множителя В, после чего результат опять же сдвигается влево на 4 разряда (умножается на 16) и добавляется к накопленной сумме.

На четвёртом такте перемножаются старшие тетрады множителей после чего результат сдвигается влево на 8 разрядов (умножается на 256) и добавляется к накопленной сумме, после чего сумма, накопленная в сумматоре содержит искомое произведение.

Рассмотрим работу отдельных модулей умножителя.

Модуль MUX4_2_1.

MUX4_2_1 – четырехразрядный мультиплексор 2 в 1.

Выводы модуля:

A[3..0], B[..0] - две четырёхразрядные входные шины;

Sel – адресный вход;

Y[3..0] - четырёхразрядная выходная шина;

Логика работы модуля:

При Sel=0 на выход модуля Y[] передаются данные с входной шины A[];

При Sel=1 на выход модуля Y[] передаются данные с входной шины B[].

Модуль SHIFTER.

Данный модуль реализует комбинационную схему сдвига данных.

Выводы модуля:

IN[7..0] – восьмиразрядная входная шина данных.

CNT[1..0] – двухразрядная шина управления сдвигом;

OUT[15..0] – шестнадцатиразрядная выходная шина данных.

Логика работы модуля:

  • если CNT[1..0]=B “00” , то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига.

  • если CNT[1..0]=B “01” , то OUT[15..12]=0, OUT[11..4]= IN[7..0], OUT[7..0]=0, т.е. данные передаются со сдвигом влево на 8 разряда.

  • если CNT[1..0]=B “10” , то OUT[15..8] = IN[7..0], OUT[3..0]=0, т.е. данные передаются со сдвигом влево на 4 разряда.

  • если CNT[1..0]=B “11” , то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига.

Модуль CONTROL.

Модуль представляет собой конечный автомат, управляющий работой умножителя.

Перечень состояний автомата:

  • IDLE – состояние ожидания (исходное состояние);

  • LСB – осуществляется умножение младших разрядов множителей a[3..0], b[3..0], в накапливающий сумматор записывается промежуточный результат.

  • MID – последовательно осуществляются умножение следующих разрядов множителей a[3..0], b[7..4]. и a[7..4], b[3..0], на каждом такте накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения.

  • MSB – осуществляются умножение старших разрядов множителей a[7..4], b[7..4], накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения.

  • ERR – состояние ошибки.

Выводы модуля:

CLK – тактовый вход;

RST – вход асинхронного сброса автомата в начальное состояние;

START – вход запуска;

COUT[1..0] – вход номера такта процедуры умножения.

SEL[1..0] – выходные сигналы управления мультиплексорами.

SHIFT[1..0] – выходные сигналы управления модулем SHIFTER;

DONE – выходной сигнал окончания работы;

CLKEN – выходной сигнал разрешающий запись данных в

накапливающий сумматор;

REGCLR – выходной сигнал, осуществляющий синхронный сброс в

нуль накапливающего сумматора.

Модуль ACCUM.

ACCUM - шестнадцатеричный накапливающий сумматор. В состав сумматора входит собственно схема арифметического сумматора SUM, регистр хранения накопленной суммы REG и схема управления.

Выводы модуля:

CLK – тактовый вход;

CLR – вход синхронного сброса содержимого накапливающего

сумматора в нуль, активный уровень – логическая

единица;

CLKEN – входной сигнал разрешения работы, при CLKEN=0 работа

разрешена, при CLKEN=1 работа запрещена но сброс

накапливающего сумматора в нуль разрешён;

OUT[15..0] – шестнадцатеричный выход данных;

A – шестнадцатеричный вход данных.

Логика работы модуля:

При CLR=1 по переднему фронту сигнала CLK содержимое регистра REG сбрасывается в «0» независимо от состояния сигнала на входе CLKEN;

При CLKEN=0 результат суммирования сумматором SUM содержимого регистра REG и входного слова REG по переднему фронту сигнала записывается в регистр REG и выдаётся на выходную шину OUT[15..0].

Модуль COUNTER.

COUNTER - двухразрядный счётчик.

Выводы модуля:

CLK – тактовый вход;

CLR – вход асинхронного сброса счётчика сумматора в нуль

активный уровень сигнала– логическая единица;

CLKEN – входной сигнал разрешения работы активный

уровень сигнала– логический ноль;

TACT[1..0] – двухразрядный выход результата.

Счётчик реализует стандартный алгоритм прямого счёта, пробегая по циклу состоянии «0», «1», «2», «3».

Модуль MULT44.

MULT44модуль, реализующий операцию умножения четырёхразрядных чисел.

Выводы модуля:

A[4..1] – четырёхразрядный множитель A;

B[4..1] – четырёхразрядный множитель B;

RESULT[7..0] – восьмиразрядный выход результата.

Модуль MULT44 строится на основе параметризуемого умножителя lpm_mult, входящего в библиотеку lpm модулей системы MAX+PLUSII.

Прототип модуля находится в файле LPM_MULT. INC, находящемся в папке <Drive>:\maxplus2\max2lib\mega_lpm.

Прототип имеет следующий вид:

FUNCTION lpm_mult

(dataa[(LPM_WIDTHA-1)..0], datab[(LPM_WIDTHB-1)..0],

sum[LPM_WIDTHS-1)..0], alcr, clock)

WITH(LPM_WIDTHA, LPM_WIDTHB, LPM_WIDTHP,

LPM_WIDTHS, LPM_REPRESENTATION,

LPM_PIPELINE, LATENCY, INPUT_A_IS_CONSTANT,

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]