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