zur Funktionsweise
Grundidee war es, die analogen Informationen, die ein Mikrophon liefert durch einen AD-Wandler (analog-digital-Wandler) in eine 8 Bit oder 16 Bit Zahl umzuwandeln und in regelmäßiegen Zeitintervallen abzuspeichern. Das Prinzip des Sampelns.
Auf die selbe Weise werden die aufgeneommen Töne wieder ausgegeben, indem die gesampelten 8 bzw. 16 Bit Daten in den gleichen Zeitintervallen durch einen DA-Wandler (digital-analog-Wandler) in die ursprünglichen Töne zurückgewandelt werden.
zu den Komponenten
Takt:
Diese Komponente gibt den notwendigen Takt und somit die Sampelfrequenz vor.
IO-Einheit:
Ein AD-Wandler bildet die Schnittstelle zwischen den analogen Informationen eines Mikrophons und dem digitalen Datenbus. Dabei entspricht die Auflösung des Wandlers (16 Bit) der Breites des Busses (16 Bit).
Ein DA-Wandler wiederum wandelt die Daten des Busses in eine analoge äquivalente Information um.
Gegebenenfalls müssen zwischen dem Mikrophon und Lautsprecher und den Eingängen zum Gerät jeweils eine Verstärkerstufe angebracht werden.
Speicher:
Der Speicher bewahrt alle gesampelten Daten auf, sie werden hintereinander im Speicher abgelegt.
Adresse:
Der Speicher wird durch eine Adresse adressiert, die von diesem getakteten Zählwerk generiert wird.
Endzeiger:
Diese Komponente speichert die letzte Adresse, an der im Speicher ein gültiges Sample-Datum vorhanden ist. Also beim Beenden des Beschreibens des Speichers wird die aktuelle Adresse hier hinterlegt.
Somit kann garantiert werden, dass beim wiederabspielen nur "echte" Sampel-Daten ausgegeben werden.
Steuerwerk:
Dies ist die zentrale Steuereinheit. Sie steuert die Funktionen aller anderen Komponenten.
subtype bv_16 is bit_vector ( 15 downto 0 );
| Eigenschaften der Komponenten |
| Komponente | Signal | Typ | Aufgabe |
| Takt |
Takt |
out bit |
gibt den internen Takt |
| Komponente | Signal | Typ | Aufgabe |
| IO-Einheit |
enable |
in bit |
aktiviert diese Komponente |
| IO-Mode |
in bit |
übermittelt der Komponente den IO-Mode des gesamten Gerätes: '0' - Input Modus (Aufnahme) AD-Wandler aktiv, Daten auf Bus schreiben '1' - Output Modus (Abspielen) DA-Wandler aktiv, Daten vom Bus lesen |
| Takt |
in bit |
übermittelt der Komponente den internen Takt |
| data |
inout bv_16 |
16 Bit breiter Datenbus zum lesen und beschreiben |
| Komponente | Signal | Typ | Aufgabe |
| Speicher |
enable |
in bit |
aktiviert diese Komponente |
| IO-Mode |
in bit |
übermittelt der Komponente den IO-Mode des gesamten Gerätes: '0' - Input Modus (Aufnahme) Bus lesen und Daten speichern '1' - Output Modus (Abspielen) Speicher lesen und Bus beschreiben |
| Takt |
in bit |
übermittelt der Komponente den internen Takt |
| data |
inout bv_16 |
16 Bit breiter Datenbus zum lesen und beschreiben |
| Komponente | Signal | Typ | Aufgabe |
| Adresse |
enable |
in bit |
aktiviert diese Komponente |
| Takt |
in bit |
übermittelt der Komponente den internen Takt |
| reset |
in bit |
setzt den Zähler auf 0 |
| Adresse |
out bv_16 |
gibt die 16 Bit breite Adresse aus |
| Komponente | Signal | Typ | Aufgabe |
| Endzeiger |
save |
in bit |
veranlasst die Komponente die aktuelle Adresse aufzunehmen |
| reset |
in bit |
setzt die interne Adresse auf 0 |
| Adresse |
in bv_16 |
liefert der Komponente die 16 Bit breite Adresse |
| equal |
out bit |
signalisiert, dass die interne Adresse mit der aktuellen Adresse übereinstimmt |
| Komponente | Signal | Typ | Aufgabe |
| Steuerwerk |
play |
in bit |
Startet den Abspielprozess, falls i.M. möglich |
| rec |
in bit |
Startet den Aufnahmeprozess, falls i.M. möglich |
| stop |
in bit |
Stoppt den aktuellen Prozess |
| takt |
in bit |
synchronisiert die Steuereinheit |
| equal |
in bit |
zeigt an, dass das Ende der letzten Aufnahme / des Speichers erreicht wurde |
| IO-Mode |
out bit |
Setzt den IO-Mode des Gerätes '0' - Input '1' - Output |
| save |
out bit |
weist den Endzeiger an, die aktuelle Adresse zu speichern |
| enable IO |
out bit |
aktiviert die IO-Einheit |
| enable Adresse |
out bit |
aktiviert die Adress-Einheit |
| enable Speicher |
out bit |
aktiviert den Speicher |
| reset Adresse |
out bit |
setzt die aktuelle Adresse auf 0 |
| reset Endzeiger |
out bit |
setzt den Endzeiger auf 0 |
|
Funktionsweise der Steuereinheit
was passier bei betätigen der Rec / Play-Taste?
Grundzustand
Speicher, IO-Einheit, Adresse sind deaktiviert und Adresse wird gelöscht.
PLAY
1. Adresszähler starten
2. einen Takt abwarten
3. IO-Mode auf Output, IO-Einheit und Speicher aktivieren
4. warten bis Stop gedrückt oder equal signalisiert wird
5. in den Grundzustand zurück
REC
1. Adresszähler aktivieren, Endzeiger löschen
2. einen Takt abwarten
3. IO-Mode auf Input, IO-Einheit und Speicher aktivieren
4. warten bis STOP gedrückt oder equal signalisiert wird
5. aktuelle Adresse speichern
6. in Grundzustand zurückkehren
Sicherlich gibt es ein paar kleine Bugs, aber das Konzept im ganzen ist voll ausgereift.
Download des VHDL-Quellcodes (5,7 kByte Zip)