Ich arbeite an einem Blockdesign, um die Koordinate in der komplexen Menge zu berechnen, die durch ein Pixel dargestellt wird. Bei einem x- und y-Pixelwert, der Schrittgröße und dem Start von x und dem Start von y muss ich eine Koordinate in der komplexen Ebene berechnen. Zum Beispielx' = start_x + step * x
Da x eine Ganzzahl ist, übergebe ich sie zuerst durch ein Gleitkomma-Konvertierungsmodul und dann durch ein verschmolzenes Gleitkomma-Multiplikationsadditionsmodul. Dies hat eine Gesamtlatenz von 24 Zyklen. Das Problem ist, dass ich am Anfang auch eine Speicheradresse angeben und 24 Zyklen später herausholen muss, bevor ich sie an das Modul weitergebe, das x' y' und die Adresse erhält. Ich suche nach einer IP, die dabei helfen kann. Das nächste, was ich gefunden habe, ist ein Schieberegister, aber ich würde 24 davon brauchen. Ich dachte daran, vielleicht einen FIFO zu verwenden. Gibt es etwas, das nur als Latenzverzögerung für Daten fungiert, während andere Berechnungen durchgeführt werden?
PS: Ich bin mir nicht sicher, warum ich mein Fused-Mul-Add fmax genannt habe
Schreib einfach eins. Es sind nur ein paar Zeilen VHDL. Die Tiefe kann eine generische Natur sein, und sie kann ihre Breite von den Anschlüssen nehmen. Synthetisieren Sie es unabhängig und prüfen Sie, ob ISE/Vivado den erwarteten Schieberegistermodus in LUTs verwenden.
Wenn Sie es nicht einfach als Block verpacken können, stellt dies die Nützlichkeit des gesamten Blockdiagrammansatzes in Frage. Die meisten dieser Dinge gehen direkt auf das „Renoir“-Tool von Mentor Graphics zurück, bei dem das Umhüllen von VHDL als Block einfach war.
Es hört sich so an, als ob Sie ein Schieberegister benötigen.
Glücklicherweise können Schieberegister ziemlich effizient in Xilinx-FPGAs implementiert werden.
Aus der Kintex-7-Dokumentation.
Ein SLICEM-Funktionsgenerator kann auch als 32-Bit-Schieberegister konfiguriert werden, ohne die in einem Slice verfügbaren Flip-Flops zu verwenden. Auf diese Weise verwendet, kann jede LUT serielle Daten um 1 bis 32 Taktzyklen verzögern
Somit könnte eine 24-Zyklus-Verzögerung für eine 24-Bit-Adresse in nur 6 CLBs implementiert werden (weil es 4 LUTs in jedem SLICEM-CLB gibt). Spartan-Geräte sollten auch ähnliche Fähigkeiten haben.
In älteren Familien SRL
wurde das Makro verwendet, um diese Funktionalität zu instanziieren. Ich bin mir nicht sicher, ob das für die aktuellen Produkte (Artix/Kintex/Virtex-7- oder Spartan-6-Generation) noch gilt.
Das Photon
Chasep255
Chasep255
Das Photon
Das Photon
Chasep255
johnnymopo
uint128_t