Een complex programmeerbaar logisch apparaat (CPLD) is een essentieel stuk hardware in je repertoire. Zoals de naam al doet vermoeden, kun je deze chips programmeren om de logische functies te leveren die je nodig hebt. Dit kan zijn om verouderde chips te vervangen, of gewoon om verschillende technologieën te leren kennen en uit te proberen. Wat is er een betere manier om te leren dan door CPLD's te gebruiken en ermee te experimenteren?
Ik heb een CPLD-module gemaakt die ik op veel verschillende dingen kan aansluiten, waaronder soldeerloze breadboards, maar ik heb een fout gemaakt. Het blijkt dat de beschikbare aansluitruimte op het soldeerloze breadboard 1,1 inch is. Ik heb de footprint 1 inch breed gemaakt, waardoor er geen ruimte meer is voor een rij draden aan beide kanten. Oeps.
Maar laat ik even terugkomen op wat ik precies aan het doen ben. Ik wil een programmeerbare logica maken die als bouwpakket in elkaar gezet kan worden, thuis makkelijk gesoldeerd kan worden, in een circuit geprogrammeerd kan worden en op 3,3 of 5 volt kan werken.
Om een eenvoudig te solderen kit te realiseren, heb ik een oud CPLD-component gebruikt, dat ook verkrijgbaar is in 3,3V- en 5V-versies en zijn programmering behoudt, ongeacht de voedingsspanning. De logica zelf is een CPLD-IC uit de Altera Max-serie, verkrijgbaar in twee versies, geschikt voor printplaten met 32 of 64 macrocellen. Macrocellen zijn de basisbouwstenen voor logica die worden geprogrammeerd met behulp van logische "termen" en vervolgens via programmeerbare verbindingen met andere macrocellen worden verbonden.
Als je naar het schema kijkt, zie je dat het niet veel inhoud heeft: in principe de CPLD, het programmeercircuit in het circuit en de oscillator die de CPLD-logica aanstuurt.
Dit onderdeel heet EPM7032 en EPM7064 en maakt gebruik van een 44-pins plastic chipcarrier (PLCC), ook wel J-vormig genoemd vanwege de J-vorm van de aansluitingen. Deze behuizing kan in een doorsteeksocket worden geplaatst of direct op de printplaat worden gesoldeerd.
Bevat een ingebouwde oscillator, waardoor de CPLD zelfstandig stateful bewerkingen kan uitvoeren en snelle tellers kan genereren zonder externe klok. Indien een externe klok beschikbaar is, kan de snelle klok op de module worden gebruikt om een klokgebeurtenis te genereren bij elke stijgende of dalende flank van de externe klok. Hierbij worden nog steeds de CPLD/FPGA-richtlijnen gevolgd, wat inhoudt dat het interne globale kloknetwerk gebruikt moet worden in plaats van de "asynchroon" klokingang. De nominale voedingsspanning van deze oscillator ligt tussen 1,8 en 5,5 volt.
Als je de video bekijkt, zie je dat ik mijn persoonlijke voorkeur bespreek voor het gebruik van de "INH"-pin op de oscillator; simpel gezegd, nadat ik heb gecontroleerd of de specificaties kloppen, laat ik hem meestal zweven.
Bij het werken met dergelijke functies dacht ik aan mijn afkeer van het rechtstreeks aansluiten van de ingangspinnen op de voedingsrails (indien mogelijk). Met andere woorden, ik gebruik liever serieweerstanden om de stroom tijdens transiënten te beperken, zelfs als dat in principe niet nodig zou moeten zijn.
In de loop der jaren heb ik wel eens problemen gezien bij de productie (grote batches), en soms zorgde het in- en uitschakelen van de stroom ervoor dat de pinnen die direct op de voedingsrail waren aangesloten een hogere spanning kregen dan de chip zelf, wat niet goed is. Sluit de pin uiteindelijk aan op de voedingsrail via een weerstand (voor voeding of aarde), zodat mensen de pin later alsnog kunnen gebruiken. Dit is met name relevant voor ongebruikte deuren; u weet waarschijnlijk wel dat deze deuren nooit losgekoppeld of ongebruikt mogen blijven. Door een pull-up weerstand te gebruiken, kunt u het signaal aansluiten en de gate gebruiken zonder de koperen sporen door te knippen.
De 10-pins connector en een paar weerstanden vormen het programmeercircuit. Als alle weerstanden pull-up weerstanden waren, zou ik een weerstandsnetwerk gebruiken, maar helaas is er één aan aarde verbonden.
Om zo'n onafhankelijke CPLD te programmeren, heb je een speciale programmeermodule nodig. Dat is makkelijk gezegd, want ik heb er meestal wel een paar liggen, maar als je er geen hebt, is het niet al te moeilijk om ermee aan de slag te gaan. De goedgekeurde "Altera USB Blaster" kost $50 en is te koop bij Digikey en andere winkels. Ik heb verschillende klonen van eBay, waaronder een die Altera, Xilinx en Lattice tegelijk ondersteunt. Er is een project en code op internet te vinden waarmee je je eigen kloon kunt maken; ik zal die opnemen in mijn lijst met mogelijke video's voor het project om programmeermodules te klonen. Ik zal ook een shield-ontwerp laten zien waarmee je moederborden, Arduino's, PIC's, enzovoort kunt programmeren.
De software die nodig is om de CPLD te compileren en te programmeren is gratis verkrijgbaar bij Altera, maar voor dit oude onderdeel is de oude versie 9.1 vereist. Het goede nieuws is dat dit mijn favoriete oude versie was. Deze had een intuïtieve timing-analysator, maar die is in een latere versie verwijderd.
De printplaat is een eenvoudig dubbelzijdig ontwerp. Zolang de printplaat erop past, gebruik ik meestal koper voor de aarding en soms ook voor de voeding. Soms raakt het gieten zo beschadigd dat het problemen of een slordig eindresultaat kan veroorzaken. Koper gieten is dus een handige techniek, maar vereist wel de nodige aandacht.
Tegenwoordig bevatten veel (zo niet de meeste) CAD-softwarepakketten 3D-weergaven van het eindproduct, hoewel de nauwkeurigheid van de afbeeldingen afhangt van de nauwkeurigheid van de 3D-modellen die gebruikt worden om de onderdelen te representeren. Hier kunt u zien waar ik het 3D-model voor de 44-pins socket, de programmeerconnector en de oscillator heb gekozen. Hier zijn enkele 3D-pakketten die ik graag gebruik:
Veel bedrijven beschikken ook over 3D-modellen van hun componenten. Molex is slechts één voorbeeld van een bedrijf dat op dit gebied goed werk heeft verricht.
De fout die ik maakte heeft geen invloed op de functionaliteit of het uiterlijk, en het is ook niet het grootste probleem; het is namelijk niet geschikt voor een enkel soldeerloos breadboard.
Toen ik overwoog het ontwerp met anderen te delen, was ik meteen ontevreden over de schematische symbolen van de CPLD en de pinbezetting van de 40-pins connector, oftewel de algehele footprint. Ik heb een symbool van een 40-pins dubbelrijige connector genomen en aangepast aan een footprint van 1 inch, maar de pinnummers zijn niet 1, 2, 3, 4... maar genummerd met 1 aan de zijkant, zoals bij een DIP-pakket, en 3, 5, 7... net als bij lintkabelconnectoren. Daardoor is het een onintuïtieve footprint om te bepalen hoe je de module moet aansluiten en om problemen op te lossen.
Ook de pinbezetting van de CPLD is enigszins verwarrend, en ik heb een aantal hulpprogramma's gebruikt die gebaseerd zijn op Boundary Scan Description Language (BSDL) om symbolen te creëren. De meeste grote leveranciers hebben BSDL-bestanden beschikbaar voor hun gangbare componenten, waarmee je (semi-)automatisch symbolen en pakketten kunt maken. Zoals bij elke automatisering moet het als een hulpmiddel worden beschouwd en kan het verdere aanpassingen vereisen voor optimale resultaten. In dit geval liet ik de pinnen alfabetisch sorteren, wat bijna willekeurig is bij het traceren van de pinnen op de printplaat. Ik kan alleen maar zeggen dat ik die dag erg nerveus was.
Je betaalt de prijs voor deze shortcuts ergens onderweg. Wanneer ik deze module ga aanpassen, zal ik een pinplaatsing bepalen die overeenkomt met het onderdeel zelf, zodat je met een blik op het schema eenvoudig kunt zien waar je de oscilloscoopsonde moet plaatsen.
Bij het gebruik van printplaten zijn er nog andere verbeteringen mogelijk, voornamelijk esthetisch of functioneel. De pin 1-indicator zou vaker moeten voorkomen in verschillende behuizingen, en ik geef altijd de voorkeur aan een eenvoudig aardingspunt voor de massa van de oscilloscoop of de meetpen van de voltmeter. Ik zou dit kunnen toevoegen door een tweepinsconnector te plaatsen, zodat voeding en massa direct op de printplaat kunnen worden aangesloten in plaats van via de onderste pinnen.
Voordat ik de printplaat aanpas, wil ik er zeker van zijn dat alles naar behoren werkt, zowel fysiek als esthetisch. Nadat ik de stroom had ingeschakeld en had gecontroleerd of de oscillator goed werkte, heb ik de programmeur aangesloten. Hoewel de 3,3V-versie nieuwer is dan de programmeersoftware, detecteerde deze de CPLD en gaf deze weer als een "onbekend" apparaat.
Vervolgens heb ik een teller in Quartus aangemaakt en pinnummers toegewezen. De snelle compilatie en download en de werkende tellerfunctie die op de oscilloscoop te zien is, bevestigen dat het ontwerp haalbaar is.
Het snelle testcircuit in Verilog is erg eenvoudig. De code staat hieronder. Je kunt een ZIP-bestand downloaden met het schema en het Verilog-testcircuit als een Quartus II-project (vereist versie 9.1).
Zoals ik al zei, zal ik een tweede revisie van de printplaat maken om meer aandacht te besteden aan de details die nodig zijn bij het delen van het ontwerp of bij het oplossen van problemen. Omdat ik de breedte van de onderste connector op 0,9 inch of minder moet instellen, kan ik deze op 0,6 inch houden, wat een standaard "brede" DIP-behuizing is. Dit betekent dat de onderste pinnen buiten de voetafdruk van de CPLD-socket uitsteken. Ik zou dit in een productiesituatie niet doen, omdat het destijds met de hand werd geassembleerd, maar een van de doelen was om een soldeerkit voor handsoldeerwerk te maken. Het compromis bij handsoldeerwerk is dat de oscillator in een SMD-behuizing moet zitten; de doorsteekversie is erg groot en ondersteunt meestal niet het gewenste spanningsbereik.
Is het mogelijk om met deze modules een complete, eenvoudige computer te bouwen? Ik denk dat ik nog geheugen moet toevoegen.
Haha... ja, het hangt af van het type computer. Echter, "echte" microcontrollers/microcomputers worden beïnvloed door de "pinverbinding" van de module, wat betekent dat je niet genoeg terminologie van de module kunt krijgen om er iets nuttigs mee te doen.
Ik heb een complete NTSC-camera-timing- en moduscontroller gemaakt met een grootte van 64, dus er is geen processor nodig.
De in het boek Nand to Tetris gebruikte Structural Verilog en HDL zijn min of meer hetzelfde.
Waarom zijn doorsteekonderdelen zo belangrijk? Lassen met 0805-staal is eenvoudig! Dit is hét moment voor elke doe-het-zelver om deze vaardigheid te leren.
Als ik de bovenste socket laat overlappen met de pinnen die vanaf de onderkant zijn gesoldeerd, kan ik "6 centers" (waarmee ik een 40-pins chip simuleer) of diagonaal solderen, enzovoort. Dit vereist strikt handmatig solderen van de componenten voor het solderen van de onderste aansluitingen. De bovenste socket bevindt zich achter de voetjes.
Maar voor beginners is het lastig om vanaf de onderkant te solderen. Als ik headers soldeer voor de printplaat van een breadboard (deze goedkope SMD-adapterboards die je op eBay kunt vinden, zijn ideaal voor prototyping), steek ik de headers in het breadboard, leg ik de printplaat erop en kan ik vervolgens gemakkelijk solderen. Dat is erg geschikt voor breadboards. Als je vanaf de onderkant moet solderen, is het nog veel moeilijker.
Als de CPLD in het midden zit (wat de bedrading wellicht makkelijker maakt), kan deze diagonaal worden geïnstalleerd zonder overlapping (er zijn 4 rijen), of de CPLD kan aan één kant worden geplaatst:
Bedankt voor de tip om de connector in het breadboard te steken voordat ik ga solderen. Die van mij zit namelijk een beetje instabiel.
Wat dacht je van DIP-formaat breadboard-pinnen aan het ene uiteinde en de "dongle"-achtige chipvoet zelf aan het andere uiteinde? De chip kan dan aan het uiteinde van het breadboard worden bevestigd. De routing zal wel krap zijn.
|####### ******************** |. Ja, ik heb ervoor gekozen om de "gratis" versie van Altera te gebruiken, net zoals Xilinx en Lattice "gratis" versies hebben. Ik moet de cyclus met Al Williams afronden om te begrijpen wat open source software allemaal ondersteunt, inclusief de specifieke eigenschappen van de apparaatserie. Desondanks heb ik al veel gedaan met de gratis versie.
Ja, je laat zien dat de CPLD volgens mij de pinnen overlapt. Als ik het goed begrijp, zou dit revisie 2 kunnen zijn. Bij het ontwerpen voor (massa)productie heb ik altijd een hekel aan de stap van "handmatig solderen" omdat de pinnen elkaar overlappen (eigenlijk de soldeerpinnen aan de niet-componentzijde). (Het component is al met de hand gesoldeerd), maar dit is slechts een kleine kit, geen productiegericht ontwerp. Ik heb nu eenmaal gewoonten waar ik op mijn leeftijd moeilijk vanaf kom. 
Ik denk dat een T-vormige printplaat met CPLD en passieve componenten, met een breed T-vormig gedeelte, erg handig zal zijn als deze aan de rand van het breadboard wordt bevestigd. Iets vergelijkbaars als de Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Hierdoor wordt het grootste deel van het breadboardoppervlak benut.
Helaas zal de stopzetting het gebruik ervan in nevenprojecten ernstig beperken, net als bij alle functiegeneratoren gebaseerd op de XR2206 en ICL8038.
Interessant idee. Ik vind deze twee chips wel leuk. CPLD is niet verouderd, het is gewoon een goedkopere manier om het op 3,3V te krijgen.
Wat betreft je "onzin"... je hebt echt geen nieuwe lay-out gemaakt om het op het breadboard te plaatsen. Plaats eerst de draad op het breadboard en sluit daarna de CPLD aan op de draad. Of, als je de voedings- en aardingsstrips van een van de breadboards kunt loskoppelen, gebruik dan twee breadboards.
Over Altium en Eagle. Heb je KiCad al overwogen? Het heeft geen beperkingen waardoor je Altium boven Eagle zou verkiezen, en genereert standaard DRC-fouten voor alle niet-aangesloten pinnen. Als je een pin echt wilt openen, moet je dat aangeven. (Misschien alleen voor input, niet voor output, en dat is nog niet getest). Een ander groot voordeel is dat het heel gemakkelijk te leren is. Het kostte me maar een middag, en de uitstekende handleiding hielp me op weg.
Ik geef de voorkeur aan SMD-componenten (de grotere variant) boven doorsteekcomponenten. Ze zijn gemakkelijker in gebruik. Je hoeft de printplaat niet steeds te draaien. (Er zijn wel eens domme fouten gemaakt door het spiegelen...). En je hoeft de draad van de weerstand niet af te knippen. Bij het delen van een ontwerp kunnen meerdere componenten gemakkelijk op één printplaat of op één component worden geplaatst. SMD-weerstand met doorsteekcomponent. (Het maakt de lay-out wel iets complexer).
Ik heb de handleiding "KiCad Getting Started" in pdf-formaat gebruikt. De oude versie die ik gebruikte telde 29 pagina's, de nieuwste versie 52 pagina's. Je kunt de handleiding ook vinden in andere tutorials (inclusief videolinks): http://kicad-pcb.org/help/tutorials/
Ik weet dat [Chris Gemmell] van Hackaday en The Amp Hour een serie over KiCad heeft gemaakt: http://kicad-pcb.org/help/tutorials/
KiCad kan wellicht van pas komen, ik ben benieuwd wat er in revisie 2 gebeurt. Bedankt voor je suggesties. Niet-aangesloten ingangen zijn gunstig voor DRC (ERC), en voor connectoren en andere zaken die ze flexibel of als I/O behandelen, kunnen de meeste CAD-verbindingsfouten worden vermeden.
Voer een snelle test uit en plaats de connector in een lege tafel, voer annotaties en DRC uit. Ik kreeg DRC-fouten voor elke pin. Het markeren van bekende niet-aangesloten pinnen is echter heel eenvoudig.
Instellen op passief. Ik moet zoeken (Component bewerken -> Bewerken met bibliotheekeditor). De bibliotheekeditor wordt geopend en laadt je component in een apart venster. Je kunt elk onderdeel van de component controleren of wijzigen. De gewijzigde component kan worden opgeslagen of bijgewerkt in je schema. Dit maakt het heel gemakkelijk om componenten te wijzigen. Ik geef niet zoveel om de bibliotheek. Als je bijvoorbeeld CPLD gebruikt, wil je betekenisvolle namen aan de pinnen toewijzen. Belangrijker is dat er een goede interface is om je eigen componenten te ontwerpen.
In KiCad's ERC zijn "niet-aangesloten" pinnen een ander type pin dan "passieve pinnen", en alle "niet-aangesloten" pinnen genereren fouten. De werking van ERC kan eenvoudig worden aangepast aan uw eigen voorkeuren: Tools -> Electrical Rules Checker -> Options.
Geplaatst op: 18 november 2021





