FPGA-Design VHDL-basierter Designflow für FPGAs Hauke Wessels Oldenburg 2002 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Übersicht Designflow Entscheidung für FPGA Erstellung des Layouts Simulation/Emulation Layoutsynthese/ Programmierung Kommunikation mit dem Design Der Designflow umfasst viele Teilschritte, angefangen von der Entscheidung für eine FPGA-Implementierung (Jan), zur Erstellung des Designs (in VHDL/anderen Designwerkzeugen), Simulation/Emulation (Ole /Andreas), Synthetisieren und programmieren des fertigen Hardwaredesigns 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Hauptthemen Device-Abhängige Vorteile nutzen tri-state-buffer Schaltungsklasse finit-state-machine (FSM) tri-state-buffer für FSM? 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Einführung Beim FPGA-Design gibt es im Vergleich zum ASIC-Entwurf einige Unterschiede, die schon auf Algorithmus-Ebene beachtet werden müssen. VHDL legt, anders als Software-Programmiersprachen, stärker wert auf das „wie“ auf Syntax-Ebene. Ein gutes Beispiel dafür ist ein Multiplexer. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Multiplexer Es gibt 2 Möglichkeiten, Multiplexer in FPGAs zu implementieren. LUTs tri-states In einigen FPGAs (Xilinx) sind tri-states bereits in Hardware vorhanden! Dadurch ist ihre Verwendung natürlich besonders Resourcensparend. Bei Altera-FPGAs werden sie über LUTs nachgebildet. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
Die Schaltungen sind in den FPGAs ohnehin vorhanden!! 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Bsp: Multiplexer Die Realisierung eines Multiplexers liefert folgende Daten (flex10K): 32-fach Multiplexer 21 LE max. Delay: 20,1ns 8-fach Multiplexer 5 LE max. Delay: 15,5ms Bei 6-fach Multiplexer: 5LE, 15,1ns 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
als tri-state Multiplexer Die Realisierung eines Multiplexers durch tri-states liefert folgende Daten (flex10K): 32-fach Multiplexer 49 LE max. Delay: 21,2ns 8-fach Multiplexer 5 LE max. Delay: 15,6ns bei 6-fach: 6 LE!!, 16ns 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Analyse Der Vorteil, der durch eine Realisierung mit tri-state Buffern zu erzielen ist, hängt vom verwendeten FPGA ab. Mit dem Flex10k ist die Verwendung des vom Hersteller implementierten Multiplexers effizienter, als eine durch LUTs nachgebildete tri-state-Implementierung. Das wir bei 4-fach Muxes noch wieder schlechter mit tri-states (1LUT mehr, 2ns langsamer). Die Multiplexer-Struktur wird auch durch die carry-chain-Architektur des Flex10k begünstigt (wie Jan). 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
state-machine encoding One-hot vs. binäre Kodierung Ein binary encoding spart Register und ist deshalb im ASIC-Design die Kodierung der Wahl. Bei einem FPGA liegen die Register aber ohnehin vor, egal ob man sie verwendet, oder nicht. Daher wird für FPGAs oft One-Hot encoding verwendet, da die Logik zur Berechnung des Folgezustandes geringeren Aufwand benötigt als ein binary-encoding. Ein binary encoding verbraucht sicher weniger Register, z.B. für 100 Zustände nur 7 Register, wo One-Hot encoding 100 Register benötigt. Allerdings ist die Logik bei One-hot meist weniger Aufwendig. Beim binary encoding hängt die Logik, die die Transition von 1 Zustand zum nächsten steuert, von alle Bits ab, dazu werden dann high fan-in functions benötigt, wohingegen bei One-Hot die Logik oft nur von Funktion von anderen state-bits sind (Altera: finit-state-machines.pdf) Allerdings ist auch das FPGA-abhängig. Der Flex10k ist Registerintensiv und für ihn ist daher One-hot meist die bessere Wahl. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
finit-state-machines in VHDL Automaten werden in VHDL wie in anderen Programmier-sprachen auch dargestellt. Zu beachten ist allerdings, dass die Zustände Aufzählungstypen verwenden. Ein Integer würde als Mux implementiert! type statetyp is (s1, s2, s3); signal current_state: statetype; Das Synthese-Tool muss erkennen, dass es sich um einen Automaten handelt, damit es die effizienteste Implementierung finden kann. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
Bsp. Write-Once Controller Ein etwas aufwendigerer Automat ist das Write-Once Protokoll für busbasierte shared-memory Architekturen. 5 Zustände und viel Ein-/ Ausgabe (Mealy-Automat). Cache Kohärenz Protokoll: Invalidation based CCC: Write Once Protokoll 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Resourcen One-Hot Messergebnisse One-Hot encoding: 37 logische Elemente Max. Takt: 113 Mhz Auf dem Floorplan sind übrigens die gelben Punkte LEs mit lokalem Fan-out und die roten haben LEs haben fan-out außerhalb des LAB. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM binäre Kodierung Ergebnisse für eine binary encoding (3bit): 39 logische Einheiten max. 125Mhz Dieses Ergebnis hat mich auch überrascht, und ich habe mir überlegt, woran das liegen mag. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM binary doch besser? Ein Blick auf die state-Tabelle zeigt, dass das Synthese-Tool bei 5 Zuständen gute Möglichkeiten zur Optimierung hat. Es wird in der Tat für jeden Zustandswechsel nur 1 Bit geändert. Zu Bemerken ist außerdem, dass der binary encoded Implementierung 2 LE mehr benötigt. Um die Möglichkeit der Optimierung einzuschränken, habe ich anschließend den Controller um 1 Zustand veringert und erneut verglichen -> 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Write-Once mit 4 states Ergebnisse: One-hot: 31 LEs fmax: 133Mhz binary-coding: 30 LEs fmax: 129Mhz Und hier erzeugt das Syntese-Werkzeugt auch den erwarteten Effekt: die binary encoded Implementierung benötigt weniger LEs und ist langsamer. Scheint es bei kleinen Automaten keine wirklichen Unterschiede zu geben, ich habe daher einen etwas aufwendigeren Automaten implementiert -> 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM ein modulo-50 Zähler Ein Modulo-50 Zähler (über Zustände kodiert) erzielt folgende Ergebnisse: binäre Kodierung 39 Logische Einheiten fmax: 111Mhz One-Hot: 86 Logische Einheiten fmax: 250Mhz Das ganze ohne unterschiedliche Eingaben (nur tick). Wie man sieht, ist hier wie erwartet das One-hot encoding die bessere Wahl. Interessant ist hier, wie das Synthese-Tool das Problem mit dem Anfangszustand behandelt. Man sieht in der Tabelle, dass sowohl beim binary encoding als auch beim One-Hot encoding der Zustand s0 durch Nullen markiert wird. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM der Startzustand In VHDL ist der Zustand, der als erstes in der enum Definition genannt wird, der Startzustand. type statetyp is (s1, s2, s3); s1 ist hier also Startzustand. Die Register des FPGA werden bei der Initialisierung alle auf 0 initialisiert. Daher ist der Startzustand beim One-Hot encoding nicht, wie erwartet 00...1 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Analyse Automaten Die Synthese-Algorithmen für Automaten sind ausgereift und man kann davon ausgehen, dass der Automat auch ohne eigenes Eingreifen optimal kodiert wird. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
tri-state encoding von FSMs? Wie ist es möglich, endliche Automaten mit tri-states zu kodieren? Der Folgezustand wird als tri-state bus dargestellt. Der Zustandsübergang wird getaktet in einem process durchgeführt. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Bewertung ein tri-state encoding ist wie folgt zu bewerten: pro: Wenn harte tri-states vorliegen können LEs eingespart werden. contra: Es kann für größere Automaten nur ein binary-encoding mit tri-states nachgebildet werden, z.B. ein 100 bit breiter tri-state bus überfordert auch die Xilinx-Architektur. Die Synthese-Tools erwarten so eine FSM nicht, so dass ggfs. schlechte Optimierung und Routing-Probleme auftreten können. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
Messergebnisse für mod 50 Messergebnisse für den Modulo-50 Zähler sehen auch erwartungs-gemäß schlecht aus: 97 LEs fmax: 77Mhz. (vgl. One-Hot: 86 LEs, 250Mhz) 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Zusammenfassung tri-states-Implementationen lohnen sich beim Flex10k nicht/selten. Automaten werden von den Synthese-Tools FPGA-abhängig richtig kodiert. Der Compiler ist unser Freund. Deswegen sollte man sich daran halten, wie z.B. ein Automat auszusehen hat. 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM
PG: sensorbasierte Steuerung eines Mikroroboters im REM Literatur Altera Papers und Codebeispiele (http://www.altera.com) Stamouli, Ford, Dunnett, White, Lister: „VHDL Methodologies für Effective Implementation on FPGA Devices and Subsequent Transition to ASIC Technology“ Gschwind, Salapura: „VHDL Design Methodology for FPGAs“ Quartus Online Doku Circuit Cellar (http://www.chipcenter.com/circuitcellar/) FPGA Overview (http://www.vcc.com/fpga.html) 21.09.2018 PG: sensorbasierte Steuerung eines Mikroroboters im REM