Un dispositivo logico programmabile complesso (CPLD) è un componente hardware essenziale nel vostro repertorio. Come suggerisce il nome, questi chip possono essere programmati per fornire le funzioni logiche necessarie. Potrebbe trattarsi di sostituire chip obsoleti o semplicemente di un modo per imparare e sperimentare diverse tecnologie. E quale modo migliore per imparare se non utilizzando un CPLD e mettendolo in pratica?
Ho creato un modulo CPLD per poterlo collegare a molti dispositivi, comprese le breadboard, ma ho combinato un pasticcio. Sembra che lo spazio disponibile per i connettori sulla breadboard sia di 1,1 pollici. Ho creato un'impronta larga 1 pollice, senza lasciare spazio per una fila di fili su entrambi i lati. Uh.
Ma facciamo un passo indietro e spieghiamo meglio cosa sto facendo: voglio realizzare una logica programmabile che possa essere assemblata come un kit, facilmente saldabile a casa, programmabile all'interno di un circuito e funzionante a 3,3 o 5 volt.
Per realizzare un kit facile da saldare, ho utilizzato un vecchio componente CPLD, disponibile anche nelle versioni a 3,3 V e 5 V, che mantiene la sua programmazione indipendentemente dall'alimentazione. La logica stessa è un circuito integrato CPLD della serie Altera Max, disponibile in due versioni, adatte a circuiti stampati con 32 o 64 macrocelle. Le macrocelle sono i blocchi logici di base che vengono programmati utilizzando "termini" logici e poi interconnessi con altre macrocelle tramite interconnessioni programmabili.
Osservando lo schema, si può notare che non contiene molti componenti: sostanzialmente il CPLD, il circuito di programmazione in-circuit e l'oscillatore che pilota la logica del CPLD.
Questo componente è denominato EPM7032 e EPM7064 e utilizza un package PLCC (Plastic Lead Chip Carrier) a 44 pin, talvolta chiamato "a J" per via della forma a J dei terminali. Questo package può essere inserito in uno zoccolo a foro passante o saldato direttamente al PCB.
Contiene un oscillatore integrato, quindi il CPLD può eseguire operazioni con stato e creare contatori veloci autonomamente, senza bisogno di un clock esterno. Se è disponibile un clock esterno, è possibile utilizzare il clock ad alta velocità del modulo per creare un evento di clock su ogni fronte di salita o discesa del clock esterno, rispettando comunque le linee guida CPLD/FPGA, ovvero è consigliabile utilizzare la rete di clock globale interna anziché pilotare l'ingresso di clock in modo "asincrono". La tensione di alimentazione nominale di questo oscillatore è compresa tra 1,8 e 5,5 volt.
Se guardate il video, vedrete che parlo della mia preferenza personale su come gestire il pin "INH" sull'oscillatore; in poche parole, dopo aver verificato che le specifiche siano corrette, tendo a lasciarlo flottante.
Quando si tratta di gestire tali funzioni, tra le ragioni che mi sono venute in mente c'è la mia avversione a collegare i pin di ingresso direttamente alle linee di alimentazione (se possibile). In altre parole, preferisco utilizzare resistori in serie per limitare la corrente durante i transitori, anche quando non dovrebbe essere necessario.
Nel corso degli anni, ho riscontrato alcuni problemi in produzione (grandi lotti) e, occasionalmente, fenomeni come il riavvio del sistema potevano far sì che i pin collegati direttamente alla linea di alimentazione avessero una tensione superiore a quella del chip stesso, il che è dannoso. Infine, collegando il pin alla linea di alimentazione tramite una resistenza (sia di alimentazione che di massa), si potrebbe cambiare idea e utilizzare il pin in un secondo momento. Questo è particolarmente vero nella mia esperienza con i gate non utilizzati: probabilmente sapete che questi gate non dovrebbero mai essere lasciati flottanti o scollegati. Utilizzando una resistenza di pull-up, è possibile collegare il segnale e utilizzare il gate senza dover tagliare le piste di rame.
Il connettore a 10 pin e alcune resistenze costituiscono il circuito di programmazione. Se tutte le resistenze fossero resistenze di pull-up, userei una rete di resistenze, ma purtroppo una è collegata a massa.
Per programmare un CPLD indipendente di questo tipo, è necessario un programmatore dedicato. Per me è facile dirlo, perché di solito ne ho diversi a portata di mano, ma se non ne avete uno, non sarà troppo difficile iniziare. L'"Altera USB Blaster" approvato costa 50 dollari e può essere acquistato da Digikey e altri rivenditori. Io ho diversi cloni acquistati su eBay, uno dei quali supporta contemporaneamente Altera, Xilinx e Lattice. Su Internet si trova un progetto e del codice che possono essere utilizzati per realizzare un clone personalizzato; lo elencherò nella mia lista di possibili video sul progetto di clonazione dei programmatori. Mostrerò anche il design di uno shield in cui è possibile programmare la scheda madre, Arduino, PIC, ecc.
Il software necessario per compilare e programmare il CPLD è disponibile gratuitamente da Altera, ma questo vecchio componente richiede la vecchia versione 9.1. La buona notizia è che era la mia vecchia versione preferita. Aveva un analizzatore di temporizzazione intuitivo, che però è stato rimosso in una versione successiva.
Il PCB ha un design semplice a doppia faccia, purché il circuito stampato ci stia, tendo a usare il rame per la messa a terra e a volte per l'alimentazione. A volte la colata di rame risulta così irregolare da poter causare problemi o risultati finali approssimativi, quindi la colata di rame è uno strumento, ma va gestita con attenzione.
Oggi, molti (se non la maggior parte) dei software CAD includono viste 3D del prodotto finale, sebbene la precisione delle immagini dipenda dalla precisione dei modelli 3D utilizzati per rappresentare i componenti. Qui potete vedere dove ho scelto il modello 3D per lo zoccolo a 44 pin, il connettore di programmazione e l'oscillatore. Ecco alcuni software 3D che mi piace utilizzare:
Molte aziende dispongono anche di modelli 3D dei propri componenti. Molex è solo un esempio di azienda che ha svolto un ottimo lavoro in questo ambito.
L'errore che ho commesso non influisce sulla funzionalità, bensì sull'estetica, e non è il problema principale, ovvero non è adatto a una breadboard senza saldature singole.
Non appena ho pensato di condividere il progetto con qualcuno, sono rimasto subito insoddisfatto dei simboli schematici del CPLD e della piedinatura del connettore a 40 pin, che rappresenta il suo ingombro complessivo. Ho preso il simbolo di un connettore a doppia fila a 40 pin e l'ho adattato a un ingombro di 1 pollice, ma i numeri dei pin non sono 1, 2, 3, 4... bensì sono numerati da 1 sul lato come in un package DIP 3, 5, 7... proprio come i connettori dei cavi a nastro. Pertanto, l'ingombro non è intuitivo per capire come collegarsi al modulo e per la risoluzione dei problemi.
Allo stesso modo, l'assegnazione dei pin del CPLD è un po' confusionaria e ho utilizzato una serie di utility che si basano sul Boundary Scan Description Language (BSDL) per creare i simboli. La maggior parte dei principali produttori mette a disposizione file BSDL per i propri componenti più diffusi, che consentono di creare simboli e package in modo (semi)automatico. Come qualsiasi automazione, va considerata come uno strumento e potrebbe richiedere ulteriori modifiche per ottenere risultati ottimali. In questo caso, ho lasciato che elencasse i pin in ordine alfabetico, il che risulta quasi casuale quando si tracciano i pin sulla scheda. Posso solo dire che quel giorno ero molto ansioso.
Queste scorciatoie si pagano a caro prezzo. Quando modificherò questo modulo, determinerò e assegnerò una posizione dei pin che corrisponda a quella del componente stesso, in modo che sapere dove posizionare la sonda dell'oscilloscopio sia facile come dare un'occhiata al simbolo nello schema.
Quando si utilizzano circuiti stampati, ci sono altri miglioramenti, principalmente di natura estetica o funzionale. L'indicatore sul pin 1 dovrebbe essere più comune in diversi package e io preferisco sempre un semplice punto di massa per collegare la massa dell'oscilloscopio o il cavo del multimetro. Potrei implementarlo aggiungendo un connettore a due pin in modo che l'alimentazione e la massa possano essere applicate direttamente alla scheda anziché essere collegate ai pin inferiori.
Prima di modificare il circuito stampato, voglio assicurarmi che funzioni correttamente sia dal punto di vista fisico che estetico. Dopo averlo acceso e aver verificato che l'oscillatore funzioni correttamente, ho collegato il programmatore. Sebbene la versione a 3,3 V sia più recente del software di programmazione, ha rilevato il CPLD e lo ha visualizzato come un dispositivo "sconosciuto".
In seguito, ho creato un contatore in Quartus e gli ho assegnato i numeri dei pin. La rapidità di compilazione e download, unita alla funzionalità del contatore visualizzata sull'oscilloscopio, conferma la fattibilità del progetto.
Il circuito di test rapido in Verilog è molto semplice. Il codice è riportato di seguito. È possibile scaricare un file ZIP contenente lo schema e il circuito di test Verilog come progetto Quartus II (richiede la versione 9.1).
Come ho già accennato, effettuerò una seconda revisione del circuito stampato per prestare maggiore attenzione ai dettagli necessari per la condivisione del progetto o per eventuali attività di risoluzione dei problemi. Dato che devo impostare la larghezza del connettore inferiore a 0,9 pollici o meno, posso continuare a impostarla a 0,6 pollici, che è una larghezza standard per un package DIP "largo". In questo modo, i pin inferiori sporgeranno dall'ingombro dello zoccolo del CPLD. Non lo farei in una situazione di produzione perché all'epoca l'assemblaggio era manuale, ma uno degli obiettivi era quello di realizzare un kit per la saldatura manuale. Il compromesso della saldatura manuale è che l'oscillatore deve essere alloggiato in un contenitore SMD a montaggio superficiale, poiché la versione a foro passante è molto grande e di solito non supporta l'intervallo di tensione che desidero.
È possibile utilizzare questi moduli per costruire un computer semplice e completo? Credo di dover aggiungere della memoria.
Lol... sì, dipende dal tipo di computer. Tuttavia, i microcontrollori/microcomputer "veri" sono influenzati dal "pin bonding" del modulo, il che significa che non è possibile ottenere dal modulo una terminologia sufficiente per fare qualcosa di veramente utile.
Ho realizzato un controller completo per la temporizzazione e la modalità di una telecamera NTSC, con una dimensione di soli 64 bit, quindi non è necessario alcun processore.
Il Verilog strutturale e l'HDL utilizzati nel libro Nand to Tetris sono più o meno gli stessi.
Perché i componenti a foro passante? Saldare l'acciaio 0805 è facile! È giunto il momento per ogni appassionato di bricolage di imparare questa abilità.
Se faccio in modo che la presa superiore si sovrapponga ai pin saldati dal basso, allora posso usare "6 centri (simulando un chip a 40 pin) o diagonale, ecc. Questo sarà un componente di saldatura strettamente manuale per saldare i terminali inferiori. La presa superiore dietro i piedi.
Ma per i principianti è difficile saldarlo dal basso. Quando saldo i connettori per il PCB della breadboard (queste schede adattatrici SMD economiche che si trovano su eBay sono perfette per la prototipazione), inserisco i connettori nella breadboard, poi ci appoggio sopra il PCB e a quel punto saldare è facilissimo. È un sistema molto adatto alle breadboard. Se invece bisogna saldare dal basso, è ancora più difficile.
Se il CPLD si trova al centro (potrebbe essere più facile da cablare), può essere installato in diagonale senza sovrapposizioni, ci sono 4 file, oppure il CPLD può essere posizionato su un lato:
Grazie per il consiglio di inserire il connettore nella breadboard prima di saldare. Il mio è un po' instabile.
Che ne dite di utilizzare i pin della breadboard in formato DIP da un lato e lo zoccolo del chip di tipo "dongle" dall'altro? Il chip può essere appeso all'estremità della breadboard. Il percorso dei componenti sarà compatto.
|####### ******************** |. Sì, ho deciso di usare la versione "gratuita" di Altera, proprio come fanno Xilinx e Lattice. Devo concludere il ciclo con Al Williams per capire cosa supporta effettivamente la versione open source, il che deve includere gli attributi specifici della serie di dispositivi. Detto questo, ho già fatto molto con la versione gratuita.
Sì, stai mostrando che il CPLD si sovrappone ai pin, credo. Se ho capito bene, potrebbe sembrare la revisione 2. Quando progetto per la produzione (di massa), sono sempre allergico alla fase di "assemblaggio con saldatura manuale" perché si sovrappongono (in realtà i pin di saldatura sul lato non del componente). ) È già un componente saldato a mano) ma questo è solo un piccolo kit, non un progetto orientato alla produzione. Ho solo alcune abitudini di cui è difficile liberarsi alla mia età. 
Penso che una scheda a circuito stampato a forma di T con CPLD e componenti passivi, dotata di una larga parte a T, sarebbe molto utile se fissata al bordo della breadboard. Qualcosa di simile all'Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). In questo modo si libererebbe gran parte della superficie della breadboard.
Purtroppo, l'interruzione della produzione limiterà fortemente il suo utilizzo in progetti collaterali, proprio come è successo a tutti quei generatori di funzioni basati su XR2206 e ICL8038.
Idea interessante. Mi piacciono questi due chip. Il CPLD non è obsoleto, è solo un modo più economico per acquistarlo a 3,3 V.
Riguardo alle tue "sciocchezze"... in realtà non hai creato un nuovo layout per metterlo sulla breadboard. Hai semplicemente messo prima il filo sulla breadboard e poi il CPLD sul filo. Oppure, se puoi staccare le strisce di alimentazione e massa da una delle breadboard, usane due.
A proposito di Altium ed Eagle. Hai considerato KiCad? Non ha alcuna limitazione che ti impedisca di preferire Altium ad Eagle e, di default, genera errori DRC per tutti i pin non collegati. Se vuoi davvero aprire un pin, devi specificarlo. (Forse solo per gli ingressi, non per le uscite, e non è ancora stato verificato). Un altro grande vantaggio è che è molto facile da imparare. Mi ci è voluto solo un pomeriggio e l'eccellente manuale introduttivo mi ha aiutato a iniziare.
Preferisco i componenti SMD (con la parte più grande) sopra il foro passante. Sono più facili da usare. Non è necessario ruotare continuamente il PCB (alcuni errori stupidi sono stati commessi a causa della simmetria...). E non è necessario tagliare il terminale della resistenza. Quando si condivide un progetto, più componenti possono essere posizionati comodamente su un PCB o su un singolo componente. Resistore SMD TH (rende il layout un po' più complicato).
Ho utilizzato la guida "KiCad Getting Started" in formato PDF. La vecchia versione che ho usato è di 29 pagine, mentre l'ultima ne ha 52. Puoi trovarla in altri tutorial (inclusi i link ai video): http://kicad-pcb.org/help/tutorials/
So che [Chris Gemmell] di Hackaday e The Amp Hour ha realizzato una serie di tutorial su KiCad: http://kicad-pcb.org/help/tutorials/
KiCad potrebbe essere utile, vediamo cosa succede nella Rev 2. Grazie per i suggerimenti. Gli ingressi non collegati sono un bene per DRC (ERC) e per i connettori e altri elementi che li mantengono "soft" o I/O; in genere, la maggior parte dei messaggi di disconnessione CAD può essere evitata.
Esegui un test rapido e inserisci il connettore in un tavolo vuoto, esegui le annotazioni e il DRC. Mi ha dato errori DRC per ogni pin. Tuttavia, contrassegnare i pin notoriamente non collegati è molto semplice.
Impostato su passivo. Devo cercare (Modifica componente -> Modifica con editor di libreria. L'editor di libreria apre e carica il componente in una finestra separata, è possibile controllare o modificare qualsiasi parte del componente. Il componente modificato può essere salvato o aggiornato nel tuo schema. Questo rende molto facile modificare i componenti. Non mi interessa molto la libreria. Ad esempio, se usi cpld, vuoi assegnare nomi significativi ai pin. Ancora più importante, c'è una buona interfaccia per progettare i tuoi componenti.
Nel sistema ERC di KiCad, i pin "non collegati" sono di un tipo diverso rispetto ai "pin passivi" e tutti i pin "non collegati" generano errori. Il funzionamento dell'ERC può essere facilmente personalizzato in base alle proprie preferenze: Strumenti -> Verifica delle regole elettriche -> Opzioni.
Data di pubblicazione: 18 novembre 2021





