Tesi Robotica Analisi, progettazione e implementazione... | Page 99

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 99 — #99 i 4.2. BLUESPEC i 99 Una volta che la BRAM è stata istanziata si hanno a disposizione anche i metodi della sotto interfaccia BRAMServer, definita attraverso la seguente riga di codice: 1 typedef Server#(BRAMRequest#(addr, data), data) BRAMServer#(type addr, type data); La richiesta deve essere di tipo BRAMRequest, una semplice struttura che definisce vari parametri quali l’azione da compiere (lettura/scrittura), l’indirizzo in cui compiere l’azione e l’eventuale dato da scrivere. Questo permette di accedere ai metodi dell’interfaccia Server (Alg:4.9). Algoritmo 4.9 Interfaccia Server 1 2 3 4 interface Server#(type req_type, type resp_type); interface Put#(req_type) request; interface Get#(resp_type) response; endinterface: Server Il metodo Put inserisce le BRAMRequest all’interno di una coda di richieste, queste vengono eseguite nello stesso ordine in cui arrivano grazie ad una coda di tipo FIFO, stesso discorso vale per il metodo get che preleva da una FIFO di uscita i risultati delle richieste da effettuare, da notare che è necessario un ciclo di clock di attesa per ottenere il risultato di una lettura. Venendo quindi al lato pratico è necessario prima di tutto istanziare la BRAM1Port, per prima cosa bisogna notare che il costruttore richiede una strutture di tipo BRAM_Configure, tale struttura è definita all’interno del package stesso e presenta la seguente forma: 1 2 3 4 5 6 7 typedef struct { Integer memorySize ; Integer latency ; // 1 or 2 can extend to 3 LoadFormat loadFormat; // None, Hex or Binary Integer outFIFODepth; Bool allowWriteResponseBypass; } BRAM_Configure ; si può osservare nel dettaglio le dimensioni del numero di elementi che devono essere presenti nella memoria, la latenza, il formato di caricamento e le dimensioni della FIFO di uscita. Passando questo tipo di oggetto al costruttore i i i i