Программируемые пользователем вентильные матрицы (FPGA)
Структура программируемых пользователем вентильных матриц FPGA похожа на структуру канальных БМК (см. рис. 4.32, а). В их внутренней области, так же как у канального БМК, размещается множество регулярно расположенных ячеек – логических блоков, между которыми проходят трассировочные каналы, а на периферии кристалла расположены ячейки другого типа – блоки ввода/вывода. Современные микросхемы FPGA содержат и другие узлы, но знакомство с архитектурой этого класса СБИС начнем с их классической структуры.
Логические блоки FPGA
В качестве ЛБ используются:
• транзисторные пары, простейшие логические схемы "И-FIE", "ИЛИ-HE" и т.п. Такие ЛБ называются SLC (Simple Logic Cells, простые логические цепи);
• логические модули на основе мультиплексоров;
• табличные логические модули на основе программируемых ПЗУ, такие ЛБ называют LUTs {Look-Up Tables, таблицы поиска).
Двумя основными характеристиками ЛБ являются их "зернистость" (Granularity) и "функциональность" (Functionality). Эти характеристики противоречивы: чем ниже свойства ЛБ, характеризуемые одной из них, тем выше будут его свойства, характеризуемые другой. "Зернистость" связана с тем, насколько "мелкими" будут те части, из которых можно "собирать" нужные схемы, а "функциональность" – с тем, насколько велики логические возможности ЛБ.
Примером наиболее мелкозернистого может служить ЛБ, который содержит цепочки транзисторов с р- и n- каналами (рис. 4.35, а). Между цепочками транзисторов имеются трассировочные каналы, в которых могут быть реализованы необходимые межсоединения элементов. Каждая пара транзисторов (обведена на рис. 4.35, а пунктиром) представляет собой комплементарную пару, из которых можно строить простейшие логические схемы "И-НЕ", "ИЛИ-HE" в КМОП-логике. Принцип построения таких схем был подробно рассмотрен в параграфе 3.4. Чтобы "разорвать" цепочки транзисторов, на затворы транзисторов одной из пар подаются запирающие напряжения: напряжение питания – на верхний и корпус – на нижний. При этом транзисторы, находящиеся слева и справа от них, становятся изолированными друг от друга. Затем из полученных элементарных логических схем путем выполнения необходимых межсоединений осуществляется построение более сложных логических устройств.
Рис. 4.35. Примеры логических блоков:
а – мелкозернистый; б – крупнозернистый; в – обозначение входов и выходов у мультиплексора "2–1"
Мелкозернистость ЛБ ведет к большой гибкости их использования. В то же время мелкозернистость усложняет систему межсоединений FPGA из-за большого числа программируемых точек связи.
Примером более крупного логического блока, используемого в FPGA, может служить ЛБ, состоящий из трех мультиплексоров "2–1" и элемента "ИЛИ" (рис. 4.35, 6). Подключая к входам такого Л Б переменные и константы, можно получить комбинационные функции двух переменных, многие функции четырех переменных и некоторые функции большего числа переменных, вплоть до восьми.
В FPGA с триггерной памятью конфигурации применяют крупнозернистые блоки. В таких блоках реализуются более сложные функции. При этом количество необходимых для реализации логического устройства межсоединений существенно сокращается, что упрощает их программирование. В то же время полностью использовать логические возможности такого ЛБ очень трудно, и часть его элементов при реализации конкретной логической схемы просто становится лишней.
Табличные логические модули представляют собой программируемые ПЗУ. Само ППЗУ уподобляется таблице истинности функции, в которой каждая строка – ячейка ППЗУ – соответствует какому-то набору аргументов, т.е. аргументы логической функции служат адресом при выборе ячейки ПЗУ. При программировании в таблицу истинности заносятся значения функции, которые она должна принимать на каждом наборе. Такие табличные преобразователи могут реализовывать любые логические функции п аргументов, где п – разрядность адреса ППЗУ.
Самые сложные ЛБ, используемые в FPGA, могут содержать в своем составе несколько табличных преобразователей на основе ППЗУ, набор мультиплексоров и триггеров. На основе таких ЛБ можно реализовывать достаточно сложные логические устройства с большим числом аргументов.