Программируемые интегральные микросхемы CPLD предназначены для применения в цифровых устройствах с большим количеством логических элементов. Кроме того, в CPLD трудно обеспечить эффективное применение всех макроячеек. Всегда часть макроячеек остается неиспользуемыми. Часто из макроячейки используется только триггер или логический элемент "2И" ("2ИЛИ"). Остальная часть схемы зря занимает площадь кристалла и потребляет ток от источника питания.
Для реализации сложных цифровых схем удобно применять программируемые логические схемы (ПЛИС), обладающие большей логической вместимостью и большей степенью использования кристалла. В качестве подобных микросхем и можно назвать программируемые пользователем вентильные матрицы (FPGA — Field- Programmable Gate Array). Принцип работы FPGA существенно отличаются от принципа работы CPLD. FPGA является наследником комбинационных схем, реализованных на постоянных запоминающих устройствах (ПЗУ). Обобщенная структура микросхем FPGA приведена на рисунке 1.
Рисунок 1. Обобщенная структура микросхем FPGA
Типовая схема программируемой интегральной микросхемы FPGA состоит из трех видов блоков: логические блоки, блоки ввода-вывода, предназначенные для обмена сигналами через внешние выводы микросхемы и программируемые электронные ключи, предназначенные для создания соединений между внутренними блоками микросхемы FPGA. Логические блоки размещаются в узлах решетки вертикальных и горизонтальных шин проводников. Благодаря возможности соединения проводников при помощи электронных ключей друг с другом, можно создавать нужные нам соединения между логическими блоками. Соединения осуществляемые электронными ключами можно программировать, замыкая и размыкая эти ключи. Матрица соединений хранится в ПЗУ конфигурации и может быть изменена при программировании ПЛИС. Блоки ключей, замыкающие проводники соединительных шин FPGA между собой, обозначены на рисунке 1 квадратами серого цвета.
Соединение внутренней цифровой схемы с блоками ввода-вывода также программируется электронными ключами. У различных микросхем FPGA реальное число программируемых внутренних соединений значительно отличается. Это определяет насколько полно может быть использованы внутренние ресурсы микросхемы и может оказать влияние на предельное быстродействие разработанного цифрового устройства. Эти особенности необходимо учитывать в процессе проектирования цифрового устройства при выборе фирмы-изготовителя и конкретных микросхем FPGA, предназначенных для реализации этого устройства.
Особенностью структуры FPGA является то, что каждый логический блок обычно имеет небольшое число входов и один выход. Это позволяет более полно использовать внутренние ресурсы микросхемы. Типичный логический блок строится на основе ПЗУ, в ячейках которого записана таблица истинности комбинационной схемы. Подобный блок ПЗУ обычно называется LUT (Look Up Table). Каждая ячейка способна хранить значение одной строки таблицы истинности, логический '0' или '1'. Размер LUT определяется числом входов, которое изменяется в зависимости от типа выбранной микросхемы и фирмы-производителя. В качестве примера на рисунке 2 показано внутреннее устройство небольшого LUT ПЗУ с тремя входами x1, x2, x3, и одним выходом f. Крестиками обозначены электронные ключи, включенные между источником питания и входом мультиплексора.
Рисунок 2. Пример внутреннего устройства LUT ПЗУ
LUT ПЗУ, изображенное на рисунке 2, способно реализовать любую логическую функцию трех переменных. Поскольку таблица истинности функций трех переменных имеет восемь строк, то LUT ПЗУ состоит из восьми запоминающих ячеек. Одна ячейка содержит значение выходного сигнала в каждой строке таблицы истинности. Входные сигналы x1, x2 и x3 подаются на адресные входы мультиплексора 8×1. В зависимости от комбинации логических сигналов на адресных вхоодах A0, A1, A2, на выход мультиплексора поступает сигнал с одного из его информационных входов X0...X7.
Для программирования LUT необходимо при помощи электронных ключей записать таблицу истинности реализуемой функции в ячейках памяти. Электронный ключ представляет собой полевой транзистор с плавающим затвором, что позволяет сохранять состояние ключа при отключении питания. При замыкании электронного ключа на вход мультиплексора поступает напряжение питания, что соответствует логической единице. При размыкании этого ключа на вход мультиплексора через резистор R поступает потенциал общего провода микросхемы, что соответствует логическому нолю. После программирования при x1=x2=x3=0 на выход LUT ПЗУ будет передан сигнал с самого верхнего входа мультиплексора, x2=x3=0, x1=1 на выход LUT ПЗУ будет передан сигнал с второго сверху входа мультиплексора, и т.д..