Обзор Части 11
==787
В пунктах @A-@G даётся краткое описание тем, разбираемых в Части 11 . Здесь перечислены базовые сведения и факты.
@A Программируемые логические устройства
PLD - цифровые программируемые схемы, содержащие от сотен до миллиардов вентилей и, иногда, дополнительные аппаратные функциональные блоки: трансиверы, память, АЛУ и даже микроконтроллеры. Связи между элементами задаются пользователем ( §11.2 ). Процесс задания связей очень похож на создание программы для компьютера ( которая говорит процессору что делать ), только «программа» для PLD сообщает, как соединять внутренние элементы схемы. Некоторые PLD содержат постоянную перепрограммируемую память конфигурации прямо на кристалле, другие используют внешнюю ИМС и считывают её при подаче питания. Большая часть допускает программирование в системе ( обычно через порт JTAG ).
@B Применение PLD
Небольшие PLD ( от десятков до сотен макроячеек - тысяч вентилей ) используются обычно в качестве логической обвязки вместо отдельных специализированных ИМС жёсткой логики. Большие PLD и особенно FPGA ( вентильные матрицы, программируемая пользователем ) может играть роль «системы-на-кристалле». Самые большие FPGA содержат миллионы триггеров, мегабайты ОЗУ, тысячи линий ввода-вывода и десятки приёмо-передатчиков. Такого объёма ресурсов достаточно, чтобы создать программный блок процессора ( т.е. построить вычислительное устройство на триггерах и вентилях ), способного работать под операционной системой Linux. Примеряя программируемую логику к какой-либо задаче, не забывайте об альтернативе - микроконтроллерах общего применения. Такие ИМС вполне способны решить многие задачи, недороги и проще в программировании, чем PLD.
@C Обзор методов программирования PLD
Разработка с использованием PLD ( §11.2.6 ) начинается с функциональной спецификации, которую можно создавать, используя схемный ввод или язык описания аппаратуры . Дальше запускается моделирование , которая должна подтвердить, что всё работает, как задумано. Дальше синтез превращает проект в нетлист - полный набор логических связей. Нетлист «размещается» в целевом кристалле, а процесс зовётся размещение и разводка . Наконец, разведённый проект загружается в память PLD - либо в неё саму, либо в ИМС конфигурационной памяти, из которой PLD будет грузиться при подаче питания. Возможна «горячая» загрузка по инициативе внешнего процессора.
Средства разработки для PLD предлагают производители и некоторые третьи фирмы. Для небольших ИМС такое программное обеспечение может быть бесплатным, но для старших моделей будет стоить очень приличных денег. Освоение инструментов разработки занимает заметное время, причём всё ПО такого рода меняется с утомительным постоянством, а сами программы, как и все прочие программные продукты, могут содержать ( и обычно содержат ) ошибки.
@D Схемный ввод
Для непрограммистов схемный ввод - наиболее удобный способ разработки, в котором уже знакомые логические символы соединяются так же, как при проектировании печатной платы ( рис. 11.10 ). Дополнительную степень свободы даёт возможность определения функциональных блоков, которые могут задаваться и в схемном, и в текстовом виде.
Ещё одним графическим методом на высоком уровне абстракции служат инструменты синтеза, конвертирующие описание функциональных блоков из MATLAB/Simulink в HDL представление, которое можно реализовать и в PLD, и в ASIC, не говоря уж о симуляции, тестовых векторах и генерации отчётов.
Выбор графического ввода обосновывается:
- схемотехническим опытом,
- простотой изучения, понимания и объяснения,
- наличием схемной документации,
- возможностью писать модули на HDL, маскируя их под графические элементы и добавляя все преимущества текстового представления,
- графический ввод используется в языках графического программирования ( GPL ) LabVIEW, MATLAB® и Simulink®.
@E Текстовый ввод
Языки описания аппаратуры Verilog и VHDL доминируют в области форматирования проектов для PLD. Выражения в них могут строиться вокруг структуры проекта ( какой сигнал идёт на какой вход ) или вокруг его поведения (какое состояние будет следующим и при каких условиях ). См. примеры в §11.3.4.B и §11.3.4.C .
Выбор текстового ввода обосновывается:
- опытом программирования;
- быстротой построения, особенно в случае повторного использования кода;
- текст лаконичнее, проще для проверки и является документацией сам по себе;
- процесс разработки формализован строже и постоянно проходит через фазу моделирования;
- легче менять параметры, скажем, разрядность: достаточно подправить индексы массивов ( что делать гораздо проще, чем двигать мышью графические символы );
- языки стандартизованы и переносимы ( а графические библиотеки привязаны к закрытым программным инструментам );
- есть хорошие бесплатные симуляторы;
- HDL хорошо приспособлен для структуризации сложных проектов ( например, микропроцессоров ), большая часть свободных программных блоков ( IP ) распространяется в виде текстов;
- HDL хорошо подходит для создания проектов для заказных ИМС ( ASIC ), которые можно готовить, отлаживая проект в FPGA.
==788
@F Оценки применяемых технологий
( Простое повторение §11.4.1 ).
- Стандартная логика
- Pro
Рабочий вариант, если надо быстро собрать простую схему и нужные компоненты уже имеются. В такой форме удобно использовать шинные формирователи, буферы, «обвязку» в виде одновентильной логики. Такие ИМС доступны в корпусах DIP, поэтому схемы удобно собирать на универсальных платах. Не требуют для разработки программного обеспечения. - Contra
Большие схемы в таком формате совершенно неподъёмны, требуется широкая складская номенклатура, негибкое решение [* недаром её зовут «жёсткая логика» ] . - Программируемая логика ( cPLD, FPGA )
- Pro
Хорошая замена стандартной логике для цифровых проектов любой сложности. Уменьшают число корпусов, позволяют легко изменить прошивку, универсальны, недороги, не перегружают склад широкой номенклатурой. cPLD имеют более предсказуемые временные параметры и удобнее для размещения небольших схем. FPGA лучше подходят для больших проектов. Самый лучший вариант для быстрой параллельной логики и машин состояний. Хорошо подходят для критичных по времени задач и проектов с большим числом линий ввода-вывода. Проекты легко переносятся между разными семействами программируемой логики и переводятся в формат заказных микросхем. - Contra
Программные инструменты ( часто закрытые ) требуют времени для освоения и дороги. ИМС выпускаются только в корпусах для поверхностного монтажа, требуют переходников, адаптеров и т.п. дополнительного оборудования. Короткий жизненный цикл ( проблемы с поставками ). - Микроконтроллеры ( см. Часть 15 )
- Pro
Универсальные встраиваемые компьютеры. Идеальны для сложных машин состояний со множественными условиями переходов. Быстрое интерактивное создание и отладка ( в т.ч. внутрисхемная ) кода. Разнообразная внутренняя периферия. Знакомые языки программирования. Отлично подходят под задачи управления и организацию интерфейса пользователя. - Contra
Медленнее, чем cPLD/FPGA, не так удобны на уровне отдельных битов, последовательный поток управления.
Средства разработки
Инструменты для программируемой логики
- Схемный ввод
- Pro
Лёгок в изучении, понимании и объяснении. Самодокументируем. Параллельнность структуры отражается параллельностью формы. Прямая аналогия в графических программных языках LabVIEW, MATLAB® и Simulink®. - Contra
Закрытые средства разработки, цена, ограниченная универсальность использования. - Языки описания аппаратуры ( Verilog, VHDL )
- Pro
Естественная миграция для программистов, способных прейти на параллельное построение логики работы. Лаконичны и стандартизованы. Бесплатные средства моделирования и компиляции. Удобная итеративная модификация проекта. Простой перенос проекта на другое семейство программируемой логики или заказные кристаллы. Хорошо подходит для сложных проектов. Доступны сторонние программные блоки ( IP ). - Contra
Время изучения, отсутствие схемной документации.
Инструменты для микроконтроллеров
- Язык ассемблера
- Pro
Позволяет оптимизировать код вручную, например, в обработчике прерывания. - Contra
Трудоёмкий, отсутствует контроль над ошибками, сложен для исправлений, непригоден для переноса на иное семейство процессоров. - Языки Си, C++
- Pro
Стандартизованы и переносимы ( хотя требуют исправлений, зависящих от архитектуры ), большое количество квалифицированных специалистов, структуризация языка упрощает внесение изменений и модификацию, библиотеки общеупотребительных функций, хорошо подходят для сложных задач. - Contra
Компилированный код не всегда оптимален по объёму и скорости ( но можно делать ассемблерные вставки в критичных местах ), позволяют писать трудно понимаемый код, требуют набора программных инструментов ( некоторые дорогие, некоторые бесплатные ). - Прочее ( Basic, программные средства Arduino, Java, Python )
- Pro
Простота понимания, низкий порог вхождения в тему. - Contra
Ограниченное число поддерживаемых контроллеров, невозможность переноса между разными семействами процессоров, несовместимость с большими проектами.
@G Оценки по типам проектов
( Простое повторение §11.4.2 ).
В любом профессиональном сообществе есть достаточное количество специалистов, работающих с микроконтроллерами . Причины очевидны: низкая цена, простота программирования и универсальность использования. Кроме того, популярны следующие технологии.
- Сектор высоких объёмов производства
- Здесь критична стоимость компонентов и скорость вывода результата на рынок. При больших объёмах можно сэкономить, используя заказные микросхемы. Время выхода на рынок можно сократить, используя вместо заказных ИМС FPGA. Высокие объёмы выпуска диктуют необходимость использования корпусов для поверхностного монтажа высокой плотности, многослойные печатные платы и продвинутые технологии сборки.
==789
- Сектор сложных прототипов и небольших объёмов
- Здесь трудно использовать преимущества ASIC, поэтому основными технологиями становятся cPLD и FPGA, микроконтроллеры, внешняя аппаратная периферия. По-прежнему используются технологии поверхностного монтажа и многослойные печатные платы 35 .
- Сектор лабораторного и уникального оборудования
- Здесь важно получить работающий прибор относительно быстро и иметь возможность быстро поправлять и дополнять схему. Удобнее всего макетные платы под монтаж в отверстия. Для них нужны соответствующие корпуса компонентов или переходники под SMT варианты 37 . Но такие платы ограничивают выбор стандартной логикой, скромным набором микроконтроллеров, совсем простыми PLD и простыми аналоговыми компонентами ( ОУ и т.п. ). Можно задействовать FPGA, взяв какую-нибудь из собранных отладочных плат). Точно такие же отладочные комплекты выпускаются и под микроконтроллеры. Туда часто ставят PLD и добавляют участок обычной макетной платы под пять-десять дополнительных микросхем.
- Любительская деятельность
- Эти ребята стараются развлечься занедорого, используя уже готовые отладочные платы. Бывают проекты под макетный монтаж и даже с расчётом на самостоятельное изготовление печатных плат. В этой области удобнее всего использовать компоненты под монтаж в отверстия, а программируемую логику и микроконтроллер объединяют в одном отдельном узле.
==789