Warum hat ein LUT6-basiertes SRL nur 32 Einträge, aber nicht 64?

Xilinx-FPGAs können LUTs als Speicherelemente verwenden. Sie können als ROM, RAM und Schieberegister (SRL) verwendet werden.

Neue Xilinx-Geräte verwenden LUTs mit 6 Eingängen, was 64 x 1 Bit für RAMs/ROMs, aber nur 32 Bit für SRLs ergibt.

Warum sind SRLs auf 2^5 Bits beschränkt?

Mir ist keine Erklärung in den offiziellen Dokumenten bekannt.

Antworten (2)

Ich glaube, das liegt daran, dass die LUTs des Spartan 6 intern als LUT mit 5 Eingängen und 2 Ausgängen gefolgt von einem umgehbaren Mux aufgebaut sind.

Nun, warum Sie kein 2 Bit breites, 32 Bit langes Schieberegister in einer einzigen LUT erstellen können, ist eine gute Frage. Anscheinend sollte das möglich sein, und dann sollte es möglich sein, den Ausgang einer Seite zurück auf die andere Seite zu schleifen, um ein 64-Bit-Schieberegister in einer einzigen LUT zu erhalten. Sie müssten Xilinx fragen, warum sie das nicht unterstützen.

Ich habe keine Antwort, da ich die internen Details von Xilinx-Slices nicht kenne. Ich habe einige Hinweise.

Erstens können Sie keine Daten in einer LUT6 speichern. Sie können Daten nur in Registern (die mit 2/LUT6 nummeriert sind) und verteiltem RAM/BlockRAM speichern. Was Ihre LUT6 = 64-Bit-Annahme etwas aufhebt.

Verteilter RAM und Schieberegister haben etwas nichts mit LUT6-Primitiven zu tun. Wenn Sie sich das Spartan-6 Configuration Logic Blocks User Guide ansehen , werden Sie sehen, dass es 3 Arten von Slices auf dieser Architektur gibt:

  1. Normales Slice mit nur LUT6 (sie haben andere Dinge, nur nichts Relevantes für diese Diskussion).
  2. SLICEL, die LUT6 und Fast-Carry-Logikblöcke haben.
  3. SLICEM, die das haben, was SLICEL hat, plus verteilten RAM.

Schieberegister (und verteiltes RAM) sind nur auf SLICEM CLBs verfügbar, was bedeutet, dass sie den verteilten RAM-Block sowie die LUT6 benötigen. Xilinx macht keine Angaben zum RAM-Block, aber wir wissen aus der Dokumentation, dass ein LUT6+RAM einen 64x1-Bit-Single-Port-Distributed-RAM oder einen SRL32 implementieren kann.

Ein VLSI-Guru könnte wahrscheinlich die Details des internen RAMs ableiten, aber ich finde das vernünftig:

  • 1 LUT6 + 1 RAM-Block = SRL32
  • 1 LUT6 + 1 RAM-Block = 64x1b Single-Port-RAM
  • 2 LUT6s + 2 RAM-Blöcke = 64x1b einfacher Dual-Port-RAM

Als Schieberegister werden wahrscheinlich 32-Bit-Dual-Port-RAMs mit spezifischen Steuerungen implementiert, die von der LUT6 bereitgestellt werden.

Meine Aussage LUT6 wird als Speicher verwendet ist richtig :). So steht es im CLB-Handbuch. Xilinx verwendet den Konfigurationsport einer LUT, um Benutzerzugriff auf den gespeicherten LUT-Wert zu ermöglichen. Wenn Sie eine LUT als RAM verwenden, bedeutet dies einfach, die Eingänge A0 bis A5 als Adresse zu verwenden. Das therm SliceL/M bedeutet, dass nicht alle CLBs dieses Feature bieten (M -> it's available). Wenn Sie in die CLB-Anleitung schauen, werden Sie feststellen, dass eine LUT getaktet werden kann (Shift-Clock).
Wenn Sie eine 3-Bit-Verschiebungsreg in VHDL schreiben, werden Sie sehen, dass ISE ein SRL16 von 2 Bits und ein D-FF generiert. Die LUT-Eingänge werden als Tap-Adresse verwendet. Es ist möglich, LUT-RAM-basierte Fifos zu implementieren, die nur 1 Lesezähler (Tap-Zeiger) verwenden. Das Fifo-Schreiben ist nur eine SRL-Verschiebung im Betrieb. Die Grundelemente LUT, RAMxxSy, SRL, ROMxxSy werden auf dieselbe Hardware abgebildet, nur mit aktivierter anderer Steuerlogik.
Ihr verlinktes Spartan6 CLB-Dokument zeigt diese Funktionen auf Seite 9. Die 4 Blöcke ganz links sind LUTs, die auf viele Arten konfiguriert werden können (quadratische Aufzählungszeichen). Sie können auch die Eingaben clk und we sehen. A1 bis A6 werden als Schreibadresse für die LUTs A..D verwendet. als Leseadresse werden die normalen Eingänge A1/B1/C1/D1..A6/../D6 verwendet. Es gibt eine dedizierte Verschiebungsroute von LUT zu LUT di1/di2 -> mc31. Seite 17 -> RAM-Beispiel.
Du hast Recht. Ich kann die 32-Bit-Beschränkung nur vermuten, aber Xilinx 'Primitiv erlaubt die Verwendung des 64-Speicherplatzes nur bei einer Konfiguration mit einem Port (das Schieberegister ist ein Sonderfall mit zwei Ports). Der 64-Dual-Port-Speicher erfordert 2 LUTM.