Handling von mehreren BRAMs als ein Memory-Block

Gast #1016148
Lesenswert?

Ich möchte in einem Spartan II mehrere BRAMs mit jeweils 4096 Bit in 
einen zu adressierenden Speicherbereich zusammenfassen und darauf mit 
einem 16 Bit breitem Datenbus zugreifen.

Dabei verwende ich folgende Syntax:
TYPE ram_type IS ARRAY (5 * 256 - 1 downto 0) OF std_logic_vector (15 
downto 0);

Damit lassen sich mehrere BRAMs in einen zu adressierenden 
Speicherbereich zusammenfassen, allerdings nur 1, 2, 4 oder 8 BRAMs zu 
einem Speicherbereich.

In meiner Applikation möchte ich jedoch 5 BRAMs (mehr habe ich für diese 
Funktion nicht mehr zur Verfügung) in einen Speicherbereich 
zusammenfassen. Mit der oben angegebenen Syntax verwendet er hierfür 
jedoch 8 BRAMs anstatt den nur 5 benötigten BRAMs.

Kann mir jemand von Euch helfen, wie ich dies einfach handeln kann, dass 
die ISE nur so viele BRAMs verwendet wie sie für die geforderte 
Speichergröße benötigt (aufgerundet auf volle BRAMs)?

Freue mich auf Eure Rückmeldungen :-)
#1016178
Lesenswert?

ISE hat wohl ein Problem damit, dass bei 5 Bloecken der Adressvektor 
ungültige Werte annehmen könnte. (Vielleicht aber auch eine 
Hardware-Beschränkung beim Zusammenschalten mehrerer Blöcke?)


Nimm 5 einzelne kleine Arrays und steuere die read-Signale entsprechend 
der oberen Bits der Adresse.
#1016342
Lesenswert?

Genau, alle parallel mit 8bit Adressbus anschliessen. Je nach den oberen 
drei Bit deiner 11bit Adresse setzt du dann das jeweilige write Signal. 
Und am Ende einen 5:1-Multiplexer der auch aus den oberen 3bit den 
jeweiligen Eingang auswaehlt.
Und dann entsprechend 5 mal einen kleinen RAM-Block instanziieren, so 
wie du das wohl jetzt schon machst mit dem einen grossen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren