HES Praktikum, Aufgabe 6
Polyphonie

Aufgabenstellung

Der Synthesizer soll 16 Toene gleichzeitig und unabhaengig voneinander erzeugen koennen (er soll "16-stimmig polyphon" werden).

Prinzip

Wenn mehrere Musikinstrumente gleichzeitig gespielt werden, ueberlagern (d.h. addieren) sich die Schwingungen auf dem Weg zum Ohr. Diese Addition kann in einem elektronischen Instrument schon vor der Umsetzung in Schallwellen passieren: bei analogen Synthesizern durch "Analogaddierer" (Widerstandsnetzwerke), bei digitalen Synthesizern durch Addition der Abtastwerte (einmal pro Abtastintervall werden die Werte aller Instrumente addiert). Zur Erzeugung der Stimmen kann man entweder parallel mehrere Tongeneratoren aufbauen und alle Abtastwerte in einem Schritt addieren. Oder man berechnet die Abtastwerte der einzelnen Stimmen nacheinander ("Zeitmultiplexverfahren") und addiert sie schrittweise, was die viel effizientere Methode ist.

Anforderungen

1. Der Synthesizer muss 16 unabhaengige Stimmen bereitstellen.

2. Die in Aufgabe 5 gestellten Anforderungen gelten weiterhin. Jetzt gibt es aber die beiden Register 0 und 1 (mit unveraenderter Funktion) fuer jede Stimme einmal. Fuer die Stimme v (v = 0..15) berechnen sich die Nummern der beiden Register als (v*16 + 0) und (v*16 + 1).

Hinweise

1. Wie lautet die Bedingung, die beim Zeitmultiplexverfahren die Anzahl der erzeugbaren Stimmen beschraenkt? Wie viele Rechenschritte haben wir also zur Berechnung des naechsten Abtastwertes insgesamt zur Verfuegung? Pro Stimme?

2. Die Ablaufsteuerung braucht offensichtlich eine Schleife (warum?). Also wird ein Zaehler fuer die Stimmen benoetigt. Wie adressiert man dann das Block-Memory? Konstruieren Sie einen passenden "Adress-Generator". Bleiben moeglicherweise Register "uebrig" (d.h. sie koennen mit diesem Schema nicht adressiert werden)? Wie koennte man die Register adressierbar machen und wofuer koennte man sie nutzen?

3. Die Abtastwerte fuer die 16 Stimmen muessen summiert werden. Das kann man am einfachsten durch einen "Sample Accumulator" erledigen: ein Register, auf das der jeweils gerade berechnete Wert addiert wird, und das die Summe zum "Abholen" fuer den DAC speichert.

ACHTUNG, WICHTIG!

Sie MUESSEN sich IMMER erst ENTLADEN, bevor Sie irgendeinen Teil des FPGA-Bords beruehren! Nichtbeachtung kann zur Zerstoerung der Bauteile durch statische Aufladung fuehren!