Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 34

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 34 — #34 i 2.2. LIBRERIE UTILIZZATE i 34 Package BRAMCore Il package BRAMCore fornisce tipi, interfacce e moduli per supportare le BlockRam presenti sull’FPGA. La particolarità di questa classe sta nel fatto che durante il processo di sintesi questa non venga a far parte del disegno fisico della fetta di silicio contenente le celle logiche, ma venga mappata in una delle RAM presenti ai margini della board. Si tratta di memorie veloci, non veloci quanto una cache ma di sicuro più efficienti di una normale DRAM presente in qualsiasi computer, questo però comporta un costo elevato e quindi una quantità ridotta. Nel package vengono definiti vari moduli, per il progetto BRAM_DUAL_PORT è stato l’unico utilizzato, il quale consente di scrivere e leggere dalla memoria attraverso ben due porte, in pratica è possibile eseguire due operazioni di scrittura o lettura sulla stessa ram nello stesso ciclo di clock grazie alla porta a e alla porta b, aumentando così la velocità di processazione. L’unica difficoltà che si affronta durante l’utilizzo di questo tipo di modulo è la complicatezza della lettura, questa non può avvenire in meno di due cicli di clock. In un primo momento è necessario inoltrare la richiesta di lettura e solo successivamente quel valore potrà essere utilizzato. Algoritmo 2.4 Interfaccia BRAM_DUAL_PORT 1 2 3 4 interface BRAM_DUAL_PORT#(type addr, type data); interface BRAM_PORT#(addr, data) a; interface BRAM_PORT#(addr, data) b; endinterface Come si può ben vedere dall’interfaccia (Alg:2.4) per istanziare questo modulo è necessario sapere il formato dell’indirizzo e il formato del tipo di dato, ad esempio potremmo avere una RAM con indirizzo di tipo Bit#(5), e quindi poter indirizzare fino a 32 locazioni da 0 a 31, e tipo di dato Bit#(10). Le due porte sono due sotto-interfacce di tipo BRAM_PORT che necessitano degli stessi parametri della sopra interfaccia. Una volta che la BRAM è stata istanziata abbiamo a disposizione i metodi presenti nell’interfaccia di BRAM_PORT (Alg:2.5). Il metodo put attraverso il flag b determina se ci si trova di fronte ad un scrittura (True) oppure ad una richiesta di lettura (False) all’indirizzo passato come argomento, il parametro data ha senso solo nel caso di una scrittura. i i i i