Реализация n-битного умножения на Spartan 3E Kit с использованием аппаратных умножителей
Функционирование встроенных умножителей 18х18, которые ускоряют DSP логику (отключения устройства) в семействе Spartan ™ -3. Особенности проектирования на примере реализации 4-битного умножения на Spartan-3 E Kit с использованием аппаратных умножителей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 25.04.2012 |
Размер файла | 1,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
3
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ
Кафедра АПВТ
Пояснительная записка к комплексному курсовому проекту
по курсу «Проектирование специализированных микропроцессорных систем»
на тему
Реализация n-битного умножения на Spartan 3E Kit с использованием аппаратных умножителей
Выполнила
Кульбакова Н. И.
Харьков 2009
РЕФЕРАТ
Целью курсового проектирования является на практике изучить все этапы проектирования на примере реализации 4-битного умножения на Spartan-3 E Kit с использованием аппаратных умножителей.
Работа включает в себя подробное исследование спецификации и работы встроенных умножителей Spartan-3 E Kit в различных режимах.
БЛОК, ПАРАМЕТРЫ, СПЕЦИФИКАЦИЯ, ПРОЕКТИРОВАНИЕ, УМНОЖЕНИЕ.
Содержание
аппаратный умножитель проектировани
Введение
1. Техническое задание
1.1 Назначение устройства
1.2 Требования к реализации
1.3 Входные/выходные параметры
2.Техническое предложение
2.1 Математическое обеспечение
2.1.1 Двоичная арифметика чисел с плавающей запятой
2.1.2 Умножение чисел с плавающей запятой
2.2 Выбор элементной базы
3. Эскизный проект
3.1 Спецификация умножителя, основные режимы
3.1.1 Сдвигающее устройство
3.1.2 Генератор возвращения величины
3.1.3 Возвращение дополнительного кода
3.1.4 Комплексное умножение
3.1.5 Режим разделения времени в матричном умножении
3.1.6 Умножение с плавающей точкой
3.1.7 Знаковый умножитель с дополнительным кодом
3.2 Спецификация и выбор времени
3.3 Библиотеки примитивов
3.4 Расширение умножителей
4. Технический проект
4.1 Описание блока умножителя в архитектуре Spartan -3
4.2 Описание двух умножителей в одном примитиве
4.3 Описание системы CORE генератора
4.4 Описание System Generator
4.5 Описание подмодулей умножителя
4.6 Описание MAC ядра
4.7 Отладка описания
5. Реализация устройства
5.1 Синтез и постсинтезное моделирование
5.2 Реализация и программирование
Выводы
Перечень ссылок
Приложение А
Приложение Б
Приложение B
ВВЕДЕНИЕ
аппаратный умножитель проектирование
Появление программируемой логики обозначило новое направление в проектировании цифровой аппаратуры. Теперь результатом проектирования стало описание конфигурации логических блоков и ячеек в FPGA и CPLD и связей между ними. Именно оптимальность схемного описания определяет конечные показатели быстродействия проекта и занимаемую площадь кристалла FPGA/CPLD, а также время выполнения самого этапа размещения и трассировки. Задача систем синтеза - это создание схемных описаний, максимально подготовленных к этапу размещения и трассировки.
В данной работе подробно рассматривается функционирование встроенных умножителей 18х18, которые ускоряют DSP логику (отключения устройства) в семействе Spartan ™ -3. Множители являются быстрыми и эффективными при осуществлении знакового или беззнакового умножения до 18 битов. Кроме основных функций умножения, встроенный блок умножитель может использоваться как сдвигающее устройство, или как генератор числа, или возвращать значение с дополнительным кодом. Множители могут быть расположены каскадом друг к другу, или как CLB логика для больших или более сложных функций.
Устройства Spartan-3A платформы DС включают высокоэффективные DSP48A блоки, которые совместимы с архитектурой Virtex ® -4 FPGA DSP48.
FPGA в Spartan-3 имеет множество особенностей, чтобы укрепить арифметические возможности чипа. Логический перенос и специализированная (выделенная) маршрутизация переноса обеспечивается так же, как и в прошлых поколениях. Специализированный (выделенный) вентиль «И» в CLB блоках ускоряют операции умножения массива. Самым новым и наиболее существенным добавлением является специализированный 18x18 блок множителя с двоичным дополнением. При задействовании от 4 до 104 из этих специализированных множителей в каждом устройстве, быстрые арифметические функции могут быть осуществлены с минимальным использованием ресурсов общего назначения. В дополнение к преимуществу работы, специализированные(выделенные) множители требуют меньшей мощности, чем множители, основанные на CLB. Легко имплементируются приложения типа знаковое - знаковое умножение, знаковое - без знака умножение, без знака - без знака умножение, логические, арифметические, устройства с циклическим сдвигом, дополнительный код и возвращение величины.
В данном курсовом проекте была описана реализации аппаратного умножителя и его работа на примере умножения n-битных чисел.
1 Техническое задание
Техническое задание (ТЗ) на проектирование должно содержать исчерпывающую и однозначную информацию о требованиях, предъявляемых к проекту. Техническое задание обычно объемный документ, в котором на естественном языке описана, по сути, словесная модель проектируемой системы. Несмотря на строгость и точность формулировок ТЗ не дает однозначного описания объекта проектирования и не позволяет непосредственно переходить от описания функционирования системы к ее техническому воплощению. Основные требования к проектированию: использование стандартных свободно распространяемых или лицензионных САПР, описание моделей с помощью ЯОА любого типа, использование тестового подхода к проверке исправности модели устройства. Способ проверки: программное моделирование тестов на всех этапах вплоть до физической реализации на кристалле; далее физическое моделирование.
1.1 Назначение устройства
Встроенные множители предлагают быстрый, эффективный способ создавать знаковый 18-разрядный результат в 18-разрядном устройстве умножения. Блоки множителя делятся распределенными ресурсами с блоком памяти SelectRAM ™, позволяя увеличивать эффективность для многих приложений. Каскадирование умножителей может быть имплементировано с дополнительными логическими ресурсами в локальном секторе Spartan -3.
1.2 Требования к реализации
Спецификация - часто устное или графическое описание поведения схемы. Это описание необходимо интерпретировать для построения диаграммы состояний или таблицу состояний как первый шаг в цикле проектирования устройства.
Сроки проектирования определяются сроками выполнения курсового проекта и составляют от 1 до 2 месяцев, включая разработку документации. Проект считается законченным, если проведено его физическое моделирование и результаты моделирования на одних и тех же тестовых наборах совпадают с результатами программного (математического) моделирования.
Инструментальные средства синтеза высокого уровня обычно автоматически выводят специализированный умножитель для универсальной операции умножения в VHDL или Verilog. Чтобы большее количество пользователей имело возможность использовать и управлять специальные возможности умножителя, нужно применить в проекте систему CORE Generator. 18x18-разрядные умножители могут быть быстро созданы при использовании системы CORE Generator™, или они могут быть применены при помощи VHDL или Verilog.
Так же имеют место ограничения местоположения. Образцы встроенного множителя MULT18X18 могут иметь LOC свойства, приложенные к ним для сокращения занимаемого места. Размещение MULT18X18 отличается от соглашения, используемого для расположения CLB, позволяя LOC свойствам легко перемещаться от массива к массиву. LOC свойства имеют следующий вид:
LOC = MULT18X18_X*Y * (1.1)
Например, MULT18X18_X0Y0 - находится в левом нижнем углу MULT18X18 на устройстве.
В работе 18x18-разрядный умножитель используется для умножения двух 4-х разрядных чисел со знаком и без знака.
1.3 Входные/выходные параметры
Таблица 1.1 - Описание входных и выходных параметров
Название |
Назначение |
Разрядность |
Функция |
|
A |
Вход |
4 бита |
Обеспечивает новые данные, которые используются в качестве одного из операндов умножения. |
|
B |
Вход |
4 бита |
Обеспечивает новые данные, которые используются в качестве одного из операндов умножения. |
|
P |
Выход |
8 бита |
Обеспечивает значение данных умножения с двоичным дополнением для операндов A и B. |
2. Техническое предложение
2.1 Математическое обеспечение
Прежде всего, необходимо проанализировать математическую основу проектируемого устройства, поскольку необходимо четко понимать какие действия необходимо будет ему произвести для достижения точных результатов при оптимальных затратах времени и средств. Так как рассматривается использование встроенного умножителя, то необходимо подробно изучить особенности двоичной арифметики чисел, уделяя особое внимание умножению.
2.1.1 Двоичная арифметика чисел с плавающей запятой
Простейшая запись числа с плавающей точкой N имеет вид:
N = F*2Е (2.1)
где, F - мантисса, E - порядок. Отрицательная мантисса и порядок часто записываются в дополнительном коде. Обычно мантисса F имеет длину 16 - 64 бита, а порядок 8 - 15 бит. В следующем примере предполагается, что F и E имеют длину 4 бита. Однако данный подход может быть применим к любому числу бит. Примеры чисел с плавающей точкой:
F= 0.101 E=0101 N= 5/8 * 25
F= 1.011 E=1011 N= - 5/8 * 2-5
F= 1.000 E=1000 N= -l * 2-8
Число с плавающей точкой имеет следующий формат рисунок 2.1
0 1 m m+2 m+p+1
+ / - |
мантисса |
+ / - |
порядок |
Рисунок 2.1 - формат числа с плавающей точкой
Чтобы использовать все биты мантиссы и увеличить число ее значащих символов необходимо ее нормализовать. Для этого модуль мантиссы сдвигается влево, пока его первый бит и знак не будут иметь различные значения. Сдвиг числа влево эквивалентен умножению на 2, следовательно, после каждого сдвига необходимо уменьшать порядок на 1, чтобы не изменить число N. Пример иллюстрирует нормализацию мантиссы с помощью операции сдвига:
Ненормализованное:
F= 0.0101 E=0011 N=5/16 * 23 = 5/2
Нормализованное:
F= 0.101 E=0010 N=5/8 * 22=5/2
Ненормализованное:
F= 1.11011 E=1100 N= -5/32 *2-4 = -5 * 2-9
(сдвиг F влево)
F= 1.1011 E=1011
N= -5/16 *2-5 = -5 * 2-9
Нормализованное:
F = 1.011 E=1010
N= -5/8 * 2-6 = -5 * 2-9
Нуль не может быть нормализован, поскольку F = 0.000 и N = 0. Может быть использовано любое значение порядка, однако лучше иметь единое представление 0.
Организацией IEEE разработан стандарт для чисел с плавающей точкой, который описывает единый способ их представления в компьютерных системах. Тем не менее, большинство арифметических устройств для чисел с плавающей точкой преобразуют IEEE обозначение в дополнительный код и затем используют его для выполнения операций с плавающей точкой. Окончательный результат преобразуется обратно в IEEE стандарт.
Из-за ограниченности числа разрядов мантиссы и порядка при выполнении операций над числами с плавающей запятой могут возникать следующие особые случаи.
1. Потеря значимости имеет место при выполнении операций сложения и вычитания, когда при равных порядках модули мантиссы равны с точностью до m старших разрядов. В этом случае выполнение операции приводит к числу с нулевой мантиссой и ненулевым порядком, т.е. к числу без значащих цифр. Полученное значение рассматривается как машинный нуль.
2. Исчезновение порядка происходит, когда порядок результата должен иметь значение, меньшее - (2Р -1) - максимального по модулю отрицательного порядка. В таком случае приходится представлять машинным нулем.
3. Переполнение порядка возникает, когда порядок результата должен иметь значение, превосходящее максимально возможное (2р - 1), такой результат не может быть представлен в рассмотренном формате, поэтому результат операции считается неопределенным, что отмечается выработкой признака переполнения.
4. Деление на нуль, которое невозможно, что отмечается выработкой признака переполнения.
Уменьшить вероятность переполнения разрядной сетки можно путем введения масштабных коэффициентов, на которые умножаются все исходные данные перед решением задачи. Однако для полного исключения переполнения необходимо оценивать возможные значения результата после каждой операции, что практически невыполнимо ввиду очень большого числа выполняемых операций. Поэтому принимаются специальные меры для обнаружения переполнения разрядной сетки. Наиболее широко для этой цели используются два способа. При обнаружении переполнения по первому способу учитывается обстоятельство, что переполнение может появиться только при сложении чисел с одинаковыми знаками. В этом случае о переполнении будет свидетельствовать несовпадение знака слагаемых и знака суммы. Недостатком этого способа является необходимость реализации двукратного сравнения знаков чисел и их запоминания до конца операции. Сущность второго способа состоит в использовании модифицированных прямого, обратного и дополнительного кодов. Особенностью этих кодов является наличие двух знаковых разрядов, а также кодирование знака числа двумя одинаковыми цифрами. Появление в знаковых разрядах модифицированного кода, обрабатываемых так же как и числовые разряды, различных цифр(например, 01 при сложении положительных чисел и 10 при сложении отрицательных) свидетельствует о переполнении разрядной сетки. Этот способ обнаружения переполнения получил наибольшее распространение.
2.1.2 Умножение чисел с плавающей запятой
Операцию умножения чисел с плавающей запятой можно представить в виде:
(F1*2E1)*(F2*2E2) = (F1*F2) 2(E1+E2) = F*2E (2.2)
Таким образом, для выполнения умножения необходимо перемножить мантиссы и сложить порядки. Предполагается, что мантиссы F1 и F2 были нормализованы до начала умножения.
Существует некоторые критические ситуации, которые могут привести к возникновению ошибки. Во первых, если F=0, то порядок должен содержать максимальное отрицательное число (1000). Во вторых, если выполнить умножение -1 на -1(1.000x1.000), то результат должен быть +1. Поскольку нельзя представить +1 в дополнительном коде, возникает переполнение мантиссы (fraction overflow). Для исправления этой ситуации, F устанавливается F=1/2(0.100) и порядок увеличивается на 1. Это возможно, поскольку 1*2E= 1/2 * 2E+1.
После выполнения умножения результат будет не нормализованный. Например,
(0,1*2Е1)* (0,1*2Е2)= 0,01*2Е1+Е2=0,1*2Е1+Е2+1 (2.3)
Результат умножения нормализуется сдвигом мантиссы влево на одну позицию, и вычитанием 1 из порядка. Если же величина порядка больше, чем может быть представлена отведенными для нее разрядами, возникает переполнение порядка.
После выполнения умножения мантисс, необходимо проверить все критические ситуации. Поскольку F1 и F2 перед выполнением умножения были нормализованы минимальная возможная мантисса будет 0.01, как это показано в приведенном выше примере. Следовательно для нормализации результата достаточно одной операции сдвига.
Устройство умножения чисел с плавающей запятой состоит из устройства сложения порядка и устройства умножения мантиссы.
При сложении порядков может возникнуть переполнение, если E1 и E2 положительные, а сумма отрицательна, и наоборот, если E1 и E2 отрицательны, а сумма положительна. Тем не менее, это переполнение может быть устранено добавлением или удалением 1 из Е во время нормализации или корректировки переполнения мантиссы.
Следующий пример иллюстрирует специальный случай, когда возникает начальное переполнение мантиссы и порядка, но переполнение порядка исчезает, при устранении переполнения мантиссы.
(1.000 2-3)*(1.000*2-6) = 01.000000*2-9 = 00.100000* 2-8 (2.4)
2.2 Выбор элементной базы
Технические характеристики печатной платы:
В общем случае, при выборе САПР приходится учитывать целый ряд соображений, а именно:
- распространенность САПР;
- цену САПР, ее сопровождения и модификаций;
- поддержку выбранной элементной базы;
- широту охвата разнообразных этапов проектирования и эффективное их выполнение;
- наличие широкой библиотечной поддержки стандартных решений;
- возможность и простоту стыковки с другими САПР;
- удобство работы с САПР и ее дружественность;
- легкость изучения;
- возможности корпоративной работы.
Анализ тенденции развития архитектур программируемой логики позволяет предположить, что в ближайшее время основу элементной базы цифровых систем будут составлять CPLD и FPGA. Преимущество использования программируемой логики в цифровых системах становится особенно очевидным, когда необходимо быстро разработать опытный образец изделия, предполагаются частые корректировки проекта в процессе его разработки или реконфигурация структуры устройства в процессе его функционирования
Объем ПЛИС в настоящее время достигает более 1млн. вентилей типа 2И-НЕ. Современные ПЛИС являются ISP приборами, т.е. программируемыми непосредственно в системе. Время задержки современных ПЛИС составляет до 0,5нс. на вентиль, а системные частоты составляют 200 МГц.
3. Эскизный проект
Эскизный проект - этап составления спецификаций отдельных блоков, разработка подробной структурно-блочной схемы устройства.
Если требуется снизить материальные затраты, а время работы не так критично, то можно разработать структурную схему, блоки которой выполняют несколько функций и могут использоваться несколько раз. Например, сначала блок производит какую-либо операцию, результата операции сохраняется в ФУ хранения, а затем блок выполняет другую операцию. Один из входных параметров для следующей операции может поступить из ФУ хранения, в который перед этим был занесен результат предыдущей операции. Так как двоичное умножение на 2n - это то же самое что сдвиг значения на n позиций, то умножитель можно использовать как сдвигающее устройство или другой ресурс общего назначения. Такой подход можно использовать в приложениях, которым бы не потребовалось большое количество доступных умножителей.
3.1 Спецификация умножителя, основные режимы
3.1.1 Сдвигающее устройство
Умножитель может использоваться как сдвигающее устройство. Один операнд посылается на вывод и сдвигается на n позиций, если другой операнд является степенью двойки (2n). Так как знаковый разряд (MSB) не может использоваться для управления сдвигом, 18x18 умножитель с дополнительным кодом может сдвигать от 0 до 16 позиций.
Из 36 строк вывода, те, что менее значимы, чем сдвинутые строки данных, автоматически заполнены нулями; а те, что более существенны, чем сдвинутые данные, заполнены нулями или единицами, в зависимости от состояния MSB ввода. Это и будет результатом умножения с дополнительным кодом.
Пользователь может производить логический сдвиг 17 входных битов путем удержания низкого уровня на MSB, или производить арифметический сдвиг 18-разрядного числа с дополнительным кодом.
Стандартное сдвигающее устройство, основанное на CLB, использовало бы массив из n мультиплексоров, каждый с n входами, и требовало большого количества маршрутизации ресурсов. Сдвигающие устройства, основанные на умножителе, имеющие больше чем 18 бит, и циклические сдвигающие устройства любой длины требуют внешнее коммутационное ИЛИ для выводов, но используют гораздо меньшее количество ресурсов CLB.
3.1.2 Генератор возвращения величины
Чтобы сгенерировать абсолютное значение числа, используя умножение, необходимо умножить на 1, если число положительное (MSB равно нулю), и умножить на -1, если оно отрицательное (MSB равно один). В примечании с дополнительным кодом, 1 когда все нули, заканчиваясь единицей в младшем бите, и -1 когда все единицы, включая младший бит. Поэтому, генератор возвращения величины или абсолютный генератор значения может быть имплементирован путем умножения значения с единицей в младшем бите и старшими битами (MSB) входного значения на остальных разрядных позициях. На рисунке 3.1 представлен генератор возвращения величины.
Рисунок 3.1 - Генератор возвращения величины
3.1.3 Возвращение дополнительного кода
Генерирование двоичного дополнения числа обычно требует только одного LUT на бит с использованием логики переноса для больших чисел. Однако, если сложно использовать LUT, то можно использовать умножитель для того, чтобы возвратить дополнительный код ввода. Умножение входного числа на число равной длины, состоящее из всех единиц, генерирует дополнительный код числа той же самой длины разрядов выхода. Любые посторонние биты более высокого порядка игнорируются. Рисунок 3.2 отображает двоичный генератор возвращения дополнения.
Рисунок 3.2 - Генератор возвращения дополнения Двоичный дополнение
3.1.4 Комплексное умножение
Комплексное умножение - умножение комплексных чисел, которые имеют реальную (вещественную) и мнимую часть с мнимым модулем i, равным квадратному корню из -1. Комплексное умножение может быть выполнено, используя только три реальных множителя: ac, bd, и (а + b)(с + d). Вещественной частью (а + ib)(с + id) является ac - bd, а мнимой частью является (а+ b)(с + d) - ac - bd . Большое количество умножителей в архитектуре Spartan -3 позволяет удобнее производить даже более сложное умножение.
3.1.5 Режим разделения времени в матричном умножении
Много конвейерных функций в компьютерной графике и видео выражены в матричной математике. Умножение 3 x 3 матриц требовал бы 27 умножителей и 18 сумматоров, чтобы сгенерировать 3 x 3 матричный результат. Преобразование цвета может быть описано как умножение 3 x 3 матрицы на константу, которое требует девять умножений и шесть сложений для получения результата.
Высокоскоростная возможность устройства Spartan-3 позволяет пользователю "разделять время" умножителей. Вместо девяти умножителей, в проекте имеется девять наборов вводов, приводящих к девяти наборам выходов в девять раз ускоряя работу системы, сокращая расчеты умножителя до одного. Логика сумматора реализована на CLB ресурсах, и при срабатывании каждого третьего таймера вывод сумматора сохраняется на выходе регистров, чтобы зафиксировать три результата.
3.1.6 Умножение с плавающей точкой
Значения с плавающей точкой добавляют к числу экспоненту и знаковый бит, используемый в двоичном умножении. 32-разрядный умножитель с плавающей точкой может быть реализован при использовании четырех блоков специализированного умножителя и CLB ресурсов. Такие множители доступны в Xilinx AllianceCORE ™.
3.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), согласно которому для формирования промежуточных вычисляемых частей используются мультиплексоры.
3.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- Примитивы умножителя
Примитив |
Разрядн. A |
B Width |
P Width |
знак/беззнак |
Выход |
|
MULT18X18 |
18 |
18 |
36 |
знаковое |
комбинаторный |
|
MULT18X18S |
18 |
18 |
36 |
знаковое |
буферизованный, регистровый |
В регистровой версии умножителя добавлен ввод С (таймер), управляемый высоким уровнем сигнала 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.3 Библиотеки примитивов
Библиотеки примитивов семейства Spartan -3 - используют примитивы MULT18X18 (комбинаторный) и MULT18X18S(регистровый) для встроенных умножителей.
Таблица 3.2 - Описание портов примитива MULT18X18SIO встроенного умножителя
Название |
Направление |
Функция |
|
A[17:0] |
Ввод |
Первое 18-разрядное двоичное значение дополнения для умножения. Блок умножается на это значение асинхронно, если опущены необязательные регистры AREG и PREG. Когда AREG и PREG используются, значение, полученное на этом порту, квалифицируется высоким уровнем CLK, подчиненный соответствующему ресурсу управления регистра. |
|
B [17:0] |
Ввод |
Второе 18-разрядное двоичное значение дополнительного кода для умножения, если атрибут B_INPUT установлен в DIRECT. Блок умножает на это значение асинхронно, если опущены необязательные регистры BREG и PREG. Когда AREG и PREG используются, значение, полученное на этом порту, квалифицируется высоким уровнем CLK, подчиненный соответствующему ресурсу управления регистра. |
|
BCIN[17:0] |
Ввод |
Второе 18-разрядное двоичное значение дополнительного кода для умножения, если атрибут B_INPUT установлен в CASCADE. Когда AREG и PREG используются, значение, полученное на этом порту, квалифицируется высоким уровнем CLK, подчиненный соответствующему ресурсу управления регистра. |
|
P [35:0] |
Вывод |
36-разрядное результат умножения с дополнительным кодом двух значений, поданные на вход умножителя. Если необязательный регистры AREG, BREG и PREG опущены, вывод работает асинхронно. Использование PREG заставляет этот вывод отвечать на высокий уровень CLK со значением, определенным CEP и RSTP. Если PREG опущен, но AREG и BREG используются, этот вывод отвечает на высокий уровень CLK со значением, определяемым CEA, RSTA, CEB, и RSTB. Если PREG опущен и только один из AREG или BREG используется, этот вывод отвечает и на асинхронные, и на синхронные события. |
|
BCOUT[17:0] |
Вывод |
Значение, применяемое ко второму вводу умножителя. Когда необязательный регистр BREG опущен, этот вывод отвечает асинхронно в ответ на изменения в портах B [17:0] или BCIN [17:0] согласно установке атрибута B_INPUT. Если BREG используется, этот вывод отвечает на высокий уровень CLK со значением, определяемым CEB и RSTB. |
|
CEA |
Ввод |
Значение, поданное на порт А[17:0], фиксируется AREG в ответ на передний фронт CLK на высоком уровне сигнал, при условии, что у RSTA низкий уровень. |
|
RSTA |
Ввод |
Синхронный сброс для необязательного регистра AREG. Значение AREG сбрасывается в ноль в ответ на передний фронт CLK, когда этот сигнал принимает высокий уровень. |
|
CEB |
Ввод |
Значение, поданное на порт B [17:0] или BCIN [17:0], фиксируется BREG в ответ на передний фронт CLK на высоком уровне сигнал, при условии, что у RSTВ низкий уровень. |
|
RSTB |
Ввод |
Синхронный сброс для необязательного регистра BREG. Значение BREG сбрасывается в ноль в ответ на передний фронт CLK. |
|
CEP |
Ввод |
Значение, переданное на вывод порта умножителя, фиксируется PREG в ответ на передний фронт CLK на высоком уровне сигнал, при условии, что у RSTР низкий уровень. |
|
RSTP |
Ввод |
Синхронный сброс для необязательного регистра РREG. Значение PREG сбрасывается в ноль в ответ на передний фронт CLK. |
Управляющие сигналы CLK, CEA, RSTA, CEB, RSTB, CEP, и RSTP имеют свойство перевернутой полярности.
3.4 Расширение умножителей
Умножение, использующее вводы с разрядностью больше чем 18 бит, можно реализовать путем разбиения процесса умножения на меньшие подпроцессы. Двоичное представление любого ввода может быть разбито на любом этапе, если принято во внимание приложения истинной нагрузки и знак MSB. Откол 18 MSBs от разрядности ввода является лучшим использованием 18-разрядных знаковых множителей.
Так, рисунок 3.6 показывает, как мог быть осуществлен 22x16 разрядный множитель. 22-разрядное значение разделяется на 18-разрядное знаковое значение и 4-разрядное значение без знака от LSBs. Сформированы две части продукта: первая- 20-разрядная знаковая, которая является результатом умножения 16-разрядного знакового значения на 4-разрядную беззнаковую часть. Вторая - 34-разрядная знаковая, сформированная при умножении 16-разрядного знакового значения на 18-разрядную знаковую часть. Процесс сложения восстанавливает нагрузку изделия (программ) (необходимо обратить внимание на наименьшие значащие биты первого обхода сложения продукта) и формирует конечный 38-разрядный продукт. Так как первый продукт знаковый, то 20-разрядное значение должно быть расширено перед сложением. Сумматор непосредственно должен быть 34 битный, требующий 17 частей (slices).
Рисунок 3.6 - Имплементация 22x16 разрядного умножителя
Имплементация может изменяться в зависимости от требований спецификации и доступных ресурсов.
Второй умножитель может быть имплементирован в ресурс MULT18X18 или в CLBS, если он маленький.
Для улучшения работы можно добавить конвейерную обработку, используя встроенные возможности специализированного умножителя. Если разрядность обоих вводов больше чем 18 битов, тогда формируются четыре промежуточные части, но беззнаковый результат младших битов просто может быть связан с 36-разрядным знаковым результатом старших битов (MSBS) и добавлен к другим двум результатам.
Примитив Spartan-3E/3A/3AN MULT18X18SIO имеет два дополнительных порта BCIN и BCOUT для каскадирования или разделения входа B умножителя среди нескольких блоков множителя.
18-разрядный “каскадный” входной порт BCIN предлагает дополнительный ресурс входа из более типичного ввода B. Атрибут B_INPUT определяет, использовать ли при имплементировании путь от BCIN или от входа B. Устанавливая B_INPUT в DIRECT, выбирается ввод B. Устанавливая B_INPUT в CASCADE, выбирается альтернативный вход BCIN. При необходимости регистр BREG тогда произвольно хранит выбранное входное значение.
BCOUT является 18-разрядным портом вывода, который всегда отражает значение поданное на второй вход умножителя. Этим значением может быть ввод B, каскадное значение от ввода BCIN, или вывод BREG, если он подключен. Рисунок 3.7 иллюстрирует четыре возможных конфигурации, использующие различные параметры настройки для атрибута B_INPUT и атрибута BREG.
Рисунок 3.7 - Четыре конфигурации входа B
Порты BCIN и BCOUT имеют специализированные маршруты, связывающие смежные умножители в пределах одного столбца. Благодаря каскадной связи порт BCOUT одного блока умножителя управляет портом BCIN блока умножителя непосредственно выше данного. Нет связи с портом BCIN самого нижнего блока умножителя в столбце или соединения от порта BCOUT самого верхнего блока в столбце.
Рисунок 3.8 представляет каскадную схему, реализующую 35x35-разрядного знакового умножителя, который использует четыре встроенных умножителя и два сумматора. Установленный сумматор имеет ширину 53 бита (17 младших бит всегда нулевые на одном входе). 34x34-разрядный подмодуль без знака представлен аналогичным способом с наиболее значимый бит на каждом операнде, привязываемом к логике Low.
Рисунок 3.8 - 35x35 знаковый умножитель
4. Технический проект
Описание проекта с выполняется помощью на ЯОА, т.к этот способ является наиболее гибким вариантом, хотя требует больше времени и знаний специфики используемого ЯОА. В качестве ЯОА для описания алгоритма выбран VHDL. Это обусловлено высокой адаптацией средств языка для нужд проектировщика, наличием эффективной среды моделирования (Active-HDL).
4.1 Описание блока умножителя в архитектуре Spartan -3
Множители расположены смежно с блоком RAM, что делает удобным хранение вводов или результатов в блочной памяти (см. рисунок 4.1). Маленькие устройства имеют один столбец, самые большие - до пяти столбцов. В тех случаях, когда имеется два столбца умножителей, то между ними и краем имеется две строки CLB, позволяя CLB или IOB логике легко управлять умножителем. Имеется четыре CLB блока, или 16 секторов и 32 ячейки LUT с обеих сторон данного блока множителя, позволяя 32 входным и выходным сигналам быть мгновенно соединенными совместно с блоком множителя. Одним из возможных высокоскоростных размещений будет, если поместить А[15:0] с одной стороны, B [15:0] с другой стороны, и разнообразие выводов P [31:0] с обеих сторон. Для полноразмерного 18x18 умножителя, дополнительные вводы и выводы можно соединить со следующим CLB столбцом. Для лучшего выполнения можно конвейеризовать вводы с регистраторами в смежном CLB блоке.
Рисунок 4.1 - Расположение умножителей в архитектуре Spartan -3
При этом два дополнительных столбца блока RAM/multiplier устройств XC3S4000 и XC3S5000 показаны пунктирными линиями. XC3S50 устройство имеет единственный столбец блока RAM/multipliers по левому краю.
Каждый множитель расположен смежно с 18 разрядным блоком оперативной памяти и совместно использует некоторые общие ресурсы. В семействах Spartan-3 и Spartan-3E, конфигурируя 18 разрядный блок оперативной памяти для 32/36-разрядных данных (512 x 36 режима), предотвращают использование связанного специализированного множителя, потому что более низкие 16 битов ввода сомножителя разделены с верхними 16 битами порта блочной оперативной памяти ввода данных. Точно так же более низкие 16 битов входа B сомножителя разделены с портом ввода данных А.
Spartan-3A/3AN платформы предлагают дополнительную маршрутизацию между блоком RAM и умножителем. Вводы порта независимы, так что умножитель может всегда использоваться, даже если блок RAM выводит на порту A все 36 разрядов. Поскольку порт B все еще совместно используется, рекомендуется определить блок RAM смешанным - с 36-разрядными данными относительно порта и более узкие данные (до x18) на порт B.
18-разрядов умножителя Spartan -3 не являются обычными, но соответствуют 18-разрядной ширине блока RAM, которая включает в себя биты четности. Стандартные 8-разрядные или 16-разрядные умножители могут быть созданы при использовании лишь части блока умножителя, или 32-разрядный умножитель может быть реализован путем каскадирования. Архитектура Xilinx позволяет имплементировать разрядность любой не стандартной ширины, точно соответствуя спецификациям приложения. Неиспользованные вводы умножителя автоматически подключены к нулю из-за соединения с неиспользуемыми ячейками LUТ, которые установлены в ноль.
Таблица 4.1 - Число умножителей в устройствах Spartan -3
Устройство |
Количество столбцов умножителей |
Количество умножителей |
|
XC3S50 |
1 |
4 |
|
XC3S200 |
2 |
12 |
|
XC3S400 |
2 |
16 |
|
XC3S1000 |
2 |
24 |
|
XC3S1500 |
2 |
32 |
|
XC3S2000 |
2 |
40 |
|
XC3S4000 |
4 |
96 |
|
XC3S5000 |
4 |
104 |
4.2 Описание двух умножителей в одном примитиве
Специализированный умножитель может использоваться для умножения двух маленьких чисел одновременно.
При размещении одного значения на младших битах, а другого на старших, могут быть получены два независимых результата, в случае, если результаты не накладываются друг на друга на выходах. Смещение одного из значений на N позиции к MSB является тем же, что и умножение его на 2n. Если значение, сдвинутое к MSB на значение X, тогда новое значение будет X * 2n. Если значение на младших битах равно Y, то конечный ввод умножителя является X * 2n + Y.
4.3 Описание системы CORE генератора
Множители, в которых используются встроенные Spartan-3 18x18-разрядные умножители с двоичным дополнением, могут быть легко сгенерированы с помощью 6.0 версии модуля CORE Множителя Генератора. Это ядро доступно с версией 5.1i и более поздними версиями системы CORE Generator. Особенности генератора:
* Генерирует параллельные умножители, использующие специализированные блоки умножителя, также может использовать другие ресурсы для параллельных умножителей или генерировать sequential/serialsequential и fixed/reloadable постоянные множители коэффициентов;
* Поддерживает со знаком / без знака режимы с двоичным дополнением;
* Поддерживает ввод в пределах от 1 до 64 бита;
* Поддерживает вывод в пределах от 1 до 129 битов;
* Генерирует комбинаторное и полностью конвейерное выполнение;
* Обеспечивает, необязательный регистровый вывод с таймером и асинхронным / синхронным сбросом;
* Обеспечивает необязательные сигналы подтверждения связи.
Рисунок 4.2 показывает логический символ для CORE Multiplier Generator. Вывод RFD (готовый к данным) принимает значение Ч1Ч, чтобы указать, что умножитель готов принять данные. Ввод ND (новые данные) может быть принят, чтобы указать, что новые данные доступны на входах умножителя. Сигнал RDY (готовый) указывает, что вывод - результат текущих расчетов. LOADB и SWAPB используются в постоянных коэффициентах умножителей.
Рисунок 4.2 - символ CORE Multiplier Generator
Система CORE Generator использует встроенный умножитель для заданного по умолчанию типа параллельного умножителя. Опция Multiplier Construction дает пользователю выбор, чтобы вместо этого имплементировать функцию в таблицы поиска.
На рисунке 4.3 представлена временная диаграмма CORE Generator.
Рисунок 4.3 - Временная диаграмма CORE Generator
4.4 Описание System Generator
Генератор умножителя используется Генератором Системы (System Generator) для цифрового обработчика сигналов (DSP) при использовании блока MULT. Генератор Системы представляет высокий уровень и абстрактное представление проекта, но также и раскрывает главные особенности в основе силиконе, позволяя формировать чрезвычайно быстродействующие FPGA имплементации. Генератор Системы также предоставляет блоки для компилирования MATLAB ® М-кода в синтезируемый HDL код. Генератор Системы использует встроенный умножитель, когда выбран параллельный умножитель и отмечено использование специализированного умножителя в интерфейсе Генератора Системы.
4.5 Описание подмодулей умножителя
Этот раздел описывает несколько примеров подмодулей, которые могут использоваться в проекте Spartan -3. Таблица 4.2 содержит список умножителей и возвращаемых функций с дополнительным кодом, которые используют один MULT18X18 примитив и не являются регистровыми.
Таблица 4.2: Встроенные подмодули умножителя - Единственный MULT18X18
Подмодуль |
Разрядность A |
Разрядность В |
Разрядность Р |
Знаковое / без знака |
|
MULT17X17_U |
17 |
17 |
34 |
без знака |
|
MULT8X8_S |
8 |
8 |
16 |
Знаковое |
|
MULT8X8_U |
8 |
8 |
16 |
без знака |
|
MULT4X4_S |
4 |
4 |
8 |
Знаковое |
|
MULT4X4_U |
4 |
4 |
8 |
без знака |
|
TWOS_CMP18 |
18 |
- |
18 |
- |
|
TWOS_CMP9 |
9 |
- |
9 |
- |
|
MAGNTD_18 |
18 |
- |
18 |
- |
Рисунок 4.4 и Рисунок 4.5, представляют 4X4-разрядный знаковый умножитель и 4X4-разрядный беззнаковый умножитель соответственно.
Рисунок 4.4 - Подмодуль MULT4X4_S
Рисунок 4.5 - Подмодуль MULT4X4_U
Подмодуль MAGNTD_18 возвращает величину (абсолютное значение) числа с дополнительным кодом. Входящее отрицательное число возвращается с положительным знаком, в то время как входящее положительное число остается неизменным. Подмодули TWOS_CMP18 и TWOS_CMP9 выполняют функцию возвращения двоичного дополнения. Дополнительная логика сектора может использоваться с этими подмодулями, чтобы эффективно преобразовать величину признака в дополнительный код или наоборот. Рисунок 4.6 показывает связь с MULT18X18 для создания подмодуля TWOS_CMP9.
Рисунок 4.6 - Подмодуль TWOS_CMP9
4.6 Описание MAC ядра
Система CORE Generator и System Generator могут также осуществлять более сложные функции, использующие умножитель как стандартный блок. Ядро аккумулятора умножителя (MAC) поддерживает до 32-разрядных вводов и определяемую пользователем конвейерную обработку. Опции встроенной или основанные на ячейках LUT имплементации контролируют, используются ли специализированные умножители или CLB ресурсы для функции. MAC имплементация использует относительно немного CLB ресурсов из специализированных умножителей, и обеспечивают гибкость, которая является ключевой при соответствии проекта самой низкой плотности и самой низкой возможной стоимости.
MAC и основанные на MAC фильтры FIR включают автоматическое конвейерное управление, которое основано на требуемом представлении системы синхронизации. Уровни конвейера будут автоматически вставлены согласно требованиям проекта для совершенного обмена скорости / области.
4.7 Отладка описания
В VHDL и Verilog доступны шаблоны реализации как примеры примитивов и подмодулей. В VHDL каждый шаблон имеет составляющую секцию объявления и секцию архитектуры. Каждая часть шаблона должна быть вставлена в пределах файла проекта VHDL. Port map в разделе архитектуры должны включать имена сигналов проекта.
Существует много опций для включения умножителя Spartan -3 в проект. Библиотечные примитивы MULT18X18 и MULT18X18S, описанные ранее, могут быть представлены в схематически или HDL кодом. Инструментарий синтеза может выводить блок умножителя из умножающегося оператора, включая Xilinx XST, Synplicity Synplify, и Mentor LeonardoSpectrum. Они могут вывести MULT18X18S, когда операция управляется таймером для синхронного умножителя.
LeonardoSpectrum предлагает конвейерный множитель, который вовлекает уровни регистров в логику, чтобы обеспечить параллелизм и, в результате, использует CLB ресурсы вместо специализированного умножителя. Требуется определенная конструкция для входа RTL описания, чтобы использовать конвейерный умножитель в полную силу.
Система моделирования Active-HDL позволяет подавать на верифицируемую модель тестовые последовательности, заданные в окне генератора воздействий, и снимать полученные результаты. Результаты моделирования выводятся на систему отображения временных диаграмм Waveform, встроенную в Active-HDL. Также существует возможность проводить верификацию, прибегнув к написанию тестовой программы. Такой способ годиться только для больших проектов. Целесообразно проводить верификацию по следующему плану: верификация блоков (компонентов), промежуточная верификация (при соединении нескольких блоков) и общая верификация (отладка всего проекта). Процедура проведения верификации отдельных блоков не отличается от описанной выше.
5. Реализация устройства
Реализация включает в себя синтез, постсинтезное моделирование, имплементацию (размещение и трассировку) и программирование.
5.1 Синтез и постсинтезное моделирование
Синтез проводится в программе Sinplify 7.0. Для начала требуется загрузить в программу VHDL-файлы компонентов, после чего запустить процесс синтеза. В результате мы получаем следующую схему:
Для проведения постсинтезного моделирования необходимо сгенерировать файл с расширением *.vhm, содержащий описания списка соединений на VHDL (по умолчанию после выполнения синтеза генерируется файл в формате edif, однако данный формат недостаточно изучен и менее нагляден. Поэтому в Synplify предусмотрена возможность генерировать файлы со списками соединений либо в формате VHDL, либо в формате Verilog). Моделирование выполняется на тех же входных наборах, что и при досинтезной верификации. Результаты моделирования могут отличаться от полученных ранее из-за внесения системой синтеза внутренних задержек на элементах и линиях схем.
В результате была получена модель умножителя на RTL уровне, которая представлена на рисунке 5.3.
Рисунок 5.3 - RTL уровень устройства
После проведения постсинтезного моделирования можно переходить к этапу имплементации (реализации) на выбранной ПЛИС.
5.2 Реализация и программирование
После программирования микросхемы, ее можно использовать как демонстрацию правильности работы устройства, совместимости его программного описания с реальной аппаратурой. Поскольку Spartan-3 E Kit дает возможность ввода только 4-х разрядного числа за раз, то будем загружать значение первого множителя и хранить его в памяти, после ввода второго операнда будет производиться умножение.
MULT_STYLE ограничение управляет имплементацией MULT18X18 примитивов. В Project Navigator (см. рисунок 5.1), значение по умолчанию - то, что Xilinx Synthesis Tool (XST) выберет лучший тип имплементации. Чтобы гарантировать, что используются встроенные умножители, необходимо установить MULT_STYLE = Block или выбрать "Block" для характеристики "Multiplier Style" в Project Navigator. MULT_STYLE ограничение может также применяться глобально в командной строке XST или добавлено к MULT18X18 примитиву. Для MULT18X18S, добавляют MULT_STYLE Ограничение к компоненту, а не к выходной шине.
Рисунок 5.1- Установка стиля умножителя в свойствах навигатора
ВЫВОДЫ
FPGA имеют существенное преимущество перед чипами цифрового обработчика сигналов общего назначения, потому что их логика может быть перестроена под определенное приложение. Некоторые функции могут работать в 100 раз быстрее, и требует намного меньше материальных расходов для FPGA. Главной особенностью этого преимущества является специализированный блок умножения. Также для достижения желаемых результатов есть возможность, как автоматической оптимизации логики умножения, так и ручного управления при необходимости. Система CORE Generator может создавать простые умножители или объединять их в более сложные функции типа MAC.
В работе было реализовано аппаратное умножение двух 4-х разрядных чисел на Spartan-3 E Kit с использованием специализированного встроенного блока умножителя, листинг кода программы представлен в приложении А.
В целом, поставленная задача успешно выполнена.
ПЕРЕЧЕНЬ ССЫЛОК
1. Лобода В.Г. и др. Проектирование встроенных устройств на микропроцессорах: Учеб. пособие. - К.: УМК ВО, 1988. - 128 с.
2. Бибило П.Н. Основы языка VHDL. - М.: Солон-Р, 2000. - 200 с.
3. http://www.xilinx.com.
4. Методические указания к курсовому проектированию по курсу „Параллельные и распределенные счисления” для студентов дневной формы обучения /Упор. Аксак Н.Г. - Харьков: ХТУРЭ, 2008.
5. XAPP636 Optimal Pipelining of the I/O Ports of Virtex-II Multipliers
ПРИЛОЖЕНИЕ А
Листинг кода реализации 4-х разрядного умножения чисел со знаком с использованием специализированного встроенного блока умножителя.
Sorce.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity sorce is
port (
A: in std_logic_vector (3 downto 0);
load, rst, clk: in std_logic;
P: out std_logic_vector (7 downto 0)
);
end sorce;
architecture Behavioral of sorce is
component mult4x4_s is
port (
A: in std_logic_vector (3 downto 0);
B : in std_logic_vector (3 downto 0);
P: out std_logic_vector (7 downto 0)
);
end component;
signal reg1: std_logic_vector (3 downto 0);
signal sA,sB :std_logic_vector (3 downto 0);
signal sP,sAA :std_logic_vector (7 downto 0);
signal s :std_logic;
begin
M1: mult4x4_s port map (A, reg1, sP);
process(clk, rst)
begin
if rst='1' then
reg1<="0000";
elsif clk='1' and clk'event then
if load='1'then
reg1<=A;
end if;
end if;
end process;
p2: process(clk)
begin
if clk='1' and clk'event then
p <= sP;
end if;
end process;
end Behavioral;
mult4x4_s.vhd
library IEEE;
use IEEE.std_logic_1164.all;
--
-- pragma translate_off
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
-- pragma translate_on
--
entity mult4x4_s is
port (
A: in std_logic_vector (3 downto 0);
B : in std_logic_vector (3 downto 0);
P: out std_logic_vector (7 downto 0)
);
end mult4x4_s;
--
architecture mult4x4_s_arch of mult4x4_s is
--
-- Components Declarations:
--
component MULT18X18
port (
A: in std_logic_vector (17 downto 0);
B: in std_logic_vector (17 downto 0);
P: out std_logic_vector (35 downto 0)
);
end component;
--
signal A_int : std_logic_vector (17 downto 0);
signal B_int : std_logic_vector (17 downto 0);
signal P_int : std_logic_vector (35 downto 0);
--
begin
A_int (17 downto 8) <= "0000000000";
A_int (7 downto 7) <= A (3 downto 3);
A_int (6 downto 6) <= A (3 downto 3);
A_int (5 downto 5) <= A (3 downto 3);
A_int (4 downto 4) <= A (3 downto 3);
A_int (3 downto 0) <= A (3 downto 0);
B_int (17 downto 8) <= "0000000000";
B_int (7 downto 7) <= B (3 downto 3);
B_int (6 downto 6) <= B (3 downto 3);
B_int (5 downto 5) <= B (3 downto 3);
B_int (4 downto 4) <= B (3 downto 3);
B_int (3 downto 0) <= B (3 downto 0);
P (7 downto 0) <= P_int (7 downto 0);
--Multiplier Instantiation
U_MULT18X18: MULT18X18
port map (
A => A_int (17 downto 0),
B => B_int (17 downto 0),
P => P_int (35 downto 0)
);
end mult4x4_s_arch;
ucf.ucf
NET "clk" LOC = "C9"|IOSTANDARD = LVCMOS33;
NET "P<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
Подобные документы
История развития логических схем с программируемой и репрограммируемой структурами, рост уровня их интеграции и взаимосвязь между ними. Краткий обзор основных семейств Плис фирмы Xilinx. Детальный обзор архитектур и характеристик серий семейства Spartan.
контрольная работа [1,2 M], добавлен 13.06.2013Характеристика таблицы умножения Пифагора; ее применение. Русские математические изобретения, основанные на манипуляциях, которые приводят к нужному результату. Изучение алгоритма работы русского крестьянского способа умножения. Вычисление длинных чисел.
курсовая работа [1,2 M], добавлен 05.12.2013Теоретическое изучение системы проведения арифметических операций над двоичными числами. Создание описания операций умножения и блок-схемы алгоритма её выполнения. Определение набора управляющих сигналов и синтез схемы арифметико-логического устройства.
курсовая работа [169,3 K], добавлен 25.12.2012Составление программы, реализующей моделирование операции умножения, начиная со старших разрядов множителя, при сдвиге суммы частичного произведения влево и неподвижным множителем. Особенности реализации программы на алгоритмическом языке Assembler.
курсовая работа [26,9 K], добавлен 25.05.2014Понятие САПР и общее представление об автоматизированных рабочих местах. Информационная технология проектирования автоматизированного рабочего места и эргономика аппаратных и программных средств АРМ. Сравнительная характеристика современных плоттеров.
дипломная работа [3,9 M], добавлен 03.03.2011Принципы осуществления администрирования и управления кабельной системой. Анализ компонентов коммутационного оборудования кроссовых и аппаратных кабельных систем, а также особенности составления планов их размещения в помещениях кроссовых и аппаратных.
реферат [571,8 K], добавлен 11.12.2010Выполнение операции деления в ЭВМ. Умножение чисел, представленных в форме с плавающей запятой. Методы ускорения операции умножения. Матричный метод умножения. Деление чисел в машинах с плавающей запятой. Деление чисел с восстановлением остатков.
реферат [49,4 K], добавлен 18.01.2011Понятие двоично-десятичного кода (ДДК), его получение и использование. Изучение арифметико-логических устройств, использующихся для обработки ДДК. Алгоритмы сложения, вычитания, умножения и деления ДДК при помощи арифметико-логических устройств.
контрольная работа [145,5 K], добавлен 05.09.2010Анализ аппаратных и программных средств предприятия ТОО "Alicesystems", занимающегося разработкой web-сайтов. Выбор структур, топологий и технологий разработки системы. Технологии создания сайтов и выбор площадки. Описание программно-аппаратных средств.
отчет по практике [690,9 K], добавлен 29.05.2015Разработка вычислительного устройства для умножения двоичных чисел с фиксированной запятой, без знака, представленных в прямом коде. Алгоритм операции, структурная схема АЛУ, диаграмма управляющих сигналов, функциональная схема устройства управления.
контрольная работа [180,2 K], добавлен 01.10.2014