Tesi Robotica Analisi, progettazione e implementazione... | Page 98
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 98 — #98
i
98
i
4. VERILOG E BLUESPEC SYSTEMVERILOG
Algoritmo 4.8 Interfaccia BRAM_DUAL_PORT
1
2
3
4
interface BRAM1Port#(type addr, type data);
interface BRAMServer#(addr, data) portA;
method Action portAClear;
endinterface: BRAM1Port
semplice Array bidimensionale di registri collegati a 1/2 porte di lettura/scrittura, se l’implementazione non è scritta correttamente il sintetizzatore in fase
di sintesi non è in grado di inferire questo Array come BRAM e di conseguenza
andrà ad occupare spazio libero per il disegno dell’hardware con una grande
mole di registri. Per fortuna l’implementazione fornita è scritta in modo tale da
poter essere sempre inferita nel modo corretto, questo a meno che non si occupi
uno spazio talmente esiguo da preferire la sintesi su spazio per il disegno del
circuito allo spreco di una delle BRAM.
Una memoria di questo tipo è molto veloce, non veloce 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. Nell’utilizzo di questo componente risiede il notevole miglioramento effettuato dalla
prima release alla seconda.
Mentre nella release 1 veniva usato il modulo BRAM_DUAL_PORT contenuto nel
package BRAMCore, per la release 2 si è preferito passare alle più raffinate
BRAM1Port presenti nel package BRAM. La differenza principal e fra questi due
moduli sta nel numero di porte che utilizzano e come avvengono letture e scritture, infatti mentre la BRAM_DUAL_PORT possiede due porte di lettura e scrittura
la BRAM1Port ne possiede solo una, questo miglioramento è stato possibile grazie
a buone osservazioni fatte sull’algoritmo che in seguito verranno spiegate. Inoltre le BRAM1Port al contrario di tutti moduli presenti nel package BRAMCore
posseggono delle FIFO di ingresso/uscita delle richieste di scrittura/lettura a
tutto vantaggio dell’asincronicità del circuito.
Come si può ben vedere dall’interfaccia (Alg:4.8) per istanziare questo modulo
è necessario sapere il formato dell’indirizzo e il formato del tipo di dato, ad esempio si potrebbe 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). Nell’interfaccia è possibile notare la dichiarazione di una sotto interfaccia BRAMServer e il
metodo che consente di pulire la coda delle richieste.
i
i
i
i