Designbeispiel "Hammond Orgel" Parallele Prozesse im FPGA sequenzialisieren

Bild 2: Die untere Baugruppe ist das im Text referenzierte Eval-Board LXO2000 von Trenz. Die obere Baugruppe ist eine selbstgebastelte Baugruppe des Autors.
Die untere Baugruppe ist das im Text referenzierte Eval-Board LXO2000 von Trenz. Die obere Baugruppe ist eine selbstgebastelte Baugruppe des Autors.

FPGAs können in parallelen Prozessen zeitgleich mehrere Aufgaben erledigen und dadurch eine sehr hohe Verarbeitungsgeschwindigkeit erreichen. Wozu also eine Sequenzialisierung? Der Autor erklärt das anhand des Desings eines Tongenerators einer Hammond-Orgel.

Vollständig parallele Prozesse erfordern separate Hardwarestrukturen im FPGA, und damit scheidet eine Mehrfachnutzung von Ressourcen von vornherein aus. Zwei Zähler mit unterschiedlichen Zählfreigaben können nichts miteinander teilen, weder die Register noch die Addierlogik. Dieser Artikel beschreibt einen Weg, ein FPGA-Design so zu konzipieren, dass Logikressourcen mehrfach verwendet werden können. Die Logik für eine vorgegebene Aufgabe passt dann in ein deutlich kleineres und damit günstigeres Bauteil. Und um das vorwegzunehmen: Es reicht nicht aus, irgendwo im Synthese-Tool ein Häkchen bei „Ressource Sharing“ zu setzen.

Die Designaufgabe für diesen Artikel ist der Nachbau des Tongenerators einer Hammond-Orgel aus dem Jahr 1935. Glücklicherweise sind heute noch genügend der ursprünglichen Pläne und Anleitungen dieser Orgel verfügbar. Auf Basis dieser Informationen kann man die Tonerzeugung in einem FPGA nachbauen. Der Tongenerator ist ein mechanisches Getriebe mit, etwas vereinfacht dargestellt, zwölf unterschiedlich schnell rotierenden Wellen, das von einem Elektromotor angetrieben wird. Jede Welle gehört zu einem der zwölf Töne der gleichstufigen Stimmung, also C, Cis, D, Dis usw. Auf jeder Welle sitzen mehrere metallische Zahnräder, die keine mechanische Kopplung zu einem anderen Zahnrad haben. Stattdessen befindet sich je ein Stiftmagnet mit darum gewickelter Spule in der Nähe der Außenkontur dieser Zahnräder. Durch das Rotieren der Welle und das Vorbeilaufen der Zähne an dem Magnet entsteht in der Spule ein wechselnder magnetischer Fluss und damit eine Wechselspannung. Die Zahnräder auf ein und derselben Welle haben dabei eine unterschiedliche Anzahl von Zähnen, nämlich 2, 4, 8, 16 usw. und erzeugen damit Wechselspannungen mit jeweils doppelter Frequenz, was einem Tonabstand von einer Oktave entspricht. Auf diese Weise werden vom Tongenerator etwa 100 sinusförmige Wechselspannungen erzeugt, die über das Manual und die Zugriegel zusammengemischt werden und so das analoge Ausgangssignal der Orgel ergeben. Alle Signalketten von den Magnetspulen bis zum analogen Ausgang sind völlig unabhängig voneinander und laufen zeitgleich nebeneinander ab. Und falls es jemand schaffen sollte, alle Tasten des Manuals herunterzudrücken, so käme am Ausgang das korrekte Ausgangsignal heraus. Die Orgel ist also grenzenlos polyphon. Das ist Parallelität in Reinkultur, und damit ist der Nachbau in einem FPGA der prädestinierte Ansatz. Anstelle von 100 Zahnrädern und Magnetspulen kann man ja mit 100 Zählern 100 Drehwinkel für 100 Sinustabellen berechnen. Ein nachgeschalteter Mischer kann dann die Sinuswerte in Abhängigkeit von den gedrückten Tasten unter Berücksichtigung der Zugriegel addieren. Das ist nicht besonders kompliziert.