VHDL open, ovvero GHDL

Ultimo aggiornamento
15lug14 – ripristinato esempio completo VHDL
27gen13 – rimosso link non raggiungibile per makefile (grazie Carmelo della segnalazione!)

Se per necessità, dovete scrivere in linguaggio VHDL sotto linux, senza caricare IDE proprietari, per effettuare semplicemente delle simulazioni a livello logico, vi consiglio GHDL; compilatore OpenSource scritto in Ada e basato sull’architettura di GCC.

GHDL – sito ufficiale

Il pacchetto porta con se semplicemente il compliatore GHDL e un simulatore logico, con uscita in vari formati su un file di testo.

I risultati del simulatore possono essere visualizzati “per umani” grazie a GTKwave, applicativo grafico in grado di rappresentare le forme d’onda dei vari segnali (“waveform viewer”) a partire da un file di testo ASCII.

Come

Per utilizzare GHDL è necessario semplicemente effettuare il downoload del pacchetto

Per Debian/Ubuntu

sudo apt-get install ghdl

è sufficiente, per le altre distribuzioni rimando alla compilazione dei sorgenti presenti sul sito indicato sopra (non ci sono particolari problemi di compilazione, uniche dipendenze sono legate alle librerie del GCC, che sono sempre presenti su una macchina linux).

E’ disponibile una versione precompilata anche per Win (non l’ho testata).

L’Editor

Questo è l’unico passaggio di installazione, a questo punto la nostra macchina è pronta a comprendere e simulare codice VHDL! …ehm, ma dove lo scrivo?

Direttamente da gedit! Mi spiego meglio. ghdl è un eseguibile a riga di comando e non porta con se alcun IDE di programmazione o interfaccia grafica; il codice lo possiamo scrivere con un qualsiasi notepad (consiglio valido anche per gli utilizzatori di Win).

Una volta scritto il codice, rinominiamo il file con estensione .vhd a questo punto siamo pronti per darlo in pasto al compilatore.

Il compilatore

E’ possibile controllare totalmente ghdl da riga di comando, personalmente preferisco utilizzare una sorta di script, il quale gestisce la compilazione (con le opportune configurazioni) e le opzioni di simulazione in automatico.

Sfrutta l’onnipresente make e un semplice elenco di passaggi da fare, inseriti in un file denominato Makefile, che deve essere posizionato nella cartella dove noi inseriamo il file con estensione vhd.

Una volta invocato make, nella directory viene cercato un file denominato appunto Makefile, in grado di istruire l’applicativo sulle operazioni da eseguire; il file in questione l’ho preso qui (link originale non raggiungibile) copia locale qui.

OK, siamo pronti per utilizzare GHDL..

Iniziare a lavorare con GHDL

Completata l’installazione, è arrivato il momento di testare il funzionamento del tool; i successivi passaggi non sono direttamente collegati all’utilizzo del GHDL, ma a come è stato scritto il Makefile che andremo ad utilizzare (nulla vieta di utilizzare i comandi per il ghdl direttamente da terminale)

  • Creazione della una cartella del progetto (il nome non è importante)
  • Copia del Makefile all’interno della cartella
  • Creazione di due sub-directory src (per i sorgenti dei moduli) e testbench (per i vari testbench effettuati)

Nota: mentre il nome dei moduli è ovviamente a discrezione, i file di testbench devono essere nel formato “nomemodulo”_tb.vhd e la entity definita all’interno abbia lo stesso nome del file (escluso il .vhd)

Per intenderci:

adder_tb.vhd è il nome del file di testbench, all’interno dovrà contenere l’entity adder_tb

In modo da poter mantenere il progetto è utile creare un file “nomemodulo”.vhd per ogni entity utilizzata (il progetto è facilmente gestibile da più persone ed è più comprensibile).

Esempio: Full Adder a N-bit

I file per il test sono contenuti direttamente in questa cartella (per problemi di visualizzazione ho rimosso il codice HDL da questa pagina) assieme al makefile.

Nella cartella i file sono distribuiti in modo che il Makefile possa trovarli: src per i sorgenti dei moduli, mentre in testbench la entity di test. Se mantenete la stessa struttura, non serve modificare il makefile.

Aprite il terminale e saltate nella directory del progetto, da li se si vuole solo compilare il progetto

make compile TESTBENCH=adder_tb

se si vuole lanciare la simulazione:

make run TESTBENCH=adder_tb

mentre se si vogliono vedere i risultati della simulazione:

make view TESTBENCH=adder_tb

Naturalmente esiste un ulteriore comando che riassume i tre precedenti (o meglio li esegue in sequenza da solo)

make all TESTBENCH=adder_tb

Se tutto è corretto, si aprirà una schermata di gtkwave, dove attraverso il trascinamento col mouse si possono vedere le varie forme d’onda dei segnali (ovvero dei signal e dei pin interni ai moduli).

Sguardo al Makefile

All’interno sono elencati i vari passaggi in sequenza forniti in pasto al GHDL, più alcune impostazioni utili nell’utilizzo del simulatore tra le quali:

GHDL_FLAGS  = --ieee=synopsys --warn-no-vital-generic

dove è possibile passare al GHDL le impostazioni relative al set IEEE da utilizzare, il controllo dei warning in uscita dalla compilazione (è possibile attivare un verbose-mode oppure un “mute”) e specifiche riguardanti l’utilizzo di librerie Vital per la stima dei ritardi delle porte.

GHDL_SIM_OPT = --assert-level=error
 
GHDL_SIM_OPT = --stop-time=5000ns

In questo caso è possibile specificare le condizioni di uscita della simulazione, in base al tempo oppure alla presenza di errori durante il calcolo (vedi manuale GHDL).

Importante: l’indentazione nel Makefile è permessa solo con TAB, mentre non vengono riconosciuti gli spazi!! (sintassi del make) – per approfondire, leggete qui

Link utili

GHDL – sito ufficiale

Guida all’utilizzo del GHDL e Makefile – Ubuntu Electronix Remix

GTKWave

Questa voce è stata pubblicata in Tech Corner e contrassegnata con , , . Contrassegna il permalink.

3 risposte a VHDL open, ovvero GHDL

  1. Davide scrive:

    Ciao Luca, scusa se ti disturbo ma avrei un piccolo problema con il Makefile (suppongo). Nel momento in cui uso il comando “make all TESTBENCH=adder_tb”, nonostante vengano analizzati i file di testbench e non, risulta il seguente errore:

    mv: impossibile eseguire stat di “CLA8b_tb”: File o directory non esistente

    Non sono particolarmente esperto in script del genere, ma il problema sembra proprio essere del Makefile, in particolare nell’istuzione:

    @mv $(TESTBENCH) simulation/$(TESTBENCH)

    Non avendo dimestichezza col linguaggio, non so proprio come risolvere il problema. Se potessi darmi una mano te ne sarei grato. Buona serata.

    • admin scrive:

      Ciao,
      la riga di testo del makefile “incriminata” si occupa solo di spostare i file generati o linkati dal compilatore nella sottocartella simulation..
      Se puoi inviarmi il sorgente di adder e il relativo testbench provo a vedere sul mio se fornisce qualche errore, perchè cosi a prima vista potrebbe sembrare la mancanza di un file di libreria..

      • Davide scrive:

        Per aggirare il problema ho dovuto effettuare la simulazione su una piattaforma windows, senza alcun errore di compilazione, ottenendo il risultato corretto, per cui il problema deve essere interno al programma… se comunque vuoi vedere i file dimmi dove spedirli e provvederò. Grazie della risposta.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *