Рисунок 1 – Обобщенная структура базовой ячейки FPGA

Логический вентиль - базовая составляющая матрицы, выполняющий элементарную логическую операцию. Он выводит результат булевой операции от входящих в него данных(сигналов).

В настоящее время аппаратная реализация вентилей выполняется на полевых транзисторах, но их так же можно реализовать с помощью электромагнитных реле, но быстродействие заметно ухудшится. Отдельные семейств FPGA имеют свои особенности архитектуры, в нашем случае применяется семейство Cyclone IV.

В FPGA конфигурация происходит с использованием памяти (Configuration RAM). Память установлена по всей поверхности кристалла. Коммутацией управляют значения, записанные в память, определяя “трассировку” будущего устройства. Данная память является энергозависимой, то есть при подаче питания, значения в память необходимо загрузить из внешнего источника, например, ПЗУ установленной на отладочной плате или компьютера с использованием программатора USB Blaster.

Важной характеристикой так же считается количество логических элементов в кристалле FPGA. Емкость показывает насколько сложные устройства можно реализовать. Чем больше на кристалле логических элементов (Logic Elements) тем лучше. В нашем случае используется Cyclone IV EP4CE6E22C8, в которой расположено 6272 (шесть тысяч двести семьдесят два) элемента.

Достоверно известно, что используя базовые элементы И-НЕ или ИЛИ-НЕ, возможно реализовать любую логическую функцию. Однако использование однотипных элементов не оправданно технически, так как синтезированная схема задействует большое количество этих элементов, и тем самым увеличится время прохождения сигнала, что снизит быстродействие. В FPGA в качестве базового логического элемента (ячейки) используется более сложная структура, представляющая собой соединение программируемого комбинационного устройства и D-триггера.

Ячейка имеет три логических входа DATAA, DATAB и DATAC, вход тактирования CLK и один логический выход LEOUT. Если ячейка работает в качестве комбинационного устройства, мультиплексор расположенный на выходе коммутирует выход элемента LUT на выход всей ячейки LEOUT. Если выход ячейки должен быть регистровый, то сигнал с LUT коммутируется по сигналу синхронизации CLK в D-триггер, а тот в свою очередь через мультиплексор на выход ячейки LEOUT. Обобщенная структура базовой ячейки приведена на рисунке 1.

Особое внимание обратим на элемент LUT (Look-Up Table) дословно можно перевести как справочная таблица. Но это больше чем таблица, это скорее метод реализаций функций, в котором непосредственное вычисление заменяется поиском готового решения в таблице. В FPGA это позволяет синтезировать любую логическую функцию в виде памяти SRAM, аргументом – является адрес, а значением – содержимое таблицы.

Для реализации некоторых устройств достаточно имеющегося набора в ячейки, но для создания всех известных триггеров, в структуру добавили изменения, а именно обратную связь. Для этого подали сигнал на один из входов LUT c выхода D-триггера. Так же добавили дополнительные линии управления для D-триггера, вход разрешения ENA и вход асинхронного сброса ACLR.

Рисунок 2 – Структура логического элемента с каналом переноса

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

Фактически для переноса добавили еще один LUT, но для простоты восприятия их рассматривают как единый модуль. Используя канал переноса, можно объединить ячейки, например, для синтезирования 5-разрядного сумматора с последовательным переносом, задействовав пять базовых логических элементов.

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

Рассмотренная ячейка в том или ином виде широко применяется в различных семействах FPGA, в нее добавляют дополнительные соединения внутри ячейки и порты для интеграции в глобальную сеть FPGA. Ячейка в использованной нами семейством Cyclone IV приведена на рисунке 3.

Также, как и в базовой ячейке, каждый триггер имеет вход тактирования CLK, вход разрешения ENA и вход асинхронного сброса ACLR. Для управления триггером имеется логический сигнал SCLR (синхронная очистка), если на этом входе будет логическая единица, то следующим тактом CLK, в D-триггер запишется логический ноль. Данные отличия позволяют настроить триггер каждой ячейки в режим D, T, JK или RS триггера.

В Cyclone IV LUT может работать в двух режимах: нормальный и арифметический. При компиляции Quartus автоматический выбирает оптимальный режим для конкретной функции.  Комбинационное устройство так же получило некоторое усложнение, мультиплексор на входе выбирает источник сигнала. Благодаря этому можно реализовать функцию четырех переменных.

         Логические элементы объединяют в LAB (логические блоки). В Cyclone IV один такой LAB содержит в себе:

  • 16 логических ячеек
  • Сигналы управления LAB
  • Цепи локальных соединений
  • Цепи флага переноса
  • Цепи каскадного объединения регистров

Рисунок 3 – Логическая ячейка Cyclone IV

Цепи объединения регистров соединяют выход одной ячейки с входом прилегающих ячеек. Цепи локальных соединений соединяют между собой ячейки в одном логическом блоке LAB. С глобального коммутационного поля сигнал поступает на локальные соединения, принадлежащие этому логическому блоку. Каждая ячейка имеет три выхода, которые соединяются с коммутационным полем FPGA. Эти выходы поступают на столбцы и строки глобальных соединений и на маршруты локальных соединений.