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

0 + 0 = 00

0 + 1 = 01

1 + 0 = 01

1 + 1 = 10 (1 переносится в следующий разряд)

 

Таким образом, результат сложения двух однобитных чисел может быть получен с помощью вентиля ИСКЛЮЧАЮЩЕЕ ИЛИ, а бит переноса, если он необходим – с помощью вентиля И. Однако при проектировании для ПЛИС не следует заменять арифметические выражения на эквивалентные логические аналоги, поскольку в этом случае САПР не сможет воспользоваться оптимальными шаблонами проектирования, которые, в частности, для операций сложения и вычитания, позволяют задействовать выделенные ресурсы логических ячеек – линии ускоренного переноса. Кроме того, построение многоразрядных сумматоров/вычитателей производится с применением шаблонов размещения – так называемых RelationallyPlacedMacro (RPM). Такие шаблоны обеспечивают оптимальное относительное размещение разрядов сумматора/вычитателя, которое, вероятнее всего, не будет достигнуто при синтезе описания сумматора, основанного на логических соотношениях между отдельными разрядами. Поэтому арифметические действия следует описывать с использованием символов соответствующих арифметических операций:

Для операции умножения будет автоматически использован выделенный аппаратный умножитель. Последний пример представляет собой операцию «умножение с накоплением» (MAC, MultiplyAndAccumulate), которая широко используется в устройствах цифровой обработки сигналов. САПР ПЛИС распознают выражения представленного вида, реализуя их на базе блоков «умножение с накоплением», которые присутствуют во многих семействах ПЛИС.

 = Перейти к содержанию =