Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 75
i
i
“MF_Tesi” — 2011/9/12 — 11:39 — page 75 — #75
i
5.6. LIBRERIE UTILIZZATE
i
75
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 elaborazione. L’unica difficoltà che si
affronta durante l’utilizzo di questo tipo di modulo è la difficoltà 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.
2
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 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 interfaccia superiore.
Una volta che la BRAM è stata istanziata abbiamo a disposizione i metodi
presenti nell’interfaccia di BRAM_PORT.
1
interface BRAM_PORT#(type addr, type data);
method Action put (Bool b, addr a, data d);
method data read();
endinterface
i
i
i
i