Сложното програмируемо логическо устройство (CPLD) е съществена част от хардуера във вашия репертоар. Както подсказва името, можете да програмирате тези чипове, за да осигурите необходимите ви логически функции. Това може да е замяна на остарели чипове или просто начин да научите и изпробвате различни технологии. Какъв по-добър начин да се научите от използването на CPLD и да го изпробвате?
Създадох CPLD модул, за да мога да го включа в много неща, включително безспойкови платки, но обърках нещата. Изглежда, че наличното пространство за включване на платката е 1,1 инча. Направих отпечатъка широк 1 инч, без да оставям място за ред проводници от двете страни. Ъъъ.
Но нека се върна назад и да покажа повече за това, което правя. Искам да направя програмируема логика, която може да се сглоби като комплект, да се запоява лесно у дома, да се програмира в схема и да работи на 3,3 или 5 волта.
За да реализирам лесен за запояване комплект, използвах стар CPLD компонент, който се предлага и във версии за 3.3v и 5v и ще запази програмирането си независимо от захранването. Самата логика е CPLD интегрална схема от серията Altera Max, предлагана в две версии, подходяща за платки с 32 или 64 макроклетки. Макроклетките са основните логически градивни елементи, които се програмират с помощта на логически „термини“ и след това се свързват помежду си с други макроклетки чрез програмируеми връзки.
Като погледнете схемата, можете да видите, че тя няма много съдържание: основно CPLD, схемата за програмиране в схемата и осцилатора, който управлява CPLD логиката.
Тази част се нарича EPM7032 и EPM7064, използвайки 44-пинов пластмасов носач за чип (PLCC), понякога наричан J-образен, заради J-образната форма на извода. Този корпус може да се постави в цокъл с отвор или директно да се запои към печатната платка.
Съдържа вграден осцилатор, така че CPLD може да изпълнява операции без прекъсване на състоянието и да създава бързи броячи самостоятелно, без да е необходим външен тактов генератор. Ако е наличен външен тактов генератор, високоскоростният тактов генератор на модула може да се използва за създаване на тактово събитие при всеки нарастващ или низходящ фронт на външния тактов генератор, като същевременно се спазват указанията на CPLD/FPGA, т.е. наистина трябва да използвате вътрешната мрежа за глобален тактов генератор, вместо „асинхронно“ задвижване на тактовия вход. Номиналното захранващо напрежение на този осцилатор е между 1,8 и 5,5 волта.
Ако гледате видеото, ще видите, че обсъждам личните си предпочитания за това как да се борави с пина "INH" на осцилатора; просто казано, след като проверя дали спецификацията е законна, обикновено я оставям да се движи.
Когато се занимавах с подобни функции, причините, които ми хрумнаха, включваха нежеланието ми да свързвам входните пинове директно към захранващите шини (ако е възможно). Тоест, предпочитам да използвам последователни резистори, за да огранича тока по време на преходни процеси, дори и да не е необходимо.
През годините съм виждал някои проблеми в производството (големи партиди) и понякога неща като циклично включване и изключване на захранването позволяваха на пиновете, директно свързани към захранващата шина, да имат по-високо напрежение от самия чип, което е лошо. Накрая, свържете пиновете към захранващата шина чрез резистор (независимо дали захранващ или заземяващ) и хората могат да си променят решението и да използват пина по-късно. Това е особено вярно от моя опит с неизползвани врати, вероятно знаете, че тези врати никога не трябва да се оставят плаващи или несвързани. Чрез използването на pull-up резистор можете да свържете сигнала и да използвате гейта, без да режете медни следи.
10-пиновият конектор и няколко резистора образуват схемата за програмиране. Ако всички резистори са pull-up резистори, бих използвал мрежа от резистори, но уви, единият е заземен.
За да се програмира такъв независим CPLD, е необходим специализиран програматор. Лесно ми е да кажа това, защото обикновено имам няколко под ръка, но ако нямате такъв, няма да е твърде болезнено да влезете в играта. Одобреният "Altera USB Blaster" се продава за $50 и може да бъде закупен от Digikey и други места. Имам няколко клона от Ebay, единият от които е клон, който поддържа Altera, Xilinx и Lattice едновременно. В интернет има проект и код, които могат да се използват за създаване на ваш собствен клонинг, ще го включа в списъка си с възможни видеоклипове за проекта за създаване на клонинги на програматори. Ще покажа и дизайн на щит, в който могат да се програмират дънната платка, Arduino, PIC и др.
Софтуерът, необходим за компилиране и програмиране на CPLD, е свободно достъпен от Altera, но тази стара част изисква старата версия 9.1. Добрата новина е, че това беше любимата ми стара версия. Тя имаше интуитивен анализатор на времето, но беше премахнат в по-късна версия.
Печатната платка е опростен двустранен дизайн, стига платката да пасва, аз обикновено използвам мед за заземяване, а понякога и за захранване. Понякога заливането на мед става толкова нарушено, че може да причини проблеми или некачествени крайни резултати, така че заливането на мед е инструмент, но трябва да се контролира.
Днес много (ако не и повечето) CAD софтуерни пакети съдържат 3D изгледи на крайния продукт, въпреки че точността на изображенията е толкова точна, колкото са точните 3D моделите, използвани за представяне на частите. Тук можете да видите къде избрах 3D модела за 44-пиновия гнездо, програмния конектор и осцилатора. Ето някои 3D пакети, които обичам да използвам:
Много компании също имат 3D модели на своите компоненти. Molex е само един пример за компания, която е свършила добра работа в тази област.
Грешката, която направих, не влияе на функцията, като естетиката, и не е основният проблем, тоест, не е подходящ за една безспойка платка.
След като си помислих, че бих могъл да споделя дизайна с някого, веднага останах недоволен от схематичните символи на CPLD и разположението на 40-пиновия конектор, което е общият му размер. Взех символ за 40-пинов двуредов конектор и го настроих на 1-инчов размер, но номерата на пиновете не са 1, 2, 3, 4... а са номерирани с 1 отстрани като DIP корпус 3, 5, 7... точно като конекторите за лентов кабел. Следователно, това е неинтуитивен размер за определяне как да се свържа към модула и отстраняване на неизправности.
По подобен начин, назначенията на CPLD пиновете са малко объркващи и използвах набор от помощни програми, които разчитат на Boundary Scan Description Language (BSDL), за да създавам символи. Повечето големи доставчици предлагат BSDL файлове за своите основни компоненти, което ви позволява (полу)автоматично да създавате символи и корпуси. Както всяка автоматизация, тя трябва да се разглежда като инструмент и може да изисква допълнително внимание за най-добри резултати. В този случай го оставих да изброи пиновете по азбучен ред, което е почти произволно при проследяване на пиновете на платката. Мога само да кажа, че бях много притеснен този ден.
Плащате за тези преки пътища някой път на път. Когато отида да модифицирам този модул, ще определя и ще му дам разположение на пиновете, което съответства на самата част, така че да знаете къде да поставите сондата на осцилоскопа си да е толкова лесно, колкото да погледнете символа на схемата.
При използване на печатни платки има и други подобрения, които са предимно естетически или полезни. Индикаторът за пин 1 трябва да е по-често срещан в няколко корпуса и аз винаги предпочитам проста точка за заземяване, за да свържа заземяването на осцилоскопа или VOM кабела. Може би ще добавя това, като добавя двупинов конектор, така че захранването и заземяването да могат да се подават директно към платката, вместо да се закрепват към долните пинове.
Преди да модифицирам платката, искам да се уверя, че работи правилно при физически и естетически проблеми. След като я включих и потвърдих, че осцилаторът работи правилно, включих програматора. Въпреки че 3.3V версията е по-нова от софтуера за програмиране, той разпозна CPLD и го показа като „неизвестно“ устройство.
След това създадох брояч в Quartus и му зададох номера на пинове. Бързото компилиране и изтегляне, както и функцията на брояча, видяна от осцилоскопа, потвърждават, че проектът е осъществим.
Бързата тестова схема във Verilog е много проста. Кодът е показан по-долу. Можете да изтеглите ZIP файл, съдържащ схемата и тестовата схема на Verilog, като проект в Quartus II (изисква версия 9.1).
Както споменах, ще направя втора ревизия на платката, за да обърна повече внимание на детайлите, необходими при споделяне на дизайна или отстраняване на проблеми. Тъй като трябва да настроя ширината на долния конектор на 0,9 инча или по-малко, мога да продължа да го настройвам на 0,6 инча, което е стандартен "широк" DIP корпус. Това означава да оставя долните пинове да стърчат от отпечатъка на CPLD гнездото. Не бих направил това в производствена ситуация, защото по това време се сглобяваше ръчно, но една от целите беше да се направи комплект за ръчно запояване. Компромисът при ръчното запояване е, че осцилаторът трябва да бъде в SMD корпус за повърхностен монтаж, версията с отвор е много голяма и обикновено не поддържа желания диапазон на напрежение.
Възможно ли е да се използват тези модули за изграждане на напълно прост компютър? Мисля, че трябва да добавя памет.
Хаха... да, зависи от вида на компютъра. „Истинските“ микроконтролери/микрокомпютри обаче са засегнати от „свързването на пиновете“ на модула, което означава, че не можете да получите достатъчно терминология от модула, за да направите нещо твърде полезно.
Направих пълен NTSC контролер за синхронизация и режим на камерата с размер 64, така че не е необходим процесор.
Структурните Verilog и HDL, използвани в книгата „От Nand до Tetris“, са горе-долу еднакви.
Защо частите са с проходни отвори? Заваряването 0805 е лесно! Сега е моментът всеки майстор да научи това умение.
Ако накарам горния гнездо да се припокрива с пиновете, запоени отдолу, тогава мога да използвам "6 центъра" (симулирайки 40-пинов чип) или диагонал и т.н. Това ще бъде строго ръчно запояване на компоненти за запояване на долните изводи. Горният гнездо е зад краката.
Но за начинаещи е трудно да го запоят отдолу. Когато запоявам конекторите за печатната платка на breadboard-а (тези евтини SMD адаптерни платки, които можете да използвате в eBay, могат да се използват за прототипиране), поставям конекторите в breadboard-а, след което поставям PCB-то върху него и тогава мога лесно да запоявам. Много е подходящо за breadboard-и. Ако трябва да го запоите отдолу, е още по-трудно.
Ако CPLD е по средата (може да е по-лесно да се свърже), може да се инсталира диагонално без припокриване, има 4 реда или CPLD може да е от едната страна:
Благодаря за съвета да се постави конекторът в платката преди запояване. Моят е малко нестабилен.
Ами DIP пиновете на пробната платка от единия край и "dongle" типа на самия цокъл на чипа от другия край? Чипът може да се окачи на края на пробната платка. Окабеляването ще бъде плътно.
|####### ******************** |. Да, реших да използвам „безплатната“ версия на Altera, точно както Xilinx и Lattice имат „безплатни“ версии. Трябва да завърша цикъла с Ал Уилямс, за да разбера какво поддържа цялата отворена поддръжка, което трябва да включва специфичните атрибути на серията устройства. Въпреки това, направих много с безплатната версия.
Да, показваш, че CPLD се припокрива с пиновете, струва ми се. Ако го следвам правилно, това може да изглежда като rev 2. Когато проектирам за (масово) производство, винаги съм алергичен към стъпката на „ръчно запояване“, защото те се припокриват (всъщност спояващите пинове от страната, която не е компонент). ) Вече е ръчно запоен компонент), но това е само малък комплект, а не дизайн, ориентиран към производството. Просто имам някои навици, от които е трудно да се отърва на моите години. 
Мисля, че Т-образна платка с CPLD и пасивни компоненти с широка Т-образна част ще бъде много полезна, когато се окачи на ръба на макета. Нещо подобно на Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Това ще направи по-голямата част от площта на макета свободна.
За съжаление, спирането на производството ще ограничи сериозно използването му в странични проекти, точно както всички онези функционални генератори, базирани на XR2206 и ICL8038.
Интересна идея. Харесват ми тези два чипа. CPLD не е остарял, просто е по-евтин начин да го купите на 3.3v.
Относно твоите „глупости“... наистина не си направил нова схема, за да го сложиш на дъската. Просто първо сложи кабела на дъската, а след това сложи 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 може да е полезен, нека видя какво ще се случи в Rev 2. Благодаря ви за предложенията. Несвързаните входове са нещо добро за DRC (ERC), а за конектори и други неща, които ги поддържат меки или IO, повечето CAD съобщения за прекъсване обикновено могат да бъдат избегнати.
Направете бърз тест и хвърлете конектора в празна таблица, изпълнете анотации и DRC. Даде ми drc грешки за всеки пин. Маркирането на известни несвързани пинове обаче е много лесно.
Зададено на пасивно. Трябва да търся (Редактиране на компонент -> Редактиране с редактор на библиотеки). Редакторът на библиотеки се отваря и зарежда вашия компонент в отделен прозорец, можете да проверите или промените всяка част от компонента. Промененият компонент може да бъде запазен или актуализиран във вашата схема. Това прави много лесна смяната на компоненти. Не ме интересува много библиотеката. Например, ако използвате cpld, искате да присвоите смислени имена на пиновете. По-важното е, че има добър интерфейс за проектиране на ваши собствени компоненти.
В ERC на KiCad, „несвързаните“ пинове са различен тип пинове от „пасивните пинове“ и всички „несвързани“ пинове ще генерират грешки. Начинът, по който ERC работи, може лесно да се настрои според вашите предпочитания: Инструменти -> Проверка на електрически правила -> Опции.
Време на публикуване: 18 ноември 2021 г.





