En komplex programmerbar logikenhet (CPLD) är en viktig del av din repertoar. Som namnet antyder kan du programmera dessa kretsar för att tillhandahålla de logikfunktioner du behöver. Detta kan vara att ersätta föråldrade kretsar, eller bara ett sätt att lära sig och prova olika tekniker. Vilket bättre sätt att lära sig än att använda CPLD och prova det?
Jag skapade en CPLD-modul för att kunna ansluta den till många saker, inklusive lödfria kopplingsdäck, men jag misslyckades. Det verkar som att det tillgängliga utrymmet för inkoppling på det lödfria kopplingsdäcket är 3,8 cm. Jag har gjort fotavtrycket 2,5 cm brett, vilket inte lämnar plats för en rad kablar på båda sidor. Eh.
Men låt mig backa upp och visa mer om vad jag gör, jag vill skapa en programmerbar logik som kan byggas som ett kit, enkelt kan lödas hemma, kan programmeras i en krets och kan fungera vid 3,3 eller 5 volt.
För att skapa ett lättlödbart kit använde jag en gammal CPLD-komponent, som även finns i 3,3 V och 5 V versioner, och kommer att behålla sin programmering oavsett strömförsörjning. Själva logiken är en CPLD-krets från Altera Max-serien, tillgänglig i två versioner, lämplig för kretskort med 32 eller 64 makroceller. Makroceller är de grundläggande logiska byggstenarna som programmeras med hjälp av logiska "termer" och sedan sammankopplas med andra makroceller genom programmerbara sammankopplingar.
Om man tittar på schemat kan man se att det inte har mycket innehåll: i grund och botten CPLD, programmeringskretsen i kretsen och oscillatorn som driver CPLD-logiken.
Denna del kallas EPM7032 och EPM7064, och använder en 44-polig plastledare (PLCC), ibland kallad J-ledare på grund av ledarens J-form. Denna kapsling kan sättas in i en genomgående hålsockel eller lödas direkt till kretskortet.
Innehåller en inbyggd oscillator, så att CPLD:n kan utföra operationer tillståndsmässigt och skapa snabba räknare på egen hand utan behov av en extern klocka. Om en extern klocka är tillgänglig kan höghastighetsklockan på modulen användas för att skapa en klockhändelse på varje stigande eller fallande flank av den externa klockan, och fortfarande följa CPLD/FPGA-riktlinjerna, det vill säga att du verkligen bör använda det interna globala klocknätverket istället för "asynkrona" driver klockingången. Oscillatorns nominella matningsspänning ligger mellan 1,8 och 5,5 volt.
Om du tittar på videon ser du att jag diskuterar min personliga preferens för hur man hanterar "INH"-pinnen på oscillatorn; enkelt uttryckt, efter att jag kontrollerat att specifikationsbladet är lagligt, tenderar jag att låta det flyta.
När jag hanterade sådana funktioner, var de skäl som dök upp i mitt huvud bland annat att jag ogillade att ansluta ingångsstiften direkt till strömskenorna (om möjligt). Det vill säga, jag föredrar att använda seriemotstånd för att begränsa strömmen under transienter, även om det inte borde behövas.
Under årens lopp har jag sett en del problem i produktionen (stora serier), och ibland har saker som strömförsörjning gjort att stiften som är direkt anslutna till strömskenan har en högre spänning än själva chipet, vilket är dåligt. Slutligen, anslut stiftet till strömskenan via ett motstånd (antingen ström eller jord), så kan folk ändra sig och använda stiftet senare. Detta gäller särskilt i min erfarenhet med oanvända dörrar, du vet förmodligen att dessa dörrar aldrig bör lämnas flytande eller oanslutna. Genom att använda ett pull-up-motstånd kan du ansluta signalen och använda grinden utan att kapa kopparspår.
10-polig kontakt och några motstånd bildar programmeringskretsen. Om alla motstånd är pull-up-motstånd skulle jag använda ett motståndsnätverk, men tyvärr är ett av dem jordat.
För att programmera en sådan oberoende CPLD krävs en dedikerad programmerare. Det är lätt för mig att säga, eftersom jag vanligtvis har några liggande bredvid mig, men om du inte har en blir det inte alltför smärtsamt att komma in i spelet. Den godkända "Altera USB Blaster" säljs för 50 dollar och kan köpas från Digikey och andra ställen. Jag har flera kloner från Ebay, varav en är en klon som stöder Altera, Xilinx och Lattice samtidigt. Det finns ett projekt och kod på internet som kan användas för att skapa din egen klon, jag kommer att lista det i min lista över möjliga videor för projektet att göra programmerarkloner. Jag kommer också att visa en skölddesign där moderkortet, Arduino, PIC, etc. kan programmeras.
Programvaran som krävs för att kompilera och programmera CPLD:n finns fritt tillgänglig från Altera, men den här gamla delen kräver den gamla versionen 9.1. Den goda nyheten är att det var min favoritversion. Den hade en intuitiv tidsanalysator, men den togs bort i en senare version.
Kretskortet är en enkel dubbelsidig design, så länge kretskortet passar, brukar jag använda koppar för jordning och ibland strömförsörjning. Ibland blir gjutningen så trasig att det faktiskt kan orsaka problem eller slarviga slutresultat, så koppargjutning är återigen ett verktyg, men det måste hanteras.
Idag innehåller många (om inte de flesta) CAD-programvarupaket 3D-vyer av slutprodukten, även om bildernas noggrannhet bara är så exakt som de 3D-modeller som används för att representera delarna. Här kan du se var jag valde 3D-modellen för 44-polig sockel, programmeringskontakt och oscillator. Här är några 3D-program jag gillar att använda:
Många företag har också 3D-modeller av sina komponenter. Molex är bara ett exempel på ett företag som har gjort ett bra jobb inom detta område.
Misstaget jag gjorde påverkar inte funktionen som estetiken, och det är inte huvudproblemet, det vill säga att det inte är lämpligt för ett enda lödfritt kopplingsdäck.
När jag väl tänkte att jag kanske skulle dela designen med någon, blev jag omedelbart missnöjd med CPLD:ns schematiska symboler och pinouten på 40-polig kontakt, vilket är dess totala yta. Jag tog en 40-polig dubbelradig kontaktsymbol och justerade den till ett 1-tums yta, men stiftnumren är inte 1, 2, 3, 4... utan är numrerade 1 på sidan som ett DIP-paket 3, 5, 7... precis som bandkabelkontakter. Därför är det ett icke-intuitivt yta för att avgöra hur man ansluter till modulen och felsöka.
På samma sätt är CPLD-pintilldelningarna lite förvirrande, och jag använde en uppsättning verktyg som förlitar sig på Boundary Scan Description Language (BSDL) för att skapa symboler. De flesta större leverantörer har BSDL-filer tillgängliga för sina vanliga komponenter, vilket gör att du kan (semi-)automatiskt skapa symboler och paket. Liksom all automatisering måste den ses som ett verktyg och kan kräva ytterligare justeringar för bästa resultat. I det här fallet lät jag den lista pinnarna i alfabetisk ordning, vilket är nästan slumpmässigt när man spårar pinnarna på kortet. Jag kan bara säga att jag var väldigt orolig den dagen.
Du betalar för dessa genvägar någon gång på vägen. När jag ska modifiera den här modulen kommer jag att bestämma och ge den en pinnplacering som matchar själva delen, så att det är lika enkelt som att titta på den schematiska symbolen att veta var du ska placera din oscilloskopprob.
När man använder kretskort finns det andra förbättringar som främst är estetiska eller användbara. Pin 1-indikatorn behöver bli vanligare i flera kapslingar, och jag föredrar alltid en enkel jordpunkt för att ansluta oscilloskopets jord eller VOM-kabel. Jag kan lägga till detta genom att lägga till en tvåpolig kontakt så att ström och jord kan appliceras direkt på kortet istället för att klämmas fast på de nedre stiften.
Innan jag modifierar kretskortet vill jag se till att det fungerar korrekt, både fysiskt och estetiskt. Efter att ha slagit på strömmen och bekräftat att oscillatorn fungerar korrekt, kopplade jag in programmeraren. Även om 3,3 V-versionen är nyare än programmeringsprogramvaran, upptäckte den CPLD:n och visade den som en "okänd" enhet.
Därefter skapade jag en räknare i Quartus och tilldelade den PIN-nummer. Den snabba kompileringen och nedladdningen samt räknarfunktionen som oscilloskopet ser bekräftar att designen är genomförbar.
Snabbtestkretsen i Verilog är mycket enkel. Koden listas nedan. Du kan ladda ner en ZIP-fil som innehåller schemat och Verilog-testkretsen som ett Quartus II-projekt (kräver version 9.1).
Som jag nämnde kommer jag att göra en andra revision av kretskortet för att vara mer uppmärksam på de detaljer som behövs när jag delar designen eller utför någon form av felsökning. Eftersom jag behöver ställa in bredden på den nedre kontakten till 0,9 tum eller mindre, kan jag fortsätta att ställa in den till 0,6 tum, vilket är ett standard "brett" DIP-paket. Att göra detta innebär att de nedre stiften sticker ut från CPLD-sockelns fotavtryck. Jag skulle inte göra detta i en produktionssituation eftersom det monterades för hand vid den tiden, men ett av målen var att göra ett handlödningskit. Kompromissen med handlödning är att oscillatorn behöver sitta i ett SMD-ytmonterat hölje, hålmonteringsversionen är mycket stor och stöder vanligtvis inte det spänningsområde jag vill ha.
Är det möjligt att använda dessa moduler för att bygga en komplett enkel dator? Jag tror att jag behöver lägga till minne.
Haha... ja, det beror på vilken typ av dator det är. Men "riktiga" mikrokontroller/mikrodatorer påverkas av modulens "pin bonding", vilket innebär att man inte kan få tillräckligt med terminologi från modulen för att göra något särskilt användbart.
Jag byggde en komplett NTSC-kameratiming- och lägeskontroller med storleken 64, så ingen processor krävs.
Den strukturella verilogen och HDL som används i boken Nand till Tetris är mer eller mindre desamma.
Varför är det genomgående håldelar? Att svetsa 0805 är enkelt! Nu är det dags för alla pysslare att lära sig den här färdigheten.
Om jag gör att den övre sockeln överlappar stiften som är lödda nerifrån, kan jag använda "6 centimeter" (simulerar ett 40-poligt chip) eller diagonalt, etc. Detta kommer att vara strikt manuell lödning av komponenter för att löda de nedre ledningarna. Den övre sockeln bakom fötterna.
Men det är svårt för nybörjare att löda det underifrån. När jag löder headers till kretskortet på kopplingskortet (dessa billiga SMD-adapterkort som du kan använda på eBay kan användas för prototyptillverkning), sätter jag in headers i kopplingskortet, sätter sedan kretskortet på det, och sedan kan jag löda enkelt. Det är mycket lämpligt för kopplingskort. Om du behöver löda det underifrån är det ännu svårare.
Om CPLD:n är i mitten (kan vara enklare att koppla) kan den installeras diagonalt utan överlappning, det finns fyra rader, eller så kan CPLD:n vara på ena sidan:
Tack för tipset att sätta in kontakten i kopplingsplattan innan lödning. Min är lite instabil.
Hur är det med DIP-formaterade kopplingsdäcksstift i ena änden och "dongle"-liknande chipsockel i den andra änden? Chipet kan hängas på änden av kopplingsdäcket. Dragningen blir tät.
|####### ******************** |. Ja, jag bestämde mig för att använda Alteras "gratisversion", precis som Xilinx och Lattice har "gratisversioner". Jag behöver avsluta cykeln med Al Williams för att förstå vad all öppen support stöder, vilket måste inkludera de specifika attributen för enhetsserien. Med det sagt har jag gjort mycket med gratisversionen.
Ja, du visar att CPLD överlappar med stiften, tror jag. Om jag följer det korrekt kan det här se ut som rev 2. När jag designar för (mass)produktion är jag alltid allergisk mot steget "handlödning" eftersom de överlappar varandra (faktiskt lödstiften på den sida som inte är komponent). ) är redan en handlödd komponent) men det här är bara ett litet kit, inte en produktionsorienterad design. Jag har bara några vanor som är svåra att bli av med i min ålder. 
Jag tror att ett T-format kretskort med CPLD och passiva komponenter med en bred T-formad del kommer att vara mycket användbart när det hängs på kanten av kopplingsplattan. Något liknande Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Detta kommer att frigöra det mesta av kopplingsplattans yta.
Tyvärr kommer nedläggningen kraftigt att begränsa dess användning i sidoprojekt, precis som alla de funktionsgeneratorer baserade på XR2206 och ICL8038.
Intressant idé. Jag gillar de här två chipen. CPLD är inte föråldrat, det är bara ett billigare sätt att köpa det på 3,3 V.
Angående ditt "nonsens"... du gjorde verkligen ingen ny layout för att lägga den på kopplingsplattan. Sätt bara kabeln på kopplingsplattan först, och sätt sedan cpld:n på kabeln. Eller, om du kan dra av ström- och jordremsorna från en av dem, använd två kopplingsplattor.
Angående Altium och Eagle. Har du funderat på KiCad? Det har inga begränsningar som att du föredrar Altium framför Eagle, och genererar som standard DRC-fel för alla okopplade pinnar. Om du verkligen vill öppna en pin måste du säga det. (Kanske bara för inmatning, inte för utmatning, och det har inte testats än). En annan bra funktion är att det är väldigt lätt att lära sig. Det tog bara en eftermiddag, och den utmärkta introduktionsmanualen fick mig att komma igång.
Jag föredrar (den större delen) SMD:n framför det genomgående hålet. De är enklare att använda. Man behöver inte vrida på kretskortet hela tiden. (Några dumma misstag gjordes på grund av speglingen...). Och man behöver inte kapa motståndets ledning. När man delar en design kan flera kapslar bekvämt placeras på ett kretskort eller en enda del. SMD-motstånd TH. (Det gör layouten lite mer komplicerad).
Jag använde "KiCad Getting Started" i pdf-format. Den gamla versionen jag använde är 29 sidor lång, och den senaste versionen har 52 sidor. Du hittar den i andra handledningar (inklusive videolänkar): http://kicad-pcb.org/help/tutorials/
Jag vet att [Chris Gemmell] från Hackaday och The Amp Hour gjorde en serie om Kicad http://kicad-pcb.org/help/tutorials/
Kicad kan vara användbart, låt mig se vad som händer i Rev 2. Tack för dina förslag. Icke-anslutna ingångar är bra för DRC (ERC), och för kontakter och andra saker som håller dem mjuka eller IO kan de flesta CAD-frånkopplingsmeddelanden vanligtvis undvikas.
Kör ett snabbt test och släng kontakten i en tom tabell, kör anteckningar och DRC. Det gav mig drc-fel för varje pin. Att markera kända okopplade pinnar är dock mycket enkelt.
Satt till passiv. Jag måste söka (Redigera komponent -> Redigera med biblioteksredigeraren). Biblioteksredigeraren öppnas och laddar din komponent i ett separat fönster, du kan kontrollera eller ändra vilken del som helst av komponenten. Den ändrade komponenten kan sparas eller uppdateras i ditt schema. Detta gör det väldigt enkelt att ändra komponenter. Jag bryr mig inte så mycket om biblioteket. Om du till exempel använder cpld vill du tilldela meningsfulla namn till stiften. Ännu viktigare är att det finns ett bra gränssnitt för att designa dina egna komponenter.
I KiCads ERC är "icke-anslutna" pinnar en annan typ av pin än "passiva pinnar", och alla "icke-anslutna" pinnar kommer att generera fel. Hur ERC fungerar kan enkelt justeras efter dina egna preferenser: Verktyg -> Elektrisk regelkontroll -> Alternativ.
Publiceringstid: 18 november 2021





