Eine weitere, höchst interessante Anwendung von RAM-Blöcken ist deren Einsatz als mikroprogrammierte Steuerwerke in Soft-Core-Prozessoren. Als Beispiel eines Soft-Core-Prozessor dient die CPU des Mikrocontrollers M68HC05 von Freescale [11, 12], die in zwei Versionen implementiert ist. Die Grundlage für beide Versionen stellt ein hardware-optimiertes, aus primitiven Komponenten wie MUXF5 und MUXCY aufgebautes Rechenwerk dar.
In der ersten Version wurde der Soft-Core-Prozessor mit einem festverdrahteten Steuerwerk realisiert. Sein Steuerwerk in der Form einer Zustandsmaschine mit 358 Zuständen wurde in VHDL typischerweise mit einem großen CASE-Statement beschrieben. Der Soft-Core-Prozessor, bestehend aus dem festverdrahtete Steuerwerk und dem hardware-optimierten Rechenwerk, belegt nach der Synthese insgesamt 399 Slices. Das sind rund 20 % der Ressourcen in einem FPGA-Baustein vom Typ XC3S200. Von den 399 verbrauchten Slices entfallen mehr als die Hälfte (220 Slices) auf das Steuerwerk.
In der zweiten Version wurde der Soft-Core-Prozessor mit einem mi-kroprogrammierten Steuerwerk realisiert. Dieses Steuerwerk besteht aus einem RAM-Block als Mikroprogrammspeicher und aus zwei Multiplexern. Mit einem Multiplexer werden Eingangsbedingungen selektiert, die dann im zweiten Multiplexer zur Auswahl von Startadressen dienen. Aufgrund der einheitlichen Codierung von Maschinenbefehlen im Soft-Core-Prozessor M68HC05 war es möglich, den Operationscode direkt als Startadressen zu verwenden, ohne die sonst notwendige Adressabbildung.
Für den Mikroprogrammspeicher wurde der RAM-Block als Single-Port-Speicher in einer Organisation 512 × 36 bit konfiguriert. Das Format der Mikrobefehle beinhaltet ein 9-bit-Datenfeld für Folgeadressen, ein 2-bit-Datenfeld mit Select-Signalen für die beiden Multiplexer sowie einen 25-bit-Vektor mit verschiedenen Steuersignalen. Das gesamte Mikroprogramm umfasst 358 Mikrobefehle.
Der Soft-Core-Prozessor mit dem mikroprogrammierten Steuerwerk samt dem Rechenwerk belegt nach der Synthese lediglich 170 Slices. Das sind knapp 8 % der Ressourcen im FPGA-Baustein vom Typ XC3S200. Das Steuerwerk benötigt weniger als 4 % (6 Slices) der insgesamt 170 verbrauchten Slices.
Ein positiver Nebeneffekt der mikroprogrammierten Realisierung ist eine höhere maximale Taktfrequenz im Vergleich zu der festverdrahteten Version. Durch den modularen Aufbau konnten beide Steuerwerke auch separat synthetisiert werden. Die Ergebnisse sind in der dritten und vierten Spalte von Tabelle 3 zusammengefasst.
Softcore-Prozessor | Steuerwerk separat |
|||
---|---|---|---|---|
FSM | MCU | FSM | MCU | |
Anzahl Slices | 399 | 170 | 220 | 6 |
Anzahl Flip-Flops | 79 | 44 | 36 | 0 |
Anzahl LUT4 | 716 | 325 | 402 | 10 |
Anzahl RAM-Blöcke | 0 | 1 | 0 | 1 |
fmax[MHz] | 64 | 66 | - | - |
Tabelle 3. Ressourcen-Verbrauch des Soft-Core-Prozessors M68HC05 mit festverdrahtetem Steuerwerk (FSM) und mit mikroprogrammiertem Steuerwerk (MCU) sowie jeweils separat für das festverdrahtete (FSM) und mikroprogrammierte (MCU) Steuerwerk.
Man sieht hier deutlich den großen Unterschied im Ressourcenverbrauch: 220 Slices im festverdrahtete Steuerwerk (die FSM-Spalte) zu 6 Slices plus einen RAM-Block im mikroprogrammierten Steuerwerk (die MCU-Spalte).
Dieser Ansatz stellt eine interessante und vollwertige Alternative gegenüber der herkömmlichen Realisierung von festverdrahteten Steuerwerken dar. Erwähnenswert sind hier insbesondere die Reduzierung des Ressourcenbedarfs bei der Realisierung einer komplexen digitalen Schaltung mit einem FPGA-Baustein und eine verbesserte Auslastung des -FPGA-Bausteins durch eine höhere Leistungsdichte. Des Weiteren tragen mikroprogrammierte Steuerwerke wesentlich dazu bei, neue Anforderungen an Steuerungsalgorithmen ökonomisch deutlich effizienter in FPGA-Bausteinen integrieren zu können.
Dieser Beitrag zeigt an zwei Beispielen, wie man RAM-Blöcke in FPGA-Bausteinen als mikroprogrammierte Steuerwerke einsetzen kann. An beiden Anwendungsbeispielen wurde auch gezeigt, dass solche Steuerwerke zu einer beachtlichen Einsparung von Ressourcen (Slices) in einem FPGA führen. Je größer das festverdrahtete Steuerwerk war, desto größer war auch die Einsparung der Ressourcen bei einer Realisierung mit einem mikroprogrammierten Steuerwerk.
Der Programmieraufwand bei der Erstellung eines Mikroprogramms ist mit dem Implementierungsaufwand einer Zustandsmaschine mit einem CASE-Statement vergleichbar. Allerdings ist bei der Realisierung eines mikroprogrammierten Steuerwerks auf die physikalischen Kapazitäten und die Konfigurationsmöglichkeiten eines RAM-Blocks zu achten. Belegt das Mikrobefehlsformat einen Bitvektor, der länger ist als die Wortbreite des RAM-Blocks, müssen weitere RAM-Blöcke parallel zusammengeschaltet werden.
Ein mikroprogrammiertes Steuerwerk auf Basis eines RAM-Blocks hat eine feste Größe, wodurch eine genauere Abschätzung der Schaltungskomplexität bereits in der Entwurfsphase möglich ist. Änderungen und Erweiterungen im Mikroprogramm haben keinen Einfluss auf den Ressourcenverbrauch einer Schaltung, solange die physikalischen Grenzen eines RAM-Blocks nicht überschritten werden.
Dagegen haben Erweiterungen in einem festverdrahteten Steuerwerk oder sogar nur Änderungen in der Codierung von Signalen oder Zustandsvariablen unmittelbare Auswirkungen auf die Komplexität der Übergangs- und Ausgangsschaltnetze und somit auch auf den Ressourcenverbrauch.