Программируемое логическое устройство (CPLD) — это важный элемент вашего арсенала. Как следует из названия, эти микросхемы можно программировать для выполнения необходимых логических функций. Это может быть замена устаревших микросхем или просто способ изучить и попробовать различные технологии. Что может быть лучше для обучения, чем использование CPLD и экспериментирование с ними?
Я создал модуль CPLD, чтобы иметь возможность подключать его ко многим устройствам, включая беспаечные макетные платы, но допустил ошибку. Оказывается, доступное место для подключения на беспаечной макетной плате составляет всего 1,1 дюйма. Я сделал посадочное место шириной 1 дюйм, не оставив места для ряда проводов с обеих сторон. Эх.
Но позвольте мне вернуться назад и подробнее рассказать о том, что я делаю. Я хочу создать программируемую логику, которую можно будет собрать в виде набора, легко спаять дома, запрограммировать в схему и которая сможет работать при напряжении 3,3 или 5 вольт.
Для создания удобного в пайке комплекта я использовал старый компонент CPLD, который также доступен в версиях на 3,3 В и 5 В и сохраняет свою программируемость независимо от источника питания. Сама логическая схема представляет собой микросхему CPLD из серии Altera Max, доступную в двух версиях, подходящих для печатных плат с 32 или 64 макроячейками. Макроячейки — это основные логические строительные блоки, которые программируются с помощью логических «терминов», а затем соединяются с другими макроячейками посредством программируемых межсоединений.
Глядя на схему, можно увидеть, что она содержит не так уж много компонентов: в основном это CPLD, схема внутрисхемного программирования и генератор, управляющий логикой CPLD.
Эта микросхема называется EPM7032 или EPM7064 и использует 44-контактный пластиковый корпус с выводами (PLCC), иногда называемый J-образным выводом из-за J-образной формы выводов. Этот корпус может быть установлен в сквозной разъем или непосредственно припаян к печатной плате.
Встроенный генератор позволяет CPLD выполнять операции в режиме сохранения состояния и создавать быстрые счетчики самостоятельно, без необходимости использования внешнего тактового сигнала. Если доступен внешний тактовый сигнал, высокоскоростной тактовый сигнал модуля можно использовать для генерации тактового события на каждом восходящем или нисходящем фронте внешнего тактового сигнала, при этом соблюдая рекомендации CPLD/FPGA, то есть, следует использовать внутреннюю глобальную тактовую сеть, а не асинхронный вход тактового сигнала. Номинальное напряжение питания этого генератора составляет от 1,8 до 5,5 вольт.
Если вы посмотрите видео, то увидите, что я обсуждаю свои личные предпочтения относительно того, как обращаться с выводом "INH" на генераторе; проще говоря, после проверки соответствия техническим характеристикам, я обычно оставляю его в "плавающем" состоянии.
При работе с такими функциями мне сразу же вспомнились мои неприязнь к прямому подключению входных контактов к шинам питания (если это возможно). То есть я предпочитаю использовать последовательные резисторы для ограничения тока во время переходных процессов, даже если в этом нет необходимости.
За годы работы я сталкивался с некоторыми проблемами в производстве (больших партиях), и иногда, например, циклы включения/выключения питания, на выводах, напрямую подключенных к шине питания, возникало более высокое напряжение, чем на самом чипе, что плохо. Наконец, если подключить вывод к шине питания через резистор (питающий или заземляющий), люди могут передумать и использовать этот вывод позже. Это особенно актуально, судя по моему опыту с неиспользуемыми дверцами; вы, вероятно, знаете, что эти дверцы никогда не должны оставаться незакрепленными или неподключенными. Используя подтягивающий резистор, можно подключить сигнал и использовать затвор без перерезания медных дорожек.
Десятиконтактный разъем и несколько резисторов образуют схему программирования. Если бы все резисторы были подтягивающими, я бы использовал резисторную сеть, но, увы, один из них заземлен.
Для программирования такой независимой CPLD требуется специальный программатор. Мне легко об этом говорить, потому что у меня обычно несколько таких лежат рядом, но если у вас его нет, начать работу будет не так уж и сложно. Одобренный «Altera USB Blaster» продается за 50 долларов и его можно приобрести в Digikey и других местах. У меня есть несколько клонов с eBay, один из которых поддерживает Altera, Xilinx и Lattice одновременно. В интернете есть проект и код, которые можно использовать для создания собственного клона, я укажу его в своем списке возможных видеороликов по проекту создания клонов программаторов. Я также покажу схему платы расширения, в которую можно программировать материнскую плату, Arduino, PIC и т.д.
Программное обеспечение, необходимое для компиляции и программирования CPLD, бесплатно доступно от Altera, но для этой старой микросхемы требуется старая версия 9.1. Хорошая новость в том, что это была моя любимая старая версия. В ней был интуитивно понятный анализатор временных характеристик, но он был удален в более поздней версии.
Печатная плата имеет простую двухстороннюю конструкцию, и, если плата подходит по размеру, я обычно использую медь для заземления, а иногда и для питания. Иногда заливка меди получается настолько некачественной, что это может вызвать проблемы или привести к неаккуратному результату, поэтому заливка меди — это инструмент, но его нужно контролировать.
Сегодня многие (если не большинство) программных пакетов САПР содержат 3D-модели конечного продукта, хотя точность изображений зависит от точности 3D-моделей, используемых для представления деталей. Здесь вы можете увидеть, где я выбрал 3D-модель для 44-контактного разъема, разъема для программирования и генератора. Вот несколько 3D-пакетов, которые я люблю использовать:
Многие компании также имеют 3D-модели своих компонентов. Molex — лишь один из примеров компаний, которые хорошо поработали в этой области.
Допущенная мной ошибка не влияет на функциональность, как на эстетику, и не является главной проблемой, то есть она не подходит для использования на макетной плате без пайки.
Как только я подумал, что могу поделиться этой схемой с кем-нибудь, меня сразу же разочаровали схематические обозначения CPLD и распиновка 40-контактного разъема, то есть его общая площадь. Я взял символ 40-контактного двухрядного разъема и подогнал его под размер 1 дюйм, но номера контактов не 1, 2, 3, 4... а пронумерованы 1 сбоку, как в DIP-корпусе: 3, 5, 7... как в разъемах ленточных кабелей. Поэтому это неинтуитивная схема для определения способа подключения к модулю и поиска неисправностей.
Аналогично, назначение выводов CPLD несколько запутано, и я использовал набор утилит, основанных на языке описания граничного сканирования (BSDL), для создания символов. Большинство крупных производителей предоставляют файлы BSDL для своих основных компонентов, что позволяет (полу)автоматически создавать символы и корпуса. Как и любая автоматизация, это следует рассматривать как инструмент, и для достижения наилучших результатов может потребоваться дополнительная настройка. В данном случае я позволил системе перечислять выводы в алфавитном порядке, что почти случайно при отслеживании выводов на плате. Могу лишь сказать, что в тот день я очень волновался.
За такие упрощения рано или поздно приходится расплачиваться. Когда я буду модифицировать этот модуль, я определю и установлю расположение контактов, соответствующее самой детали, чтобы определить, куда вставить щуп осциллографа, было так же просто, как взглянуть на схематическое изображение.
При использовании печатных плат есть и другие улучшения, в основном эстетические или полезные. Индикатор контакта 1 должен быть более распространённым в различных корпусах, и я всегда предпочитаю простую точку заземления для подключения выводов осциллографа или вольтметра. Я мог бы добавить это, используя двухконтактный разъём, чтобы питание и заземление подавались непосредственно на плату, а не фиксировались на нижних контактах.
Прежде чем модифицировать печатную плату, я хочу убедиться, что она работает должным образом с точки зрения физических и эстетических аспектов. После включения питания и подтверждения корректной работы генератора я подключил программатор. Хотя версия для 3,3 В новее, чем программное обеспечение для программирования, она обнаружила CPLD и отобразила его как «неизвестное» устройство.
Далее я создал счётчик в Quartus и назначил ему номера выводов. Быстрая компиляция и загрузка, а также работа счётчика, отображаемая на осциллографе, подтверждают работоспособность схемы.
Схема для быстрого тестирования на Verilog очень проста. Код приведен ниже. Вы можете скачать ZIP-файл, содержащий схему и тестовую схему на Verilog, в виде проекта Quartus II (требуется версия 9.1).
Как я уже упоминал, я внесу вторую редакцию печатной платы, чтобы уделить больше внимания деталям, необходимым при обмене проектом или при устранении неполадок. Поскольку мне нужно установить ширину нижнего разъема на уровне 0,9 дюйма или меньше, я могу продолжить устанавливать ее на уровне 0,6 дюйма, что соответствует стандартному «широкому» корпусу DIP. Это означает, что нижние контакты должны выступать за пределы контактной площадки CPLD. В производственных условиях я бы так не поступил, поскольку сборка производилась вручную, но одной из целей было создание набора для ручной пайки. Компромисс при ручной пайке заключается в том, что генератор должен быть в корпусе для поверхностного монтажа SMD, а версия для сквозного монтажа очень большая и обычно не поддерживает необходимый мне диапазон напряжений.
Можно ли использовать эти модули для создания полноценного простого компьютера? Думаю, мне нужно добавить память.
Ха-ха... да, это зависит от типа компьютера. Однако на «настоящие» микроконтроллеры/микрокомпьютеры влияет «контактное соединение» модуля, а это значит, что вы не сможете получить достаточно полезной информации из модуля, чтобы сделать что-то действительно полезное.
Я разработал полноценный контроллер синхронизации и режимов для NTSC-камеры размером 64 байта, поэтому процессор не требуется.
В книге "Nand to Tetris" используются практически одни и те же языки программирования: Structural Verilog и HDL.
Зачем нужны детали со сквозными отверстиями? Сварка 0805 — это легко! Сейчас самое время каждому, кто увлекается сваркой, освоить этот навык.
Если я сделаю так, чтобы верхний разъем перекрывал контакты, припаянные снизу, то смогу использовать "6" центров (имитируя 40-контактный чип) или диагональ и т. д. Это будет исключительно ручная пайка компонентов для припаивания нижних выводов. Верхний разъем находится за ножками.
Но новичкам сложно паять снизу. Когда я паяю разъемы для печатной платы на макетной плате (для прототипирования можно использовать дешевые SMD-адаптеры, которые можно найти на eBay), я вставляю разъемы в макетную плату, затем устанавливаю на нее печатную плату, и после этого могу легко паять. Это очень удобно для макетных плат. Если же нужно паять снизу, это еще сложнее.
Если CPLD расположен посередине (так его может быть проще подключить), его можно установить по диагонали без перекрытия, если имеется 4 ряда, или же CPLD может быть расположен с одной стороны:
Спасибо за совет вставить разъем в макетную плату перед пайкой. У меня он немного неустойчив.
Как насчёт того, чтобы на одном конце макетной платы были контакты в формате DIP, а на другом — сам разъём для микросхемы типа «донгл»? Микросхему можно будет подвесить на торце макетной платы. Разводка будет плотной.
|####### ******************** |. Да, я решил использовать «бесплатную» версию Altera, как и у Xilinx и Lattice. Мне нужно завершить цикл с Элом Уильямсом, чтобы понять, что поддерживает вся открытая поддержка, включая специфические характеристики серий устройств. При этом я много работал с бесплатной версией.
Да, вы показываете, что CPLD перекрывает выводы, насколько я понимаю. Если я правильно понял, это может выглядеть как версия 2. При проектировании для (массового) производства у меня всегда возникает аллергия на этап «ручной пайки», потому что они перекрываются (фактически, паяные выводы на стороне, не являющейся компонентом). (Это уже компонент, припаянный вручную), но это всего лишь небольшой набор, а не серийная разработка. У меня просто есть некоторые привычки, от которых трудно избавиться в моем возрасте. 
Думаю, Т-образная печатная плата с CPLD и пассивными компонентами, имеющая широкую Т-образную часть, будет очень полезна при подвешивании на краю макетной платы. Что-то вроде Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Это позволит максимально эффективно использовать площадь макетной платы.
К сожалению, прекращение его производства серьезно ограничит его использование в побочных проектах, как и всех тех генераторов функций на базе XR2206 и ICL8038.
Интересная идея. Мне нравятся эти два чипа. CPLD не устарел, просто это более дешевый способ приобрести его с напряжением 3,3 В.
Что касается вашей "ерунды"... вы ведь на самом деле не создавали новую схему для размещения на макетной плате. Просто сначала подключите провод к макетной плате, а затем подключите CPLD к проводу. Или, если вы можете снять силовые и заземляющие контакты с одной из плат, используйте две макетные платы.
Что касается Altium и Eagle. Вы рассматривали KiCad? У него нет никаких ограничений, из-за которых вы могли бы предпочесть Altium Eagle, и по умолчанию он генерирует ошибки DRC для всех неподключенных выводов. Если вы действительно хотите открыть вывод, вам нужно указать это. (Возможно, только для ввода, а не для вывода, и это еще не проверялось). Еще одна замечательная особенность — это простота обучения. Мне понадобился всего один день, и отличное вводное руководство помогло мне начать.
Я предпочитаю SMD-компоненты (большего размера) над сквозными отверстиями. С ними проще работать. Не нужно постоянно поворачивать печатную плату. (Из-за зеркального отображения были допущены некоторые глупые ошибки...). И не нужно обрезать вывод резистора. При совместном проектировании можно удобно разместить несколько корпусов на одной печатной плате или на одном компоненте. SMD-резистор TH. (Это немного усложняет разводку).
Я использовал руководство "KiCad Getting Started" в формате PDF. Старая версия, которую я использовал, содержит 29 страниц, а последняя — 52 страницы. Вы можете найти его в других руководствах (включая ссылки на видео): http://kicad-pcb.org/help/tutorials/
Я знаю, что [Крис Геммелл] из Hackaday и The Amp Hour выпустил серию уроков по KiCad: http://kicad-pcb.org/help/tutorials/
KiCad может быть полезен, дайте мне посмотреть, что произойдет в версии 2. Спасибо за ваши предложения. Неподключенные входы — это хорошо для DRC (ERC), а для разъемов и других элементов, которые поддерживают их программный или входной/выходной режим, большинства сообщений об отключении CAD обычно можно избежать.
Проведите быструю проверку, поместив разъем в пустую таблицу, запустите аннотации и проверку DRC. Она выдала ошибки DRC для каждого контакта. Однако пометить известные неподключенные контакты очень просто.
Установите режим «пассивный». Мне приходится искать (Редактировать компонент -> Редактировать с помощью редактора библиотек). Редактор библиотек открывается и загружает ваш компонент в отдельном окне, вы можете проверить или изменить любую часть компонента. Измененный компонент можно сохранить или обновить в вашей схеме. Это значительно упрощает изменение компонентов. Меня не особо интересует библиотека. Например, если вы используете CPLD, вы хотите присвоить выводам осмысленные имена. Что более важно, есть хороший интерфейс для проектирования собственных компонентов.
В программе проверки электрических правил (ERC) в KiCad «неподключенные» контакты отличаются от «пассивных» контактов, и все «неподключенные» контакты будут вызывать ошибки. Принцип работы ERC можно легко настроить под свои предпочтения: Инструменты -> Проверка электрических правил -> Параметры.
Дата публикации: 18 ноября 2021 г.





