Фиксированные вентили против настраиваемой логики
Любая схема из других статей строится из вентилей, функция которых зафиксирована на этапе проектирования — вентиль AND никогда не станет вентилем OR. FPGA (программируемая пользователем вентильная матрица) использует противоположный подход: она поставляется как сетка универсальных, перенастраиваемых логических ячеек, поведение которых задаётся уже после производства, путём загрузки конфигурации, указывающей каждой ячейке, какую функцию выполнять.
Таблица соответствия (LUT)
Ядро каждой перенастраиваемой ячейки — это таблица соответствия (Look-Up Table): хранилище, содержащее один выходной бит для каждой возможной комбинации входов — это ровно таблица истинности, хранящаяся прямо в памяти вместо построения из вентилей. 4-входовый LUT хранит 16 бит, один на строку 4-переменной таблицы истинности, и поэтому может реализовать любую из 65 536 возможных 4-входовых булевых функций просто изменением того, какие 16 бит хранятся, без какой-либо перепайки.
FPGA как массив LUT и триггеров
Полноценная FPGA объединяет тысячи таких LUT с триггерами и программируемой матрицей соединений, подключающей выходы LUT ко входам других LUT или к триггерам для хранения состояния. Загрузка «битстрима» одновременно настраивает содержимое каждого LUT и каждый переключатель соединений, превращая универсальную сетку в любую конкретную спроектированную схему — в принципе, вплоть до целого процессора.
Блоки PLM в Boolflow
Блоки PLM (программируемая логическая матрица) в Boolflow моделируют ровно эту идею в малом масштабе: вместо соединения отдельных вентилей AND/OR/NOT вы напрямую задаёте выход для каждой комбинации входов — точно так же, как задаётся содержимое LUT. Блок PLM с N входами функционально идентичен N-входовому LUT.
От таблицы истинности к конфигурации LUT
Поскольку LUT или блок PLM хранит функцию, а не строит её из вентилей, рабочий процесс переворачивается: вместо упрощения с помощью законов Де Моргана или карты Карно для минимизации числа вентилей, вы записываете желаемую таблицу истинности прямо и загружаете её. Откройте элемент PLM в редакторе Boolflow (см. справку для полного списка элементов) и настройте его выходы строку за строкой, чтобы увидеть это в действии.