Hallo, ich habe 32 Blockrams (Xilinx, Simple Dual Port) mit den gleichen Speicherbreiten und -tiefen. Kann ich die alle an den gleichen Lese Daten- und Adressbus hängen und jeweils nur mit dem Readenable Signal steuern? Es wird auch immer nur von einem RAM gelesen und das Beschreiben kann auch sequentiell erfolgen. Will damit Leitungen, Signal und VHDL Code sparen. Kann ich auch andere Blockrams an den gleichen Bus hängen, die total andere Speicherbreiten und -tiefen besitzen? Diese haben mehr oder auch weniger Leitungen für die Adresse/Daten. Vielen Dank für eure Hilfe Martina
Nein, kannst Du nicht. Das ergibt einen internen Bus, der aber im FPGA nicht implementiert werden kann. Außerdem werden die Ausgänge des Blockrams nicht hochohmig. Du musst einen Multiplexer nachschalten.
Ok, danke. Die Rams haben keinen Tristate-Ausgang... Schade. Aber mit einem Multiplexer spare ich ja nicht wirklich Signal und damit VHDL-Code. Jedes RAM muss ja mittels Signal an den Mux angeschlossen werden. Also würde ich "nur" Leitungslänge auf dem FPGA sparen?
Die Leitungslänge im FPGA interessiert niemanden, das hängt sowieso vom Placement ab. Letztentlich ist nur entscheidend ob Du deine Geschwindigkeit erreichts, und das hängt auch von anderen Faktoren ab. Kannst Du nicht die Blockrams zu einem zusammenfassen, wenn eh nur immer von einem gelesen/geschrieben wird?
ja, ich werde jetzt wohl die Rams mit den gleichen Breiten und Tiefen zusammenpacken. Dann gibts halt ein großes. Bei denen mit verschieden Wort- und Adresslängen bleibt mir dann nichts anderes übrig, als viele Signal zu deklarieren. Kann man denn Signale in einer extra Datei extern deklarieren? sonst wird mein Hauptfile so unübersichtlich.
@ Martina M.: > Kann man denn Signale in einer extra Datei extern deklarieren? Ja. Dafür kann man in VHDL elegant packages und records verwenden. Duke
Für die 'Optimierung' viel entscheidender als die Anzahl der VHDL-Zeilen wäre die richtige 'Partitionierung' der BRAMs.. Beispiel: falls 2k Daten a 16 Bit zu speichern sind, ist es günstiger, 2 BRAMs a 8Bit "parallel" zu schalten, als den Adressbereich aufzusplitten (2 BRAMs a 16 Bit): Letzteres benötigt noch (besagte) Multiplexer, während diese im 1. Ansatz bereits 'in den BRAMs' enthalten sind.. Gruß Jochen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.