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!