Wie synthetisiert man am besten einen systolischen Schaltkreis auf FPGA?

Ich entwickle eine parametrisierte systolische Schaltung in VHDL unter Verwendung von Generika. Es zeigt Regelmäßigkeit in 2 Dimensionen.

Ich bin dabei, es auf Xilinx FPGA zu synthetisieren. Ich vermute, es lohnt sich, den Logiksynthesizer über diese Regelmäßigkeit zu informieren, um eine bessere Leistung im Endbereich zu erzielen.

Wie kann ich das machen ?

Ich habe bereits die Option "Hierarchie beibehalten" in Xilinx ISE entdeckt, aber es ist nicht klar, ob sie den Job macht.

Sie sollten Post-Synthese-Optimierungen aktivieren: z. B. hierarchieübergreifend optimieren.
ok, das werde ich versuchen. Das heißt, ich muss die Idee vergessen, meine Schaltung so zu platzieren und zu routen, wie ich es ursprünglich gedacht habe? Ich vermute, dass dem Synthesizer dann einige wichtige Informationen (Regelmäßigkeit der Schaltung) fehlen, die seine Optimierungen (auf physikalischer Ebene, P&R) vereinfachen würden.
Wie groß ist ein Berechnungselement (CE)? Wenn es klein ist, können Sie auch versuchen, rel zu verwenden. Platzierungsbeschränkungen. Ich denke, der beste Weg ist, Keep-Hierarchie zu deaktivieren und die meisten Optionen zu aktivieren. Optionen => hohe Kompilierzeit. Ein begrenzender Faktor bei systolischen Designs ist nicht der Ressourcenverbrauch von LUTs und Regs, sondern die Routing-Ressource. Selbst wenn man also die Anzahl der LUTs und Regs pro CE kennt, die in ein MxN-Array passen, mangelt es meist an genügend Drähten. Sie können zusätzlich überprüfen, dass jedes CE nur wenige unterschiedliche Steuersätze hat (Clock/Enable/Reset-Set pro Slice) => höheres Slice-Nutzungsverhältnis.

Antworten (2)

Grob gesagt könnten Sie das FPGA planen und in regelmäßige Abschnitte unterteilen und dann Zuweisungen verwenden, um bestimmte Instanzen der Hierarchie in jeden Block zu verschieben. Dies wird Ihnen wahrscheinlich ein schlechteres Timing-Ergebnis geben, als dem Planer völlige Freiheit zu geben, da es eine minimale Routing-Verzögerung zwischen Blöcken erzwingt, die eine freie Platzierung eliminieren würde, indem sie näher zusammenrücken.

Sie könnten etwas an den Laufzeiten des Placers/Routers einsparen, aber wenn sie versuchen, diese künstlichen Entfernungen zu umgehen, ist dies möglicherweise kein Gesamtgewinn. Ich würde es einfach den Werkzeugen überlassen, bis Sie ein Design haben, das funktioniert.

Wenn Ihre Schaltung aus einfacher Logik besteht, wird es schwierig sein, das Design wirklich so einzuschränken, dass es in die FPGA-Matrix passt. Sie sollten wahrscheinlich die Tools des FPGA-Anbieters die Arbeit erledigen lassen. Wenn Sie einen ASIC erstellen müssten, könnten Sie wirklich eine Zelle entwerfen und sie dann über die Oberfläche kopieren und einfügen. Bei FPGAs müssen Sie sich mit der Tatsache auseinandersetzen, dass sie nicht so regelmäßig sind, wie sie scheinen.

Wenn Sie feste Ressourcen wie Speicherblöcke oder Multiplikatoren verwenden, können diese einfacher eingeschränkt werden (unter Verwendung von „LOC“-Einschränkungen), die restliche Logik wird um sie herum angeordnet ...

Siehe Xilinx „CGD“ : Constraint Guide