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