Optimales Seitenverhältnis zum Speichern von Daten in Block-RAMs

Ich arbeite an Xilinx Virtex 4 FPGA. Ich möchte einige Filterkoeffizienten in Block-RAMs speichern.
Insbesondere habe ich viele Filtersätze, wobei jeder Satz 64 Koeffizienten hat und jeder Koeffizient aus 18 Bit besteht. Jeder Satz muss auf einen bestimmten Block-RAM abgebildet werden.

Aus dem Virtex 4-Benutzerhandbuch (Link zum PDF) geht hervor, dass ein Block-RAM 18 Kbit Daten speichert, die in jedem „Seitenverhältnis“ von 16Kx1, 8Kx2 bis 512x36 konfiguriert werden können.

Wenn ich also den Block-RAM so programmiere, dass er 512 Koeffizienten hat, stehen mir 36 verschiedene Block-RAMs zur Verfügung.

Meine Frage ist, kann ich dieses Seitenverhältnis verkleinern, so dass ich den Block-RAM so programmiere, dass er 64 Koeffizienten speichert. In diesem Fall stehen mir 288 verschiedene Block-RAMs zur Verfügung (64 x 288 = 18 KB)?

Wenn die Antwort NEIN lautet, wie soll ich dann meine Koeffizienten speichern, um minimale Block-RAM-Ressourcen zu verwenden?

Antworten (1)

Nein, Sie haben das Konzept des "Seitenverhältnisses" falsch verstanden.

Jeder Chip hat eine feste Anzahl von Block-RAMs; Sie finden diese Nummer im Datenblatt.

Jeder dieser Block-RAMs hält 18K Bits und kann so konfiguriert werden, dass er auf diese Bits auf verschiedene Arten zugreift, von 16K Wörtern mit jeweils 1 Bit bis zu 512 Wörtern mit jeweils 36 Bits. Im ersten Fall können Sie Bit für Bit lesen oder schreiben; im letzteren Fall können Sie 36 Bit gleichzeitig lesen oder schreiben.

Für Ihre Filterkoeffizienten möchten Sie wahrscheinlich den Block-RAM als 1024 Wörter mit jeweils 18 Bit konfigurieren. Sie können einen Filter für jeden Block-RAM in Ihrem Gerät haben, und Sie werden den größten Teil der Kapazität jedes Block-RAM "verschwenden".

Es gibt ein paar Tricks, die Sie ausprobieren können, um mehr als einen Filter pro Block-RAM zu unterstützen:

  • Wenn die Adressierung für alle Filter im Gleichschritt läuft, könnten Sie den Block-RAM als 512 Wörter mit 36 ​​Bit konfigurieren und dann den 36-Bit-Datenbus in zwei 18-Bit-Busse aufteilen und die Daten an zwei separate Filter senden .

  • Wer das Dual-Port-Feature der Block-RAMs sonst nicht benötigt, kann über den zweiten Port einen zweiten Filter speisen. Binden Sie das Adress-MSB an einem Port niedrig und am anderen hoch.

  • Wenn beide der obigen Bedingungen zutreffen, könnten Sie möglicherweise beide Techniken zusammen verwenden, um Koeffizienten für vier Filter in jedem Block-RAM zu halten.

Danke, dass du das geklärt hast. Sie sagen also, dass ich meinen RAM als reg [35:0] RAM1 [511:0] deklarieren sollte . Speichern Sie dann 2 Sätze Filterkoeffizienten von 0 bis 63 und weitere 2 Sätze Filterkoeffizienten von 256 bis 319, indem Sie das MSB der Adresse negieren. Das ist also der optimale Weg, oder? Weil ich die verbleibenden 256 Standorte immer noch nicht nutze, oder?
Eine weitere Folgefrage lautet: Kann ich das Seitenverhältnis nicht auf 64 x 288 reduzieren? Denn in diesem Fall kann ich 16 Sätze von Filterkoeffizienten speichern, wodurch die vollen RAM-Speicherplätze verwendet werden. Erlaubt Virtex 4 dieses Seitenverhältnis?
Nein, 512 x 36 ist das breiteste Seitenverhältnis, das die Hardware unterstützt. Um mehr vom verbleibenden Speicher zu verwenden, müssten Sie die RAMs in Bezug auf die Filter doppelt (oder mehr) takten.