Un dispozitiv logic programabil complex (CPLD) este o piesă hardware esențială din repertoriul tău. După cum sugerează și numele, poți programa aceste cipuri pentru a oferi funcțiile logice de care ai nevoie. Aceasta poate fi înlocuirea cipurilor învechite sau pur și simplu o modalitate de a învăța și de a încerca diferite tehnologii. Ce modalitate mai bună de a învăța decât folosind CPLD și încercându-l?
Am creat un modul CPLD pentru a-l putea conecta la multe dispozitive, inclusiv la plăci de testare fără lipire, dar am dat-o în bară. Se pare că spațiul disponibil pentru conectare pe placa de testare fără lipire este de 2,8 cm. Am făcut amprenta la 2,5 cm lățime, nelăsând loc pentru un rând de fire pe ambele părți. Ăăă.
Dar permiteți-mi să revin și să vă arăt mai multe despre ceea ce fac. Vreau să creez o logică programabilă care poate fi construită ca un kit, poate fi ușor lipită acasă, poate fi programată într-un circuit și poate funcționa la 3,3 sau 5 volți.
Pentru a realiza un kit ușor de lipit, am folosit o componentă CPLD veche, disponibilă și în versiuni de 3.3v și 5v, care își va menține programarea indiferent de sursa de alimentare. Logica în sine este un circuit integrat CPLD din seria Altera Max, disponibil în două versiuni, potrivit pentru plăci de circuit cu 32 sau 64 de macrocelule. Macrocelulele sunt blocurile logice de bază care sunt programate folosind „termeni” logici și apoi interconectate cu alte macrocelule prin interconexiuni programabile.
Privind schema, puteți observa că nu are prea mult conținut: practic CPLD-ul, circuitul de programare în circuit și oscilatorul care acționează logica CPLD.
Această piesă se numește EPM7032 și EPM7064, utilizând un suport de cip din plastic cu 44 de pini (PLCC), uneori numit J lead datorită formei J a lead-ului. Această carcasă poate fi introdusă într-un soclu cu orificiu traversant sau lipită direct pe PCB.
Conține un oscilator încorporat, astfel încât CPLD poate efectua operațiuni cu stări precise și poate crea contoare rapide pe cont propriu, fără a fi nevoie de un ceas extern. Dacă este disponibil un ceas extern, ceasul de mare viteză de pe modul poate fi utilizat pentru a crea un eveniment de ceas pe fiecare front ascendent sau descendent al ceasului extern, respectând în continuare instrucțiunile CPLD/FPGA, adică ar trebui să utilizați rețeaua globală internă de ceas în loc de un control „asincron” al intrării de ceas. Tensiunea nominală de alimentare a acestui oscilator este între 1,8 și 5,5 volți.
Dacă te uiți la videoclip, vei vedea că discut despre preferințele mele personale privind modul de gestionare a pinului „INH” de pe oscilator; simplu spus, după ce verific dacă fișa tehnică este legală, am tendința să-l las să plutească.
Când am avut de-a face cu astfel de funcții, printre motivele care mi-au venit în minte s-a numărat și antipatia mea față de conectarea pinilor de intrare direct la șinele de alimentare (dacă este posibil). Adică, prefer să folosesc rezistențe în serie pentru a limita curentul în timpul tranzițiilor, chiar dacă nu ar trebui să fie nevoie.
De-a lungul anilor, am observat unele probleme în producție (loturi mari) și, ocazional, lucruri precum ciclurile de alimentare au permis ca pinii conectați direct la șina de alimentare să aibă o tensiune mai mare decât cipul în sine, ceea ce este un dezavantaj. În cele din urmă, conectați pinul la șina de alimentare printr-un rezistor (fie de alimentare, fie de masă), iar oamenii se pot răzgândi și pot folosi pinul mai târziu. Acest lucru este valabil mai ales în experiența mea cu uși neutilizate, probabil știți că aceste uși nu ar trebui niciodată lăsate plutitoare sau neconectate. Folosind un rezistor de tracțiune, puteți conecta semnalul și utiliza poarta fără a tăia urmele de cupru.
Conectorul cu 10 pini și câteva rezistențe formează circuitul de programare. Dacă toate rezistențele ar fi rezistențe de tracțiune, aș folosi o rețea de rezistențe, dar din păcate, una este legată la masă.
Pentru a programa un astfel de CPLD independent, este nevoie de un programator dedicat. Mi-e ușor să spun asta, pentru că de obicei am câteva lângă mine, dar dacă nu ai unul, nu va fi prea dureros să intri în joc. „Altera USB Blaster” aprobat se vinde cu 50 de dolari și poate fi achiziționat de la Digikey și din alte locuri. Am mai multe clone de pe Ebay, dintre care una este o clonă care suportă Altera, Xilinx și Lattice în același timp. Există un proiect și un cod pe internet care pot fi folosite pentru a-ți crea propria clonă, le voi lista în lista mea de videoclipuri posibile pentru proiectul de realizare a clonelor programatorului. De asemenea, voi arăta un design de shield în care se poate programa placa de bază, Arduino, PIC etc.
Software-ul necesar pentru compilarea și programarea CPLD este disponibil gratuit de la Altera, dar această parte veche necesită versiunea 9.1. Vestea bună este că era versiunea mea veche preferată. Avea un analizor de temporizare intuitiv, dar a fost eliminat într-o versiune ulterioară.
PCB-ul are un design simplu, cu două fețe, atâta timp cât placa de circuit este potrivită, eu tind să folosesc cupru pentru împământare și uneori pentru alimentare. Uneori, turnarea cuprului devine atât de neregulată încât poate cauza probleme sau rezultate finale nedorite, așa că turnarea cuprului este din nou un instrument, dar trebuie gestionată.
Astăzi, multe (dacă nu majoritatea) pachetelor software CAD conțin vizualizări 3D ale produsului final, deși acuratețea imaginilor este la fel de precisă ca modelele 3D utilizate pentru reprezentarea pieselor. Aici puteți vedea unde am ales modelul 3D pentru soclul cu 44 de pini, conectorul de programare și oscilatorul. Iată câteva pachete 3D pe care îmi place să le utilizez:
Multe companii au, de asemenea, modele 3D ale componentelor lor. Molex este doar un exemplu de companie care a făcut o treabă bună în acest domeniu.
Greșeala pe care am făcut-o nu afectează funcționalitatea, cum ar fi estetica, și nu este problema principală, adică nu este potrivită pentru o singură placă de test fără lipire.
Odată ce m-am gândit că aș putea împărtăși designul cu oricine, am fost imediat nemulțumit de simbolurile schematice ale CPLD și de pinout-ul conectorului cu 40 de pini, care reprezintă amprenta sa totală. Am luat un simbol de conector cu 40 de pini pe două rânduri și l-am ajustat la o amprentă de 1 inch, dar numerele pinilor nu sunt 1, 2, 3, 4... ci sunt numerotate cu 1 pe lateral, ca un pachet DIP, 3, 5, 7... la fel ca conectorii cablului panglică. Prin urmare, este o amprentă neintuitivă pentru a determina cum să se conecteze la modul și pentru depanare.
În mod similar, atribuirea pinilor CPLD este puțin confuză, iar eu am folosit un set de utilitare care se bazează pe Boundary Scan Description Language (BSDL) pentru a crea simboluri. Majoritatea furnizorilor importanți au fișiere BSDL disponibile pentru componentele lor principale, care vă permit să creați (semi)automat simboluri și pachete. Ca orice automatizare, trebuie văzută ca un instrument și poate necesita o ajustare suplimentară pentru cele mai bune rezultate. În acest caz, am lăsat-o să listeze pinii în ordine alfabetică, ceea ce este aproape aleatoriu atunci când urmăriți pinii pe placă. Pot spune doar că am fost foarte neliniștit în ziua aceea.
Aceste scurtături vor fi plătite cândva pe parcurs. Când voi modifica acest modul, voi determina și îi voi da o poziționare a pinilor care se potrivește cu piesa în sine, astfel încât a ști unde să plasezi sonda osciloscopului să fie la fel de ușor ca o privire asupra simbolului schematic.
Când se utilizează plăci de circuit, există și alte îmbunătățiri care sunt în principal estetice sau utile. Indicatorul pinului 1 trebuie să fie mai comun în mai multe pachete, iar eu prefer întotdeauna un punct de împământare simplu pentru a conecta masa osciloscopului sau cablul VOM. Aș putea adăuga acest lucru adăugând un conector cu doi pini, astfel încât alimentarea și împământarea să poată fi aplicate direct pe placă în loc să fie fixate la pinii inferiori.
Înainte de a modifica placa de circuit, vreau să mă asigur că funcționează corect din punct de vedere fizic și estetic. După ce am pornit și am confirmat că oscilatorul funcționează corect, am conectat programatorul. Deși versiunea de 3.3V este mai nouă decât software-ul de programare, acesta a detectat CPLD-ul și l-a afișat ca dispozitiv „necunoscut”.
Apoi, am creat un contor în Quartus și i-am atribuit numere de pini. Compilarea și descărcarea rapidă, precum și funcția de contor percepută de osciloscop, verifică fezabilitatea proiectului.
Circuitul de testare rapidă în Verilog este foarte simplu. Codul este listat mai jos. Puteți descărca un fișier ZIP care conține schema și circuitul de testare Verilog ca proiect Quartus II (necesită versiunea 9.1).
După cum am menționat, voi face o a doua revizuire a plăcii de circuit pentru a acorda mai multă atenție detaliilor necesare atunci când partajez designul sau fac orice serie de depanări. Deoarece trebuie să setez lățimea conectorului inferior la 0,9 inci sau mai puțin, pot continua să o setez la 0,6 inci, care este un pachet DIP „lat” standard. Acest lucru înseamnă să las pinii inferiori să iasă din amprenta soclului CPLD. Nu aș face asta într-o situație de producție, deoarece a fost asamblat manual la momentul respectiv, dar unul dintre obiective a fost să realizez un kit de lipire manuală. Compromisul pentru lipirea manuală este că oscilatorul trebuie să fie într-o carcasă SMD cu montare pe suprafață, versiunea cu orificiu traversant este foarte mare și de obicei nu suportă intervalul de tensiune dorit.
Este posibil să folosesc aceste module pentru a construi un computer simplu complet? Cred că trebuie să adaug memorie.
Lol... da, depinde de ce fel de calculator. Totuși, microcontrolerele/microcomputerele „reale” sunt afectate de „conectarea pinilor” a modulului, ceea ce înseamnă că nu poți obține suficientă terminologie din modul pentru a face ceva prea util.
Am realizat un controler complet de temporizare și mod de cameră NTSC cu o dimensiune de 64, deci nu este necesar niciun procesor.
Verilog-ul structural și HDL utilizate în cartea Nand to Tetris sunt mai mult sau mai puțin aceleași.
De ce sunt piesele cu găuri străpunse? Sudarea 0805 este ușoară! Acum este momentul ca fiecare mester să învețe această abilitate.
Dacă fac ca soclul superior să se suprapună peste pinii lipiți de jos, atunci pot folosi „6 centre” (simulând un cip cu 40 de pini) sau diagonală etc. Aceasta va fi o lipire strict manuală a componentelor pentru lipirea cablurilor inferioare. Soclul superior este în spatele picioarelor.
Dar este dificil pentru începători să-l lipească de jos în sus. Când lipesc conectorii pentru PCB-ul plăcii de test (aceste plăci adaptoare SMD ieftine pe care le puteți folosi pe eBay pot fi folosite pentru prototipare), introduc conectorii în placa de test, apoi pun PCB-ul pe ea și apoi pot lipi cu ușurință. Este foarte potrivit pentru plăcile de test. Dacă trebuie să-l lipiți de jos în jos, este și mai dificil.
Dacă CPLD-ul este la mijloc (poate fi mai ușor de cablat), acesta poate fi instalat diagonal fără suprapunere, există 4 rânduri sau CPLD-ul poate fi pe o parte:
Mulțumesc pentru sfatul de a introduce conectorul în placa de test înainte de lipire. A mea este puțin instabilă.
Dar pinii plăcii de test în format DIP de la un capăt și pinii de tip „dongle” ai soclului cipului de la celălalt capăt? Cipul poate fi agățat la capătul plăcii de test. Rutarea va fi strânsă.
|######## ******************** |. Da, am decis să folosesc versiunea „gratuită” de la Altera, la fel cum Xilinx și Lattice au versiuni „gratuite”. Trebuie să închei ciclul cu Al Williams pentru a înțelege ce suportă tot suportul deschis, ceea ce trebuie să includă atributele specifice seriei de dispozitive. Acestea fiind spuse, am făcut multe cu versiunea gratuită.
Da, arăți că CPLD se suprapune cu pinii, cred. Dacă urmez corect, ar putea arăta ca în versiunea 2. Când proiectez pentru producție (în masă), sunt întotdeauna alergic la etapa de „asamblare prin lipire manuală”, deoarece se suprapun (de fapt, pinii de lipire de pe partea fără componentă). ) Este deja o componentă lipită manual), dar acesta este doar un kit mic, nu un design orientat spre producție. Am doar niște obiceiuri de care e greu să scap la vârsta mea. 
Cred că o placă de circuit în formă de T cu CPLD și componente pasive cu o parte lată în formă de T va fi foarte utilă atunci când este agățată pe marginea plăcii de test. Ceva similar cu Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Acest lucru va face disponibilă cea mai mare parte a zonei plăcii de test.
Din păcate, întreruperea producției va limita drastic utilizarea sa în proiecte secundare, la fel ca în cazul tuturor generatoarelor de funcții bazate pe XR2206 și ICL8038.
Idee interesantă. Îmi plac aceste două cipuri. CPLD nu este demodat, este doar o modalitate mai ieftină de a-l cumpăra la 3.3v.
În legătură cu „prostiile” tale... chiar nu ai făcut un layout nou pentru a-l pune pe placa de test. Pur și simplu pune firul mai întâi pe placa de test, apoi pune CPLD-ul pe fir. Sau, dacă poți scoate benzile de alimentare și împământare de pe una dintre ele, folosește 2 plăci de test.
Despre Altium și Eagle. Te-ai gândit la KiCad? Nu are nicio limitare care să-ți facă să preferi Altium în locul lui Eagle și, în mod implicit, generează erori DRC pentru toți pinii neconectați. Dacă vrei neapărat să deschizi un pin, trebuie să-i spui. (Poate doar pentru intrare, nu și pentru ieșire, și nu a fost încă verificat). O altă caracteristică grozavă este că este foarte ușor de învățat. Mi-a luat doar o după-amiază, iar manualul introductiv excelent m-a pus pe picioare.
Prefer SMD-ul (cu partea mai mare) deasupra găurii străpunse. Sunt mai ușor de utilizat. Nu trebuie să rotești PCB-ul tot timpul. (S-au făcut niște greșeli stupide din cauza oglindirii...). Și nu trebuie să tai cablul rezistorului. Când partajezi un design, mai multe pachete pot fi plasate convenabil pe un PCB sau pe o singură piesă. Rezistor SMD TH. (Într-adevăr, complică puțin aspectul).
Am folosit „KiCad Getting Started” în format pdf. Vechea versiune pe care am folosit-o are 29 de pagini, iar cea mai recentă versiune are 52 de pagini. Îl puteți găsi în alte tutoriale (inclusiv linkuri video): http://kicad-pcb.org/help/tutorials/
Știu că [Chris Gemmell] de la Hackaday și The Amp Hour a realizat o serie despre Kicad http://kicad-pcb.org/help/tutorials/
Kicad ar putea fi util, stai să văd ce se întâmplă în Rev 2. Mulțumesc pentru sugestii. Intrările neconectate sunt un lucru bun pentru DRC (ERC), iar pentru conectori și alte lucruri care le mențin soft sau IO, majoritatea mesajelor de deconectare CAD pot fi de obicei evitate.
Rulați un test rapid și plasați conectorul într-un tabel gol, executați adnotări și DRC. Mi-a dat erori drc pentru fiecare pin. Totuși, marcarea pinilor neconectați cunoscuți este foarte simplă.
Setat pe pasiv. Trebuie să caut (Editare componentă -> Editare cu editorul bibliotecii). Editorul bibliotecii deschide și încarcă componenta într-o fereastră separată, puteți verifica sau modifica orice parte a componentei. Componenta modificată poate fi salvată sau actualizată în schema dvs. Acest lucru face foarte ușoară schimbarea componentelor. Nu mă interesează prea mult biblioteca. De exemplu, dacă utilizați cpld, doriți să atribuiți nume semnificative pinilor. Mai important, există o interfață bună pentru a proiecta propriile componente.
În ERC-ul KiCad, pinii „neconectați” sunt un tip diferit de „pinii pasivi”, iar toți pinii „neconectați” vor genera erori. Modul în care funcționează ERC poate fi ușor ajustat în funcție de propriile preferințe: Instrumente -> Verificator reguli electrice -> Opțiuni.
Data publicării: 18 noiembrie 2021





