Domanda

Ho sempre voluto creare il mio microprocessore .. Ho letto Come posso creare il mio microcontrollore? .

Ho provato più volte a imparare alcuni Verilog e VHDL. Ma per la mia vita non riesco proprio a orientarmi negli stili linguistici. Vengo da un background C / C ++ / C # e mi sono dilettato un po '(con successo) nel fare la programmazione funzionalista con Ruby.

Qualcuno può suggerire un libro o una risorsa online per insegnare una lingua HDL da zero (in modo da poter disimparare il mio modo di pensare procedurale)

Inoltre, ho problemi a capire esattamente come simulare un programma HDL. Non c'è niente come la stampa o roba nell'hardware, quindi qual è il modo migliore per testare i programmi senza un FPGA (ne ordinerò uno di questi a volte!). Come funziona esattamente la simulazione?

Fondamentalmente ho solo bisogno di qualcuno che mi aiuti a orientare gli HDL e la loro simulazione.

È stato utile?

Soluzione

Ricorda, le HDL erano progettate per modellare l'hardware. Con l'hardware tutto accade in una volta. Per hardware, intendo una raccolta di porte logiche collegate agli ingressi e alle uscite di altre porte logiche in qualche modo. Questo è essenzialmente ciò che è un FPGA o un ASIC (in un FPGA tali connessioni sono programmabili). Scuoti un input e gli effetti si propagano attraverso la catena di gate logici: pensa a ogni gate logico come a un piccolo processore che valuta costantemente i suoi input.

Quindi in un HDL la prima cosa che devi considerare è che tutti gli incarichi stanno avvenendo contemporaneamente. L'unico posto in cui accadono le cose nella "normale" sense (un'istruzione che ne segue un'altra come in un normale linguaggio di programmazione) si trova all'interno di un blocco di processo (in VHDL, o un blocco sempre in Verilog). Ma poi devi capire che tutti i blocchi di processo (o sempre blocchi in Verilog) vengono eseguiti contemporaneamente.

Gli HDL stanno solo cercando di modellare la concorrenza dell'hardware.

Per quanto riguarda i libri che cercano di insegnare gli HDL agli sviluppatori di software ... Non credo che ce ne siano. La maggior parte sono rivolti agli ingegneri hardware.

Hai detto di aver fatto una programmazione Ruby. Se vuoi giocare con un HDL scritto in Ruby puoi provare RHDL: http://rhdl.rubyforge.org/ I concetti di base dell'HDL sono presenti e assomigliano molto al VHDL, ma è Ruby, quindi puoi sperimentare un po 'di più con le viscere. È possibile scrivere modelli e quindi simularli. Ci sono alcuni esempi inclusi.

Altri suggerimenti

Il debug viene eseguito con il simulatore e il suo visualizzatore di forme d'onda: puoi vedere cosa fanno tutti i tuoi interni nel tempo. Inoltre, con Modelsim è anche possibile eseguire punti di interruzione simili a software all'interno dei processi.

Puoi stampare cose con VHDL usando il " report " , ma devi eseguire la formattazione in modo molto non SW:

report " Il valore non è " & Amp; integer'image (some_integer_variable);

Per una stampa un po 'più semplice, utilizzare il pacchetto textio .

Un altro suggerimento: un sacco di codice là fuori contiene usa ieee.std_logic_arith.all; in esso. Quella libreria non è standard (nonostante il moniker IEEE), usa invece ieee.numeric_std.all .

Inizia semplice: crea un contatore che aumenta di uno ogni volta che il tempo passa (usa il se rising_edge (clk) quindi idioma). Quando il contatore raggiunge un determinato valore, attiva o disattiva un segnale.

Crea un banco di prova per simularlo, che in pratica significa semplicemente far andare il segnale clk '0', '1', '0', '1'.

Un modo facile da capire è questo:

process:
begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1'; 
    wait for 5 ns;
end process;

Esegui la sim, guarda il tuo contatore salire e il segnale di attivazione / disattivazione attiva. Se rendi il tuo contatore abbastanza grande, puoi quindi creare un FPGA e guardare un LED che si accende e si spegne collegando il segnale di commutazione a un pin LED.

Questo è l'equivalente FPGA di " Hello World " ;!

Per il debug Verilog offre attività di sistema simili a printf come $ display o $ monitor. Questi ovviamente non sono sintetizzabili, ma ogni simulatore dovrebbe capirli. Il debug quindi viene eseguito da un lato, proprio come il debug del SW, stampando i valori del segnale e qualsiasi altra cosa sulla console utilizzando il già citato $ diplay e cose simili. E d'altra parte fissando le forme d'onda del segnale fino a trovare il punto negativo. Per queste cose non hai nemmeno bisogno di un FPGA, un buon simulatore è tutto ciò di cui hai bisogno. Ma avere un FPGA per far lampeggiare alcuni LED è sempre bello :)

Per la simulazione dovresti dare un'occhiata a Modelsim. Se sei su Windows, c'è una versione per studenti disponibile gratuitamente.
http://www.model.com/content/modelsim- pe-studente-edizione-hdl-simulazione

Un'altra opzione è il Web-Pack ISE di Xilinx. Funziona anche su Linux e include il flusso FPGA completo. http://www.xilinx.com/tools/webpack.htm
Ma raccomando Modelsim per la simulazione.

Alcuni punti di partenza che ho a portata di mano sono:
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/

La mia risposta potrebbe essere in ritardo di anni, ma questo è per i futuri spettatori che potrebbero avere la stessa query.

Vengo anche da uno sfondo C ++ / C #. La mia risposta riguarda solo Verilog HDL e non VHDL. Attualmente sto seguendo un corso con questo termine e qui ci sono i libri che mi hanno aiutato a capire meglio Verilog:

Puoi trovare molti libri qui come elencati in asic-world .

Come aveva risposto skorgon, è possibile utilizzare Xilinx ISE per la simulazione. È il più vicino a Visual Studio con C ++ / C # rispetto a Verilog. Ma per un primitivo (senza IDE), potresti provare iVerilog o Icarus Verilog . È quello usato nel nostro corso. Ecco come eseguire i file Verilog usando iVerilog:

Digita il tuo codice su un editor di testo, salva come .vl nella cartella bin     di iVerilog. Al prompt dei comandi, vai alla cartella bin. Quindi digitare quanto segue:

iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>

Esempio:

iverilog -o samp sample.vl
vvp samp

Spero che questo aiuti!

A volte è necessario stampare il nome dell'istanza. Ciò è utile se in un progetto vengono utilizzate molte istanze dello stesso componente: " ... Mentre è semplice in VERILOG (% m nella funzione del sistema di visualizzazione), in VHDL è richiesta una scrittura un po 'più di codice. $ display (" dbg nome istanza% m in% d " ;, $ time); Un esempio di come stampare un nome di istanza in systemc è disponibile anche su questo sito.

L'importanza di tali informazioni di debug è quando un progetto contiene molte istanze dello stesso componente.

È necessario chiamare la prima libreria IO di testo e dichiarare la variabile di linea. Fare riferimento all'esempio di stampa per vedere i dettagli.

Successivamente devi selezionare tra due opzioni: una è: nome istanza solo nella stringa di debug e l'altra opzione fornisce maggiori informazioni come nomi di voci e architetture ... " http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.html

Se sei forte nella programmazione in C, puoi imparare qualsiasi altro linguaggio di programmazione molto facilmente. I linguaggi di descrizione dell'hardware non sono molto diversi. Ma devi conoscere le basi dei componenti hardware comunemente usati. Ad esempio, la progettazione di un full adder è molto semplice se conosci quali sono gli input e gli output dell'intero sommatore. Inoltre è necessario conoscere la relazione tra input e output. Il pdf può essere utile per un principiante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top