Реализация n-битного умножения на Spartan 3E Kit с использованием аппаратных умножителей

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

±ит, используемый в двоичном умножении. 32-разрядный умножитель с плавающей точкой может быть реализован при использовании четырех блоков специализированного умножителя и CLB ресурсов. Такие множители доступны в Xilinx AllianceCORE ™.

 

.1.7 Знаковый умножитель с дополнительным кодом

Примитив умножителя MULT18X18SIO показан на рисунке 3.3.

Рисунок 3.3 - Примитив умножителя MULT18X18SIO

 

Каждый умножитель выполняет операцию P = A*B, где A и B - 18-разрядные слова с дополнительным кодом, и P - 36-разрядный выход с полной точностью также с дополнительным кодом. 18-разрядные вводы представляют значения в пределах от -131,07210 до +131,07110 и результат находится в пределах от -17,179,738,11210 до +17,179,869,18410.

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

Каждый встроенный блок умножителя (MULT18X18 примитив) поддерживает два независимых динамических порта ввода данных: 18-разрядный знаковый или 17-разрядный без знака. Два ввода относят к сомножителю и множителю, или коэффициентам(факторам), в то время как вывод - изделие(программа). Примитив MULT18X18 показан на рисунке 3.4.

 

Рисунок 3.4 - Встроенный умножитель

Кроме того, эффективное каскадирование умножителей до 35 x 35-разрядных знаковых может быть выполнено при использовании четырех встроенных множителей, 36-разрядного сумматора и 53-разрядного сумматора.

Двоичное умножение подобно обычному умножению с сомножителем, умноженным каждым битом множителя для создания частичных вычислений, которые затем складываются вместе для формирования результата. Блок умножителя от Xilinx использует изменяемый алгоритм Бута (Booth algorithm), согласно которому для формирования промежуточных вычисляемых частей используются мультиплексоры.

 

.2 Спецификация и выбор времени

 

Результат генерируется быстрее для младших битов (LSB), чем для старших (MSB), поскольку MSB требуют большего количества уровней сложения, поэтому выбор времени отличен для каждого из 36 выводов умножителя. Проекты должны использовать ровно столько разрядов вывода, сколько им необходимо на самом деле. Например, если два n-битных числа без знака никогда не будут иметь результата равного 235 или выше, то P [35] вывода всегда будет равен нулю. Для любой пары знаковых n-битных чисел, если у вас никогда не получится -2n-1 x -2n-1, тогда MSB всегда равен следующему биту более низкого порядка (P [2n-1] = P [2n-2]). Также необходимо учитывать, что, если некоторые выводы должны иметь большие направляющие задержки, они должны быть присвоены LSBs выводам, чтобы (балансировать) соответствовать задержкам MSB.

По той же самой причине, установка вводов данных время для конвейерного умножителя будет короче для MSBs чем для LSB, но параметры выбора времени не дифференцируются между контактами (выводами) для установки времени. Для обеспечения дополнительной надежности в проекте, медленным вводам нужно присвоить MSBs.

Установка времени для вводов Сброса и Таймера(синхронизации) более быстрая, чем для любого из вводов данных, и все имеют нулевую задержку времени. Параметр выбора времени называется ""tMULIDCK"" (вводные данные умножителя к таймеру) и используется как для ввода данные, так и для ввода управления, но будут иметь различные значения для каждого типа.

Для встроенных множителей доступны два библиотечных примитива, которые описаны в Таблице 3.1.

 

Таблице 3.1- Примитивы умножителя

ПримитивРазрядн. AB WidthP Widthзнак/беззнакВыходMULT18X18181836знаковоекомбинаторныйMULT18X18S181836знаковоебуферизованный, регистровый

В регистровой версии умножителя добавлен ввод С (таймер), управляемый высоким уровнем сигнала CE(Clock Enable), и синхронный сброс R (Reset), см. рисунок 3.5. Регистры выполнены в умножителе непосредственно и не требуют никаких других ресурсов. Все вводы управления C, CE, и R имеют встроенную программируемую полярность. Входы данных, таймер, и сброс должны выполнить установку времени до появления (изменения) фронта синхроимпульса, и данные на выводах P изменяются после задержки clock-to-output.

 

Рисунок 3.5 - Комбинаторный и регистровый примитивы умножителя

Также можно применить конвейерные регистры. Одноступенчатый множитель обычно использует вывод PREG регистра. Двухступенчатый множитель обычно использует вводы регистров AREG/BREG и выход регистра PREG.

Чтобы применить конвейерные регистры в примитиве MULT18X18SIO, регистры AREG, BREG и атрибуты PREG установлены в 1, чтобы установить регистр в 0 необходимо это отменить и сделать путь сигнала комбинаторным. Значение по умолчанию - 1 или полный конвейер.

Названия контактов, используемые в инструментальных средствах Xilinx, такие как FPGA Editor, являются идентичными тем, что используются в библиотечных примитивах.

 

.3 Библиотеки примитивов

 

Библиотеки примитивов семейства Spartan -3 - используют примитивы MULT18X18 (комбинаторный) и MULT18X18S(регистровый) для встроенных умножителей.

 

Таблица 3.2 - Описание портов примитива MULT18X18SIO встроенного умножителя

НазваниеНаправление ФункцияA[17:0]ВводПервое 18-разрядное двоичное значение дополнения для умножения. Блок умножается на это значение асинхронно, если опущены необязательные регистры AREG и PREG. Когда AREG и PREG используются, значение, полученное на этом порту, квалифицируется высоким уровнем CLK, подчиненный соответствующему ресурсу управления регистра.B [17:0]ВводВторое 18-разрядное двоичное значение дополнительного кода для умножения, если атрибут B_INPUT установлен в DIRECT. Блок умножает на это значение асинхронно, если опуще