Verwendung von BRAM anstelle von SRAM in Virtex-5 FPGA

Ich arbeite an einem Projekt, bei dem wir Signale von einem ADC mit einem Virtex-5-FPGA erfassen und die Abtastwerte auf einem 128K x 256 SRAM gespeichert werden, von wo aus die Datenabtastwerte von einem PC erfasst werden. Ich glaube, dass der Virtex-5 eine Option für ein BRAM bietet, und obwohl ich verstehe, dass die Tiefe bei weitem nicht dem entspricht, was das SRAM bietet, möchte ich die BRAM-Option im Virtex-5 als Puffer zum Halten nutzen Proben vorübergehend, bis sie vom PC erfasst werden. Wie schwierig wäre die Umsetzung?

Sie können den Speichergenerator problemlos verwenden, um einen Speicherpuffer für Ihr Design zu erstellen, aber Daten mit einer Breite von 256 Bit machen es ziemlich langsam. Der beste Weg ist, ein 256-Bit-FiFo zwischen Ihrem ADC und Ihrer PC-Schnittstelle zu erstellen. Die Größe kann weniger als 128 KB betragen, wenn Sie Ihre Schnittstelle richtig gestalten, oder wenn Sie einen Frame mit einer Größe von 128 KB erfassen müssen, sollten Sie ihn in HDL erstellen und lassen Sie das Synthese-Tool es für Sie abbilden.

Antworten (2)

Gute Nachrichten. Dies ist eine sehr häufige Anwendung für ADC-Schnittstellen. Es ist eigentlich sehr einfach, den Block-RAM in Xilinx-Geräten einzurichten.

Sie sollten den "Block Memory Generator" Coregen von Xilinx ausführen, der im Grunde ein Blackbox-VHDL-Modul generiert, das Sie in Ihrem VHDL-Modul der obersten Ebene instanziieren können. Im Coregen können Sie Ihren Block-RAM so anpassen, dass er genauso "aussieht" wie Ihr vorhandener externer SRAM. Der einzige Unterschied besteht darin, dass Sie Signale in Ihrem Top-Level-Modul mit dem neuen Black-Box-Modul verbinden, das Sie instanziiert haben, anstatt mit Ihren externen Pins.

Ich bin mir nicht sicher, ob Sie eine Datenbreite von 256 erreichen können (meinten Sie wirklich 8?), aber ich denke, dass Sie auf den meisten Virtex-5-Geräten eine Tiefe von 128 KB erreichen könnten. Das Datenblatt mit der Virtex-5-Ressourcentabelle (wie viel BRAM verfügbar ist) ist hier verfügbar .

Das Datenblatt, das den Block Memory Generator erklärt, finden Sie hier . Es kann die Einstellungen usw. erklären.

Um den Blockspeichergenerator in ISE 14 zu starten, klicken Sie mit der rechten Maustaste in die Projekthierarchie und wählen Sie "Neue Quelle". Wählen Sie dann als Quelltyp "IP (Core...)" und wählen Sie dann Block Memory Generator als IP-Typ, wie unten gezeigt.

Block-Speicher-Generator

Sobald sich der "Block Memory Generator" öffnet, wählen Sie die gewünschten Optionen aus und klicken Sie dann auf "Konfigurieren". Es fügt Ihrem Projekt den Black-Box-Kern hinzu. Sie müssen es in Ihrem Top-Level-Modul instanziieren. Normalerweise können Sie die „Instanziierungsvorlage“ anzeigen, indem Sie in der Projekthierarchie auf den Kern klicken und im Fenster „Prozesse“ die Option „HDL-Instanziierungsvorlage anzeigen“ auswählen.

So wie das aktuelle Setup ist, ist der SRAM 32 MB groß und in einem 256 x 128 KB-Format strukturiert. Jedes Wort mit einer Länge von 256 besteht aus 16 16-Bit-Abtastwerten, die vom FPGA an den SRAM gesendet werden, nachdem die Daten vom ADC empfangen wurden. Wenn der Benutzer die Daten über den PC erfassen möchte, verwendet er einen Mikrocontroller, um über die FPGA-Register auf den SRAM zuzugreifen. Ich brauche keine Tiefe von 128k, da ich sie nur als Puffer verwenden müsste, aber ich glaube, dass die Breite von 256 notwendig ist.
Ich verstehe. Sie werden keine 32 MB in Ihrem Virtex FPGA bekommen, aber es hört sich so an, als würden Sie es sowieso nicht brauchen. Ich habe mir das Tool gerade angesehen und es sieht so aus, als ob Sie es tatsächlich so einrichten können, dass es eine Breite von 256 Bit verwendet (zumindest auf dem Spartan 6-Ziel, das ich gerade verwende).
Ja, ich brauche die 32 MB nicht. Gerade genug, um den Puffer aufzunehmen, bevor er auf den PC übertragen wird.

Block-RAMs sind sehr einfach, um die Tools zum Produzieren von HDL-Code zu erhalten - Sie müssen sich nicht mit Coregen anlegen.

Die Vorteile ohne Coregen sind:

  • Keine zusätzlichen Tools im Ablauf
  • Sie können Konstanten und Generika (oder ihre Verilog-Äquivalente) aus dem Rest Ihres Designs verwenden, um die Speichertiefe und -breite zu konfigurieren
  • coregen kann einem Kompilierungslauf mehrere Minuten hinzufügen, wenn Sie etwas geändert haben, während eine schnelle Änderung an einer HDL-Datei die Kompilierungszeit meiner Erfahrung nach nicht merklich ändert. Ich habe keine Ahnung, was Coregen die ganze Zeit macht!

Lesen Sie in Ihrem Synthesizer-Handbuch nach, wie Sie Code schreiben, der Block-RAM ableitet, und es gibt einige Beispiele in den Antworten auf diese Frage