2020/06/17

Prova simulazione di un 4051 in VHDL

Ho provato un po’ di VHDL. Ho scritto quello che fa il 4051, e l’ho “provato”. La simulazione alla fine genera un file VCD (value change dump) che ho guardato con gtkwave. L’immagine seguente è la cattura del risultato.

Si vede che quando INH è alto, l’uscita è “flottante”, credo si possa dire così. In VHDL ho usato “Z”, il che significa che quel filo può essere pilotato da un altro segnale (per esempio l’uscita di un altro 4051), consentendo una logica tri-state.

Quando è basso, cioè il 4051 non è inibito, il “selettore” (gli ingressi A, B e C) fa uscire alto solo in corrispondenza degli unici due segnali che sono alti, quelli sui “bit” 3 e 5; infatti il vettore (bus?) X d’ingresso è stato valorizzato con 00101000, ovvero

  • X0 = 0
  • X1 = 0
  • X2 = 0
  • X3 = 1
  • X4 = 0
  • X5 = 1
  • X6 = 0
  • X7 = 0

In realtà il 4051 non è un vero 4051: il mio 4051 gestisce solo segnali digitali — per questo nel file ho messo D come suffisso (una notazione non standard, ovviamente, e che collide con quanto già avviene con tutt’altro significato a me ignoto; p.es. la sigla del 4051 sulla breadboard è V4051D, ma quella D non significa che il mio abbia qualcosa a che fare con quello!)

Per fare un 4051 “vero” bisogna mischiare segnali analogici e digitali nella stessa simulazione. Per il VHDL esiste una estensione allo scopo (AMS); non è chiarissimo quant’è buono il supporto in ghdl. E poi probabilmente bisogna integrare il tutto con ngspice, che pure dovrebbe consentire la simulazione di circuiti in cui ci sono segnali digitali e analogici; e, alla fine, serve simulare il µC, magari con simavr… Lo scopo è riuscire a simulare interamente il sintetizzatore, codice incluso…1

Nel sintetizzatore i segnali analogici sono quelli che vengono dai potenziometri (viene usato l’ADC dell’ATmega 328P per convertirli in valori digitali); non ci sono altri input analogici. L’uscita che usa la PWM penso che vada comunque considerata digitale, anche se in realtà si comporta (all’incirca come) un’uscita analogica audio.

Risorse

Open cores

Per cose più serie in VHDL (e/o altri HDL): opencores.org.


  1. Preferirei riuscire a far funzionare il pezzo vero. Per ora sto cercando di capire come funziona in teoria. Per la pratica: ho individuato l’uscita audio, ma non come papà alimentava tutto l’accrocchio. Inizio a sospettare che alimentasse l’alduino nano con l’USB e che da questo fosse poi derivata l’alimentazione per tutto il resto. Però significa pure che ricordo male: quando staccava l’aggeggio per metterlo a riposo doveva staccare due “cose”, cioè l’uscita audio e l’alimentazione, e invece io ricordo solo un movimento per staccare il filo che porta all’ingresso AUX dello “stereo”.↩︎

  2. Su github esiste questo ma non è chiaro il legame con l’originale, se sono gli sviluppi “GNU” su github (che vanno verso gtk3) o è un’iniziativa indipendente, come la mia — che manterrò gtk2: non mi interessa aggiornarlo. Il motivo primario del “fork” è modificarlo per poter gestire l’altezza dei segnali. Per ora ho già realizzato una modifica zozza (non committata) che aggiunge la configurazione signal_height_mag con cui si può ingrandire l’altezza dei segnali senza modificare il font — ma visto che questa è legata all’altezza del font, i segnali elencati “ballano” in troppo spazio (con effetto estetico brutto).↩︎

Nessun commento:

Posta un commento

Commenta solo per dare un contributo utile, una critica costruttiva o fare un'osservazione acuta. Non commentare solo per dire che esisti anche tu o che ti piace o dispiace quello che hai letto e visto su questo blog.