Как работает программируемая логика
В последние годы линия между аппаратным и программным обеспечением размыта. Инженеры аппаратных средств сейчас создают основную часть своих цифровых схем в таких языках программирования как VHDL и Verilog. Эта статья поможет вам понять программируемую логику.
Происходит тихая революция. За последние несколько лет плотность программируемых логических устройств стремительно начала расти. Максимальное количество элементов в ПЛИС в настоящее время составляет около 500 тысяч и удваивается каждые 18 месяцев. Между тем, цена этих чипов падает. Все это означает, что цена отдельного элемента быстро приближается к нулю. И разработчики встроенных систем принимают к сведению. Некоторые системные разработчики покупают ядра процессора и включают их в системы на кристалле; другие полностью устраняют процессор и программное обеспечение, выбирая альтернативный аппаратную разработку.
По мере продолжения этой тенденции становится сложнее отделить аппаратное обеспечение от программного. В конце концов, разработчики аппаратного и программного обеспечения теперь описывают логику на высоком уровне, хоть и на разных языках, и загружают скомпилированный результат на кусок кремния.
Разумеется, никто не утверждает, что выбор языка сам по себе представляет реальное различие между этими областями. Понятие Тьюринга об уровнях эквивалентности машин и о существовании переводчиков с языка на язык давно нас научили тому, что такие рассуждения глупы. Уже есть продукты, которые позволяют разработчикам создавать свои аппаратные проекты на традиционных языках программирования, таких как С. Таким образом, языковых различий недостаточно.
И аппаратные и программные проекты скомпилированы из удобной нам формы в машиночитаемую. И оба проекта в итоге загружаются на какой-то кусок кремния. Имеет ли значение, что один чип является запоминающим устройством, а другой – частью программируемой логики? Если нет, то как ещё мы можем отличить оборудование от программного обеспечения?
Я не уверен, что можно найти однозначное различие между аппаратным и программным обеспечением, но я не думаю, что это так важно. Независимо от того, где нарисована линия, там будут и такие инженеры, как вы и я, которые пересекут границу нашей работы. Поэтому вместо того, чтобы пытаться прикрепить точную границу между аппаратной и программной разработкой, мы должны предполагать, что обе области будут пересекаться. И мы должны узнавать о новых вещах. Разработчики оборудования должны научиться писать программы лучше, а разработчики программного обеспечения должны научиться использовать программируемую логику.
Типы программируемой логики
Доступны многие типы программируемой логики. Основными являются программируемые логические устройства, сложные программируемые логические устройства, программируемая пользователем вентильная матрица (ППВМ, ПЛИС).
ПЛУ
Внизу спектра находятся оригинальные программируемые логические устройства. Это были первые чипы, которые можно было использовать для реализации гибкого цифрового проектирования в аппаратных средствах. Другие имена, которые можно услышать для этого класса устройств являются программируемый логический массив, программируемый массив логики и общий логический массив.
ПЛУ часто используют для декодирования адресов, где они имеют явные преимущества по сравнению с частями ТТЛ серии 7400, которые они заменили. Во-первых, конечно, один чип занимает меньше площади, мощности, проводки. Другим преимуществом является то, что конструкция внутри чипа является гибкой, поэтому изменение логики не требует перекомпоновки платы.
Внутри каждой ПЛУ есть набор связанных макроячеек. Эти макроячейки обычно состоят из некоторого количества элементов комбинированной логики (И или ИЛИ элементов) и триггера. Другими словами, на каждой макроячейке можно построить небольшое логическое уравнение. Это уравнение объединит некоторое количество двоичных входов в один двоичный выход, и если необходимо, сохранит этот выход на триггере до следующей синхронизации. Конечно, характеристики доступных логических элементов и триггеров специфичны для каждого производителя и семейства продуктов. Но общая идея всегда одна и та же.
СПЛУ
Поскольку плотность чипов увеличивалась, производители ПЛУ естественным образом развивали свои продукты в более крупные части, называемые сложными программируемыми логическими устройствами. Для большинства практических целей СПЛУ можно рассматривать как несколько ПЛУ (плюс некоторые программируемые межсоединения) в одном чипе. Большой размер СПЛУ позволяет реализовать более либо более сложные логические уравнения, либо более сложный дизайн. Рисунок 1 содержит блок-схему гипотетического СПЛУ. Каждый из четырех отображаемых логических блоков эквивалентен одному ПЛУ. Однако в реальном СПЛУ может быль больше или меньше), чем четыре логических блока.
В отличие от программируемого межсоединения ПЛУ, матрица переключателей может быть подключена или быть не полностью подключена. Другими словами, некоторые теоретически возможные связи между выводами логических блоков и входами могут фактически не поддерживаться в пределах данного СПЛУ.
ПЛИС
Программируемые пользователем вентильные матрицы могут использоваться для реализации практически любого аппаратного дизайна. Одно из распространённых применений – прототип части оборудования.
Развитие ПЛИС было отличным от эволюции ПЛУ/СПЛК. Это видно смотря на внутреннюю структуру. Рисунок 2- типичная архитектура ПЛИС. Существуют три ключевые части его структуры: логические блоки, межсоединения и блоки ввода-вывода. Блоки ввода/вывода представляют собой кольцо вокруг внешнего края детали. Каждый из них обеспечивает индивидуально выбираемый входной, выходной или двунаправленный доступ к одному из штырей ввода/вывода общего назначения на внешней стороне ПЛИС. Внутри колец блоков ввода/вывода лежит прямоугольный массив логических блоков. Подключение логических блоков к логическим блокам и боков ввода/вывода к логическим блокам – это программируемые межсоединения.