Найти в Дзене
IT. Как это работает?

ПЛИС. Умножитель в период экономического кризиса

Оглавление

Увы, стоимость аппаратных платформ с вычислительными узлами в виде ПЛИС все еще достаточно велика в сравнении с такими популярными комплектами как Arduino и другими одноплатными компьютерами. Однако, не будем забывать что стараниями небезызвестной компании Intel технология реконфигурируемых вычислений (ПЛИС, они же FPGA) позиционируется как наиболее вероятное спасение от неминуемой ловушки, размером в нанометры (образно говоря про проблему уменьшения транзисторов). Параллельные реконфигурируемые вычислители еще скажут свое слово, поэтому будущим разработчикам стоит пробовать свои силы уже сейчас.

Что можем себе позволить?

Как пробовать свои силы, если топовые отладочные комплекты могут стоить до 350 тыс. рублей?

Отладочные комплекты от Xilinx традиционно в цене
Отладочные комплекты от Xilinx традиционно в цене

Тем кто еще не пользуется таким (рис. выше) богатством по работе, можно рекомендовать к покупке только самые бюджетные отладочные комплекты. Их стоимость вполне приемлема и возможности неплохи.

Китайские отладочные комплекты спасают ситуацию в малобюджетном сегменте
Китайские отладочные комплекты спасают ситуацию в малобюджетном сегменте

На базе китайского комплекта можно освоить весь курс цифровой схемотехники, на основе полученных навыков спроектировать контроллеры "мыши", клавиатуры, работать с изображениями (пусть и малого разрешения) и много чего еще. Однако, нужно признать, что ресурсы такого вычислителя сильно ограничены. Прежде всего, в задачах обработки сигналов и изображений нам пригодятся умножители.

Таблица ресурсов ПЛИС серии Cyclone 4
Таблица ресурсов ПЛИС серии Cyclone 4

Таблица выше подсказывает, что в одной из самых дешевых моделей ПЛИС мало как логических ячеек (около 6 тыс), памяти (270 кбит), так и умножителей 18*18 бит (15 штук). Как показывает практика, сложности проектируемых на первых порах автоматах не такие большие, чтоб задействовать 6 тыс. ячеек, но вот с умножителями беда. Используются они довольно часто и густо).

Простейшая схема обработки сигнала
Простейшая схема обработки сигнала

На рисунке выше довольно несложная схема обработки сигнала, где часть операций можно выполнить над оцифрованным сигналом. Кроме хорошо заметного умножителя, используемого для преобразования частоты, очень много умножителей скрыто внутри полосовых фильтров.

Какие у нас варианты?

Опыт использования таких изделий дает нам пару неплохих решений и каждое из них применимо в своем случае.

Точность вычислений не так важна

У встроенных умножителей 18*18 бит есть спасительное свойство - они совершенно легко делятся на вдвое большее количество умножителей 9*9 бит. Достаточно, например, в параметрах разработанного ранее модуля указать разрядность множителей:

В этом примере экземпляр умножителя myMult имеет разрядность множителей (N) 9 бит. Таким образом, вместо 15 умножителей мы можем пользоваться 30-ю, но менее точными. Возникающие при этом несовместимости в разрядности шин можно обойти так, как описано тут и тут.

Время выполнения не очень важно

Это направление пока не получится раскрыть в достаточной мере. Уж слишком сложна и обширна тема. Однако, если без прикрас, то совершить N умножений можно используя всего 1 умножитель. Разумеется, делается это минимум за N шагов. Такой подход мало чем отличается от того, как это делают процессоры, однако, он не только имеет право на существование, но и является краеугольным камнем в организации конвейерных вычислений в технологии HLS (синтез высокого уровня). Так или иначе, выигрыш по скорости в сравнении с процессорами получается и это нельзя отрицать.

Точность вычислений очень важна

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

К большому сожалению, умножение это довольно коварная операция с точки зрения задействования ресурсов.

при умножении 4*4 бит происходит 16 операций "AND" и 3 операции сложения
при умножении 4*4 бит происходит 16 операций "AND" и 3 операции сложения

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

количество поразрядных умножений равно разрядности множителей, возведенной во 2-ую степень.

Следуя этой логике, при реализации высокоточного умножителя 32*32 бит количество умножений 16*16 бит будет 4 шт, что при полном распараллеливании приведет к большим тратам и так малочисленного ресурса. Дело в том, что для умножения 16*16 бит потребуется участие всего без остатка умножителя 18*18 бит.

В свое время Анатолий Карацуба сделал нам хороший подарок в виде своего алгоритма умножения чисел. Тем, кто уже знаком с ним ничего не грозит, а вот впервые увидевшим ЭТО не завидую. Способ ломает школьный подход напрочь.

Метод Карацубы. Источник: https://en.wikipedia.org/wiki/Karatsuba_algorithm
Метод Карацубы. Источник: https://en.wikipedia.org/wiki/Karatsuba_algorithm

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

Реализовав данный метод при помощи языка Verilog, получил следующее:

Умножение 32*32 бита обычным способом требует 4 умножителя 18*18 бит. При реализации методом Карацубы требуется всего 3 умножителя 18*18 бит. Экономия дефицитных умножителей 25 %.

Исходный код:

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

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

Также не обойдите вниманием канал на YouTube. Подписки и лайки будут приятным ответом от аудитории.