mikrocontroller.net

Forum: FPGA, VHDL & Co. Handling von mehreren BRAMs als ein Memory-Block


Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie würdest Du diese BRAMs dann genau einbinden/instanzieren?
-> Datenausgabe über einen großen MUX mit 5 Eingängen (Ausgänge der 5 
BRAMs) und einem Ausgang?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann der core generator nicht was entsprechendes erzeugen?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müsste gehen, Quartus macht das auch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.