Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 29
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 29 — #29
i
2.1. COSTRUTTI PRINCIPALI
i
29
fra i processi e gli elementi, possiamo notare il codice BSV e il processo di
compilazione. Per quanto riguarda le connessioni sono presenti varie modifiche:
1. La fase di unione del file dei vincoli e quello del codice avviene all’inizio
durante al compilazione, questo per preservare il codice RTL dall’onere di
dover essere sintetizzato in modo sempre diverso;
2. Tutte le simulazioni avvengono al livello del codice BSV permettendo così
una volta eseguita la sintetizzazione si sapere in anticipo se il programma
funzionerà o meno.
In breve, il codice BSV non è altro che un linguaggio di più alto livello per la descrizione hardware, questo linguaggio una volta compilato restituirà del codice
HDL, più precisamente Verilog, permettendo inoltre di eseguire simulazioni attraverso eseguibili ottenuti da codice C++. Ovviamente, nel caso fosse necessario, una volta ottenuto l’RTL sarà ancora possibile eseguire delle simulazioni
come fatto nel diagramma di flusso originale, questo a indicare quanto BSV sia
uno strumento additivo al campo dello sviluppo senza così impedire attività
preziose come le simulazioni delle reti logiche.
2.1
Costrutti principali
Essendo un linguaggio di alto livello molto simile al C++ i costrutti base risultano molto familiari. Possiamo avere infatti: if, if else, for, method, package,
ecc. Ciò che lo rende invece più simile a linguaggi di descrizione hardware sono
i costrutti: rule e module. Come primo esempio portiamo il caso di un “Hello
World!” un po’ modificato.
Ogni file deve definire un package (Hello) e al suo interno definire almeno
un modulo (mkHello) che implementi l’interfaccia dichiarata (Hello_Ifc), nello
stesso package inoltre possiamo avere tanti moduli quanti sono necessari.
In ogni modulo è possibile definire molti costrutti, fra i più importanti ci sono le
regole (rule) e i metodi (method). Le rule vengono eseguite a ogni ciclo di clock,
in questo caso avremo che la stringa “Hello World!” verrà stampata ad ogni
ciclo di clock. I method devono essere implementati a seconda dell’interfaccia,
così come accadrebbe in un normale linguaggio di programmazione ad oggetti e
possono essere di tre Tipi:
i
i
i
i