www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Audio-Projekt

Autor: TheMason (Gast)
Datum: 18.03.2007 00:04

Hallo,

ich habe mal wieder eine neue Version meines Audio-Projekts hochgeladen.
Zu finden unter :

http://www.mikrocontroller.net/articles/Audio-Projekt

Jeder der ein Spartan 3 Board hat und 1 oder 2 Audio-Codecs daran
ageschlossen bekommt kann den Audio-Prozessor nun benutzen.
Der DAP kann per RS232 (vom PC aus) oder per SPI (vom uC aus) gesteuert
werden.
Es können damit Mischpulte (ok 4 Mono-Eingänge ist nicht der Hit, aber
es ist ja noch ausbaufähig), Delays (später auch Chorus, Flanger),
Equalizer und Synthesizer mit gebaut werden.
Eine PC-Software zum steuern des DAPs existiert schon in einer
Roh-Version und wird dem Audio-Projekt noch hinzugefügt.
Weiterhin fehlt noch eine ausführliche Dokumentation des DAPs
(Befehlssatz, Arbeitsweise, Beispiele).
Aber alle diese Dinge werden im laufe der Zeit noch nachgereicht.

Ich möchte nochmals Werbung dafür machen das ich noch Leute suche die
Lust und Zeit haben an solch einem Projekt mitzuwirken, da ich denke das
man aus dem Projekt noch eine ganze menge machen kann.

Gruß
Rene
Autor: T.M. (Gast)
Datum: 18.03.2007 21:10

Ich hab mal probiert, das 6.2 Projekt mit ISE 9.1 zu implementieren.
Wenn man alle ressourcensparenden Optionen wählt, kommt das P&R durch.
Dafür alle Optimierungen auf Area stellen, die FSM-Codierungen auf
sequential, LUT into BRAM usw. Dann müsste es auch bei dir klappen. Wenn
ich neben der Arbeit noch Zeit finde, schaue ich auch mal in den Code
rein.
Autor: Ratze (Gast)
Datum: 19.03.2007 02:23

Du hast Dir ja eine Menge Arbeit gemacht. Aber um das zu nutzen, müsste
MIDI ran! Geht  das ?
Autor: TheMason (Gast)
Datum: 19.03.2007 08:39

@ratze

MIDI wäre dann die Aufgabe des uCs (der DAP ist ja auch per SPI
steuerbar). Da ich aber erstmal eine einfache Testschnittstelle haben
möchte (bis ich weiß was noch zu tun ist) ist RS232 vorgesehen.
Wenn ich die Doku fertig habe (kann noch was dauern) sollte es für jeden
sehr einfach sein selbst MIDI zu implementieren (egal ob über
MIDI-Buchsen, oder mal als anregung : Igor- oder obdev.at-USB für AVR,
welches als MIDI-Device fungiert, wär das was ?! :-))
Zu der Doku kommen dann noch ein paar Beispiele wie man Töne erzeugt und
Filterkoeffizienten berechnet, nebst Delphi Programm zum groben Testen.
Interesse ?

Gruß
Rene
Autor: Tom (Gast)
Datum: 19.03.2007 08:54

Darf ich mal fragen, welchen Codec du verwendet hast? Ich konnte da
keine Info zu finden.
Autor: TheMason (Gast)
Datum: 19.03.2007 10:26

@tom

den TLV320AIC23B von Texas Instruments. Steht in der Übersicht :-) (ok,
ist da etwas blöd platziert, werds noch in den Schaltplan packen)
Autor: Tom (Gast)
Datum: 19.03.2007 11:04

> TLV320AIC23B

Fettes Teil, genau was ich suche :)
Autor: TheMason (Gast)
Datum: 19.03.2007 11:07

den codec ?! na ja .. eher low-cost. aber für halbwegs gescheite tests
ausreichend und (was mir wichtig war/ist) single supply und wenig
beschaltung :-)) (soll ja noch hobby sein)
Autor: Tom (Gast)
Datum: 19.03.2007 11:10

Ja und vor allem der int. Verstärker. Nicht das das ein Problem wäre,
ist aber sehr angenehm.

Wo hast du das Teil gekauft?
Autor: TheMason (Gast)
Datum: 19.03.2007 11:18

hab ich als sample bei ti bekommen. kannst glaube ich 3 stück auf einmal
ordern.
Autor: TheMason (Gast)
Datum: 20.03.2007 11:41

@t.m.

hab mal etwas mit den optionen gespielt, aber der p&r kommt bei mir
nicht durch. welche optionen genau (ich hab mit dem optimierer noch
nicht so viel gemacht, von daher weiß ich nicht welche optionen speziell
für area gelten, bzw. welche optionen sich auf die area auswirken) hast
du eingestellt ?
kannst du mir evtl. screenshots von den optionsdialogen machen ?

gruß
rene
Autor: T.M. (Gast)
Datum: 20.03.2007 13:30

Ich werd heute Abend zH mal nachschauen, was ich eingestellt hatte.
Autor: TheMason (Gast)
Datum: 20.03.2007 13:36
Dateianhang: optionen.jpg (250,5 KB, 507 Downloads)
preview image for optionen.jpg

dank schonmal im voraus.
hier mal ein screenshot der optionen bei denen am wenigsten ungeroutete
signale nach dem par herauskommen.

gruß
rene
Autor: Dirk (Gast)
Datum: 20.03.2007 14:58

Hallo,

Respekt erstmal, ich haette nicht gedacht das es realisiert wird.

Ich benoetige für ein Design vielleicht die I2S Schnittstelle, weiss
jemand ca. wieviele Makros benoetigt werden, desweiteren ist es moeglich
die I2S Schnittstelle in ein CPLD zuquetschen oder werden DCM's benutzt?

Gruß,
Dirk
Autor: TheMason (Gast)
Datum: 20.03.2007 15:23

@dirk

dcm's werden keine benutzt. den i2s teil kannst du gerne verwenden.
musst wohl dran denken das dieser nur als slave arbeitet (seine clocks
also von außen bezieht). du müsstest den i2s teil aber anpassen da
dieser für 2 i2s signale ausgelegt ist (also 2 stereo ein und ausgänge,
ergo 4 mono ein und ausgänge).
bei 1 i2s signal (also 1 stereo ein und ausgang) müsste es in einen cpld
pressbar sein.
anzahl der flipflops für 1 i2s (grob übern daumen gepeilt) 2  2  24 =
96 flipflops fürs senden und empfangen, dann noch ca 6-7 flipflops für
die zähler, 6-8 fürs einsynchen und noch 2-3 für die statemachine, plus
ein paar ff's an die ich bestimmt nicht gedacht habe :-). in einen 95144
könnte (müsste) es also passen (wenn meine rechnung stimmt).
ansonsten : ausprobieren :-)

gruß
rene
Autor: Dirk (Gast)
Datum: 20.03.2007 15:26

Danke für die Einschaetzung!
Autor: T.M. (Gast)
Datum: 20.03.2007 22:55
Dateianhang: ise_einstellungen.tar (350 KB, 211 Downloads)

So, im Anhang sind die ISE-Einstellungen als *.jpg zu finden. Damit hat
er zwar auch ne Weile gebraucht, aber beim P&R kann alles geroutet
werden.
Autor: TheMason (Gast)
Datum: 21.03.2007 09:40

@t.m.

vielen dank. jetzt lässt es sich synthetisieren.
cool. mal schauen was sich noch zusätzlich in dem fpga unterbringen
lässt :-)) aber es scheint ja schon so zu sein das das dingen bald am
poller ist.

gruß
rene

Autor: TheMason (Gast)
Datum: 26.03.2007 18:49

Jetzt gibt es ein kleines Demo-Programm welches den DAP zum 3-Band
Stereo Equalizer macht (inkl. Audio-Demo).
Weitere Demos und Programme folgen ...
Autor: TheMason (Gast)
Datum: 29.03.2007 21:13

update : habe 3 weitere Demos hochgeladen und altes eq-demo upgedatet
(war kein stereo sondern ein mono-eq :-x)
jetzt gibt es ein Stereo Equalizer Demo, ein Synthesizer-Filter Demo,
ein Mixer-Demo und ein Delay (Chorus)-Demo.
Hoffe auf nachbau und Feedback

Gruß
Rene
Autor: TheMason (Gast)
Datum: 04.04.2007 19:54

update :

- codecs werden nun vom pc aus initialisiert (mit den demo-programmen).
allerdings funktioniert das nur mit der 6.2'er version (ise 9.1 hat es
trotz optimierung nicht geschafft das teil zu routen)
- habe neue audio-demos (mp3) hochgeladen. als audio-quelle dient ein
werkspreset meiner roland mc505-groovebox.

ich würde mich über ein feedback freuen (egal ob
demos/code-überflug/nachbau/artikel-statement).

gruß
rene
Autor: TheMason (Gast)
Datum: 11.04.2007 20:18

hat denn mal jemand das ganze mal getestet ? würde mich echt freuen mal
was feedback zu hören ....
Autor: Ephi (Gast)
Datum: 12.04.2007 10:49

Also ich hab mir mal die demos angehört:

also wenn das wirlich über deinen FPGA lief, dann kann der schon
allerhand, und die qualität ist dafür das dir die wandler atm egal sind
auch ganz gut!

wäre denn mit dem teil auch ein 16band EQ oderso möglich?
Autor: TheMason (Gast)
Datum: 12.04.2007 11:21

also 16 band eq mit 2 mono-kanälen ist möglich (habe ich zwar noch nicht
getestet aber rein rechnerisch kann ich 40 eq-filter insgesamt rechnen)
Autor: Axel (Gast)
Datum: 12.04.2007 16:40

Ich kenne das Projekt nicht, sitze aber des öfteren über einer
Resourcenplanung und würde dazu raten, Elementarzellen zu definieren,
die man iterative pipelinen kann. Dann werden Divider und solche
Prozesse sinnvoll ausgenutzt. Hier würde ich als eine Elementarzelle ein
solches Bandelement sehen. Dann kommt man zwar auf eine höhere additive
Latenz, aber das ist im Idealfall nur 1 Clock.
Autor: TheMason (Gast)
Datum: 12.04.2007 17:12

@axel

danke für den tip

also divider werden nicht genutzt, nur multiplizierer und addierer. wie
würde man denn am besten eine solche mac-einheit (multiply and
accumulate) in elementarzellen zerlegen ? ich habe mir auch schon
überlegt einen core-generator einzusetzen, wollte das aber bisher nicht
machen da ich zum einen gerne den code nach möglichkeit 1:1 (bis auf die
blockrams) auf einem altera ausprobieren möchte und zum anderen wollte
ich den mikrocode erstmal so belassen.
vielleicht das ich in einer späteren version das mal mache, aber im
moment wäre ohnehin nur ideenfindung für ein optimaleres design
angebracht, da ich erstmal feedbeck mit dem bestehenden system sammeln
möchte.
daher hoffe ich das mal jemand das ganze nachbaut.

gruß
rene
Autor: Ephi (Gast)
Datum: 12.04.2007 20:35

weil ja jeder der wasweisichwieviel millionen deutschen ein FPGA board
daheim hat ;)
Autor: TheMason (Gast)
Datum: 12.04.2007 23:00

das wirds wohl sein :-)

ok, gebs ja zu das die chance recht gering ist, das diese konstellation
(fpga-interessierte, leute die ein spartan 3 board haben, leute die an
audio interessiert sind, leute die sich den codec ans board anflanschen)
erfüllt ist ...

aber die hoffnung stirbt ja zuletzt :-)
Autor: T.M. (Gast)
Datum: 13.04.2007 11:12

[x] Spartan3-Board
[x] an Audio interessiert
[ ] Zeit, um sich die Peripherie zu basteln :-(

Aber vielleicht tut sich im letzten Punkt ja demnächst was, da steht
dein Projekt ganz oben auf der Liste :-)
Autor: Ephi (Gast)
Datum: 13.04.2007 17:14

was ist eigentlich der unterschied zwischen spartan 3 und virtex 4 und 5
außer das der 5er in 65nm gefertigt ist?
Autor: TheMason (Gast)
Datum: 13.04.2007 18:03

also den genauen unterscheid zwischen spartan und virtex kenne ich
nicht. ich meine das die struktur bei den virtexes etwas anders ist
(interconnects und clbs). und manche virtexes haben einen (oder mehrere)
powerpcs mit on-chip.
bin mir aber nicht ganz sicher.

gruß
rene
Autor: TheMason (Gast)
Datum: 17.04.2007 21:54

Update :

Delphi-Quellcodes zum EQ-Demo, Filter-Demo und Delay-Demo hochgeladen.
Autor: TheMason (Gast)
Datum: 20.04.2007 22:50

update :

audio demo eines synthesizers mit dem dap hochgeladen. der dap wird vom
pc aus gesteuert (hüllkurven, sequencer, filterkoeffizienten). ein
pc-programm zum steuern (inkl. quellcode) folgt bald
Autor: TheMason (Gast)
Datum: 23.04.2007 18:08

ich habe mich nochmals mit dem problem beschäftigt, das sich das design
nicht vernünftig mit ise9.1 synthetisieren lässt (unter 6.2 habe ich gar
keine probleme, da geht das ganze sogar richtig fix). ich bin langsam am
ende mit meinem (kleinen) latein. egal wie ich es anstelle : es gibt
immer probleme beim routen (selbst wenn ich einen spartan3 400'er nehme,
muß ich die optimierung einschalten, damit es überhaupt geroutet werden
kann).
die "ursache" liegt wohl in der MAC-Einheit.
da ich "einfach" nur 2 32 bit signed zahlen multipliziere (den *
operator) denke ich liegt da der hund begraben (kein pipelining->große
multiplizierer und addierer->viel interconnect-routing->problem).
nun denke ich das man den multiplizierer in pipelining machen müsste um
das problem zu umgehen. (jedenfalls würde mir hier nichts anderes
einfallen)
wie würde man eine solche operation (32x32 bit multiplizieren und
akkumulieren) am besten in ein pipelining schema pressen (nach
möglichkeit ohne irgendwelche core-generatoren zu benutzen da ich den
dap erstmal weitestgehend platform-unabhängig [abgesehen von den
blockrams] beschreiben möchte) ? wie würde man sowas am einfachsten in
vhdl implementieren ?

hoffe das mir da jemand helfen kann.
der quellcode zu dem "problem" ist im audio-projekt verfügbar. die datei
in der die mac-einheit steht ist "sdsp_core_mc.vhdl". (vielleicht findet
ja doch jemand eine andere ursache für das problem)

gruß
rene
Autor: Stefan Hanke (stefanhanke)
Datum: 23.04.2007 20:01

TheMason wrote:
> wie würde man eine solche operation (32x32 bit multiplizieren und
> akkumulieren) am besten in ein pipelining schema pressen (nach
> möglichkeit ohne irgendwelche core-generatoren zu benutzen da ich den
> dap erstmal weitestgehend platform-unabhängig [abgesehen von den
> blockrams] beschreiben möchte) ?

Ein Algorithmus von http://opencores.org benutzt folgende Dekomposition:
X*Y = (XH<<16+XL)*(YH<<16+YL) = XH<<16*YH<<16 + XL*YH<<16 + XH<<16*YL + XL*YH
Das ergibt 4 Multiplikationen mit der Hälfte der Bitbreite. Einmal
weiter, und du bist bei 16 Multiplikationen mit 8 Bit.

 -- stefan
Autor: TheMason (Gast)
Datum: 23.04.2007 20:08

hallo stefan,

das man eine 32x32 multiplikation in 4 16x16 aufteilen kann ist mir
klar. mir geht es nur darum wie man sowas am besten so in vhdl
implementiert das sich eine optimale pipeline-struktur ergibt, damit das
design ohne probleme in den fpga passt (egal ob mit 6.2'er ise oder
9.1'er), wenn das implementierungs problem von 9.1 denn wirklich an der
mac einheit (speziell dem multiplizierer ) liegt. und da ich nicht sooo
fit in vhdl bin würde mich mal interessieren ob dem wirklich so ist,
oder ob es an einer anderen stelle probleme gibt (wäre mir ehrlich
gesagt lieber, dann muß ich nämlich nicht zwangsweise den ganzen
micro-code umschreiben/neuschreiben/simluieren und und und ...)
aber dazu müsste man sich tiefer mit meinem quellcode auseinandersetzen,
und das ist für die erfahrenen hier im forum denke ich ein zeitproblem
... :-(

trotzdem danke für die anregung.

gruß
rene
Autor: fpga jolly (Gast)
Datum: 23.04.2007 22:39

Stefan und Hans, ich denke, daß nach der Synthes DASSELBE rauskommt,
auch wenn man es häppchenweise vorformuliert. Um diese Struktur zu
erzeugen und zu nutzen, müsste man schon ausdrücklich Register
dazwsichen setzen. Dann hat man eine schnellere pipline.
Autor: TheMason (Gast)
Datum: 24.04.2007 17:16

@fpga jolly

danke für den hinweis.
hoffe nur das es vielleicht irgendwie ohne pipeline geht, damit ich den
mikrocode nicht ändern muß (dauert inkl. simulation so lange ...)

@all

wäre schön wenn jemand mal über den code (speziell den
sdsp_core_mc.vhdl) gucken könnte und mir sagen könnte ob da vielleicht
eine formulierung drin ist die die probleme verursacht. möchte echt nur
ungern den multiplizierer durch ne pipeline ersetzen müssen.

gruß
rene
Autor: TheMason (Gast)
Datum: 01.05.2007 12:05

muß jetzt mal meckern ....

gibt es denn überhaupt niemanden der ein bischen feedback gibt ?
was sagt ihr zu den audio-demos ? (ich trau mich ja schon gar nicht zu
fragen ob mal jemand auf das design geguckt hat, oder geschweige denn
das es mal jemand ausprobiert hat, oder nachge baut hat) ich weiß ja das
schönes wetter und wenig zeit da ist, aber es ist echt ätzend wenn kaum
ein schwein was dazu sagt ... (ich weiß ja noch nicht mal wer lust hat
sowas nachzubauen bzw. daran mitzuwirken)
menno nu sach doch mal einer watt ... ist echt frustrierend wenn man
macht und tut und keiner was dazu sagt ...

so genug gemeckert

gruß
rene
Autor: Maik Ritter (kiamur)
Datum: 01.05.2007 15:22

Hi Rene!

Nach diesem (emotionalen) Aufruf schreibe ich dir mal ein Feedback.

Also ich bin stark beeindruckt von dem Projekt. Ich weiß nur nicht, wie
viel dir so ein Statement Wert ist von jemanden, der in der FPGA Welt
erst ganz am Anfang steht. . .

Ich habe mir mal die Demos angehört, und finde den Klang schon sehr gut.
Aber noch mehr beeindruckt mich das Wissen und das Durchhaltevermögen,
das hinter deinem Projekt steckt.

Grudsätzlich habe ich schon interesse daran, an so einem Projekt, wie
deinem, mitzuwirken. Leider habe ich kein eigenes FPGA Board, und in der
Firma, wo ich gerade bin haben wir nur Altera FPGAs. Außerdem schreibe
ich gerade meine Diplomarbeit, und deswegen keine Zeit. . .

Da ich aber Hobbymusiker bin, kann es durchaus sein, dass ich in naher
Zukunft anfange mich mit ähnlichen Dingen zu beschäftigen. Dann werde
ich vielleicht auf dich und dein Projekt zurückkommen, da es mich wie
gesagt schwer beeindruckt und das Thema auch interessiert.

Gruß
Maik
Autor: TheMason (Gast)
Datum: 01.05.2007 16:13

hallo maik,

erstmal danke fürs feedback. musste einfach nur mal eben meckern. ist
einfach nur was doof wenn so gut wie gar kein feedback kommt. und wert
ist mir eigentlich jedes feedback (außer von einem troll :-))).
ich seh mich im übrigen auch als anfänger (mache seit 2 jahren
hobbymässig vhdl, kann mich also mit einem berufsmäßigen professional
nicht messen, ist aber auch nicht mein anliegen).
das wissen zum synthesizer/audio-basteln selbst habe ich am pc erworben.
die umsetzung in vhdl war nur eine idee, die erstaunlich schnell
funktionierte, da ich schon vor knapp 1 1/2 schonmal einen versuch mit
einem audio-prozessor gemacht habe der gründlichst daneben ging, habe da
aber eine menge gelernt.
ich freue mich immer zu hören wenn jemand vorhat das nachzubauen, und
wenn wenig zeit da ist ist ja auch kein thema (bei dem schönen wetter
ists ja auch nur verständlich). hoffe aber trotzdem mal ab und zu was zu
hören, und das sich noch ein paar mehr leute an dem projekt beteilgen,
zumal ich das ganze auch gerne mal auf nem altera laufen sehen würde,
selbst aber kein altera board habe.
ansonsten, wenn du mal zeit und lust, ein board, und ein paar
funktionierende codecs hast kannst du ja gerne mal was testen.

gruß
rene
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 04.05.2007 15:37

Hallo,

ich verfolge das Projekt interessiert. Ich habe noch keine Hardware um
es live zu testen, aber ich versuche gerade ausschnittsweise mit GHDL zu
testen. Da gibt es allerdings ein Problem: du verwendest STD_LOGIC_ARITH
und STD_LOGIC_UNSIGNED, was nicht standardisiert ist und von GHDL nicht
unterstützt wird. Hättest du was dagegen, wenn ich das auf NUMERIC_STD
umstelle und im SVN committe?

Gruß
Andreas
Autor: Rick Dangerus (Gast)
Datum: 04.05.2007 16:16

@Andreas:

Zur Not kennt ghdl auch --ieee=synopsys. Aber den Code umstellen wäre
der saubere Weg.

Rick
Autor: TheMason (Gast)
Datum: 04.05.2007 17:54

hallo andreas,

mit dem umstellung ist kein thema, solange es sich noch mit ise noch
synthetisieren lässt :-). sonst sag mir einfach wenn du es eingecheckt
hast, dann teste ich das mal. bin leider nicht von selbst auf die idee
gekommen das man vielleicht besser einheitlich unsigned/signed statt den
misch-masch mit std-logic/signed verwenden sollte. :-/
muß auch noch die delphi sourcen einchecken, möchte aber erst das
synthesizer -demo fertig machen.

gruß
rene
Autor: TheMason (Gast)
Datum: 13.07.2007 13:09

Wiedermal ein Update :

 - es gibt nun ein SVN-Repository für das Audio-Projekt.
 - es gibt ein Synthesizer Demo (mit Quellcodes).
 - es gibt eine auf das Nexys Board angepasste Version (mit
Speicherinterface)
 - es gibt ein Audio-Codec Board im SVN Repository für Eagle.

Gruß
Rene
Autor: Jürgen Schuhmacher (Gast)
Datum: 05.08.2007 14:25

Wie wäre es mal mit einem Mono-Stereoprozessor?

Man nutzt den linken Kanal als Monoeingang, bzw. mischt bedarfsweise den
rechten dazu. (Das macht aber nur Sinn, bei reinen gepannten Signalen,
also Pegelstereofonie). Gfs müssen die Bässe weggeschnitten werden.

Von diesem Monosignal ausgehend erzeugt man ein Phasenverschobenes
Signal über Delay: optimal sind 20ms - 30ms  -> bei 48kHz wären das dann
etwa 1kB.

Diese Signal wird in der Größenordnung von etwa 25% bis maximal 50% dem
Original hinzugemsicht und zwar dem einen Kanal positiv, dem anderen
negativ.
Autor: TheMason (Gast)
Datum: 06.08.2007 07:39

@jürgen

also die einzelnen Komponenten (Filter und Delay) funktionieren ja
schon. Sollte machbar sein :-)
Autor: Techniker (Gast)
Datum: 06.08.2007 12:31

Wenn ich das richtig sehe, funktioniert das Ganze mit einer Art
Befehlsprozessor ?
Autor: TheMason (Gast)
Datum: 06.08.2007 12:43

@techniker

richtig. die befehle im PMEM (programmspeicher) werden dekodiert und an
den sdsp bzw. util core weitergegeben und dort ausgeführt. jeder dieser
kerne hat einen eigenen micro-code speicher in welchem jeweils 16
mögliche befehle drinstehen. somit hat der dap 32 befehle (16 befehle
pro kern, 2 kerne). was bzw wie man die befehle anordnet bleibt einem
selbst überlassen. und da man noch einfluß auf den micro-code speicher
hat kann man sich (im rahmen der möglichkeiten der beiden kerne) seine
eigenen opcodes bauen (oder bestehende optimieren).

@all

hat jemand schonmal den audio-prozessor aufgebaut ? kann mir dazu jemand
mal feedback geben ?

gruß
rene
Autor: Techniker (Gast)
Datum: 06.08.2007 13:09

Das FPGA ist also eine Art Coprozessor - verstehe. Was ist denn noch
alles an Modulen geplant?
Autor: TheMason (Gast)
Datum: 06.08.2007 13:17

im moment sind folgende sachen geplant :

- wavetable/sampling modul / opcodes (um samples als audio-quelle nutzen
zu können)
- ide-interface für harddiskrecording bzw. wiedergabe von audio-dateien
- interface zum einschleusen/auslesen von audio-daten via uC (z.b. arm7
oder so)
- opcodes für dynamik-einheit (ist allerdings etwas aufwendiger)
Autor: Jürgen Schuhmacher (Gast)
Datum: 06.08.2007 21:46

Die IDE Schnittstelle würde mich interessieren. Allerdings brauche ich
vorwiegend ein Digitalnterface und weniger einen 0815 Audio Codec.

Noch etwas zu dem Prozessor (und meinem Vorschlag des MS Wandlers): Ich
würde es bevorzugen, wenn das direkt in hardware gelöst waere.
Autor: TheMason (Gast)
Datum: 06.08.2007 22:01

@jürgen

also das harddiskrecording ist erstmal nur als grobe idee angedacht.
ich habe zwar schon eine idee wie man das am besten umsetzen kann,
allerdings werde ich dazu wohl auch noch einen steuerprozessor
(msp430/arm7) einsetzen der dann noch andere sachen machen kann.
das ide-interface als solches werde ich wohl per statemachines
realisieren. und dann wahrscheinlich auch nur im pio-mode (der
einfachheit halber).

was verstehst du unter digital-interface (i2s/spdif/tdm/adat ?!)
prinzipiell kannst du da alles anschließen was i2s unterstützt, solange
du in dem ganzen system einen master (und wenn es benötigt wird mehrere
slaves) der den dap versorgt (da dieser auch nur als slave arbeitet)

>Noch etwas zu dem Prozessor (und meinem Vorschlag des MS Wandlers): Ich
>würde es bevorzugen, wenn das direkt in hardware gelöst waere.

was meinst du damit, direkt in hardware gelöst ?
als fester algorithmus der "direkt" anläuft oder eine schaltung die
nichts anderes machen kann ?
prinzipiell kann man das mit dem dap auch machen. man muß nur das
programm mit dem der dap hochfährt ändern (beim booten des fpgas wird
auch direkt ein programm für den dap geladen).

gruß
rene
Autor: Jürgen Schuhmacher (Gast)
Datum: 07.08.2007 13:30

Ok, das durchschaue ich jetzt nicht so genau, aber es klang so, als ob
der DAP einzelne Befehle abarbeitet. Damit den Stereoprozessor zu
realsieren (oder andere Effekte) wäre umständlich, platz und
Zeitfressend, bzw es würde eine ordentliche Latenz produzieren.

Ich mache solche Sachen derzeit mit einer "programmierbaren" Soundkarte,
die einen 56301 benutzt. Dort man das einstellen. Ich will aber hin zu
einer hardware-Lösung mit fester Codierung, da gerade solche "low-level"
Aktionen praktisch ohne großen Flächenbedarf im FPGA laufen - abgesehen
vom Delay-RAM.

Zum DIGI : Ich benötige zunächst SPDIF - ADATA optical wäre aber
dernächste Schritt.

Was vor allem passieren muss, ist ein flexibles Sampling und Resampling
auf "analoger " Ebene mit externer Synchronisation. Damit bekommt man
zwar 2 worte Latenz - aber einen Datenstrom OHNE zusätzliche
jitter-Artefakte.

Ich habe bisher noch kein System am Markt gefunden, das das kann!
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 07.08.2007 13:54

Wieso würde das Latenz erzeugen? Die paar Befehle sind doch in ein paar
Takten abgearbeitet.
Autor: Jürgen Schuhmacher (Gast)
Datum: 07.08.2007 14:39

Du brauchst ja auch noch Verwaltung, um die Befehle abzuarbeiten und
ausserdem sehe ich einen deutlichen Mehraufwand darin, eine allgemeine
Hardware per Befehle dazu zu bringen, diese Grundfunktion zu
realisieren.

Mal abschätzt sähe das so aus:

RAMWR++;
RAM(RAMWR) = INPUT
RAMRD = RAMCNT + 960;
M = RAM(RAMRD)
L = M - INPUT * k;
R = M + INPUT * k;

Macht schonmal 5 sequenzielle Befehle. GEschätzt 10 CLK-Zyklen

Der nächste Punkt: Auch ein "paar Befehle" sind immer Latenz. Bei fest
verdrahteter Hardware kann ich die genau berechnen und bei der
Verarbeitung anderer Datenströme mit berücksichtigen.

Die Funktion dieses hardware-Prozessors wird damit für mich auch
nutzlos, da ich mit meiner €85,- Soundkarte (gebr Soundscape Mixtreme)
schon jetzt schneller bin!
Autor: TheMason (Gast)
Datum: 07.08.2007 14:43

@jürgen

ich geh mal (kurz) darauf ein :

es wird pro sample (also alle 20us @ 44khz) das komplette programm
sequentiell (!) abgearbeitet.
da der fpga mit 50mhz läuft hat man bei 44khz etwa 1000 takte. in diesen
werden die befehle geholt, dekodiert und ausgeführt.
rein theroretisch hast du somit eine latenz von nur 1 sample (plus noch
2 samples für den transfer vom/zum wandler)
die latenz die man vom pc her kennt kommt nur dadurch zustande das der
pc keine so schnelle reaktion auf ein sample zeigen kann. da werden
mehrere samples zwischengepuffert (das ergibt dann die latenz) und
zeitversetzt abgearbeitet.
der dap hat also eine geringe latenz.

gruß
rene
Autor: Jürgen Schuhmacher (Gast)
Datum: 07.08.2007 14:49

Ach ja, noch eins : Ich benutze das DELAY RAM auch als Echo-RAM für die
Kurzreflexionen und den Hall. Der Faktor k wird so eingesetzt, das er
das DECAY kompensiert. Damit kriege ich in der Addition oben auch diese
Infos mit rein. Erzeugt werden die KR jeweils mit Zählern, die ein Delay
beinhalten und voll parallel laufen.

Der eigentliche Schritt, nämlich die Synthese des L-R-Signals läuft
damit in einem einzigen CLOCK! Der Rest an vorbereitender Rechnerei ist
voll parallel, wobei die Stereofunktion nur aus einem einzigen RAM-Write
besteht, der aus einem Addierer (mit den geloopten REFs) besteht.

Wenn ich mit statischen Refelxionen arbeiten würde, benötigte ich gerade
mal 1 Clock, 3 24Bit-Multiplier und 4 Addiere, sowie die Zählschleife.

Die Stereofunktin mit fester Verstärkung (50%Mix) braucht gerade mal 2
Addierer!

Baue das mal in Software nach.
Autor: Jürgen Schuhmacher (Gast)
Datum: 07.08.2007 14:53

@Mason:

Man hat also (wie üblich bei DSPS) für alle Prozesse, die man
programmiert zusammen ein Sample Zeit. Das ist sowoeit klar.


>2 samples für den transfer vom/zum wandler)
Das ist unvermeidbar ?

>die latenz die man vom pc her kennt kommt nur dadurch zustande das der
pc keine so schnelle reaktion auf ein sample zeigen kann

Das ist auch klar. Die o.a. Karte arbeitet aber nicht über Software,
sondern kriegt von der Controllsoftware lediglich die Config. Die
Funktion arbeitet unten in hardware. Soweit ich das sehe auch innerhalb
eines samples.
Autor: TheMason (Gast)
Datum: 07.08.2007 17:03

@jürgen

nur mal eben am rande : mir geht es nicht darum gegen einen 56xxx oder
sharc oder blackfin "anstinken" zu wollen, das ist hoffentlich klar,
oder ?
mein ziel ist es vielmehr eine (einfache) plattform aufzubauen mit dem
audio-signale (einigermaßen) flexibel bearbeitet werden können. falls
damit auch noch hd-recording (da bin ich ja schon froh wenn ich
überhaupt 4 mono kanäle schaffe) möglich ist, ists doch prima. ein
synthesizer, einfache effektgeräte und ein kleines mischpult
funktionieren ja schon.
das man einige operationen (z.b. deinen ms-wandler) mit einem fpga
sicherlich sehr elegant lösen kann ist klar, aber dann hättest du nur
eben diese eine funktion. wenn du das als einzelnen opcode in meinem dap
haben möchtest muß man auf micro-code ebene herunter. und kannst dabei
noch parametrieren (z.b. mischungsverhältnis, oder grenzfrequenz um die
bässe nur in die mitte zu legen, oder oder oder ...)

>2 samples für den transfer vom/zum wandler)
>Das ist unvermeidbar ?

bei dem design das ich verwende ist es unvermeidbar (brauche immer noch
ein daten register neben dem schiebe-register), aber ich wüsste nicht
warum das schlimm sein sollte, immerhin sind 3 samples (2 für i/o, 1 für
die verarbeitung) gerade mal 60us. eine soundkarte hat deutlich mehr,
und eine creamware-karte wollte ich ja auch nicht aufbauen :-)
Autor: TheMason (Gast)
Datum: 01.09.2007 17:03

hat eigentlich jemand mittlerweile den DAP auf dem nexys board mal
ausprobiert und kann mir feedback geben ?
Autor: TheMason (Gast)
Datum: 19.01.2008 21:09

ist das projekt so unattraktiv ?
fehlen soviele informationen ?
sagt doch mal was ...
Autor: Thomas H. (supergrobi)
Datum: 20.01.2008 11:11

Hallo Mason,

super Projekt ! Wollte mir das immer mal aufspielen, mir fehlt leider
nur die Zeit :) hab das Nexys und auch die Codecs. Hab es aber noch
nicht geschafft, Leiterplatten für die Codecs zu ätzen...

Freue mich aber riesig, das demnächst mal auszuprobieren... !
Ist also auf gar keinen Fall unatraktiv !!!

gruß
Thomas
Autor: Thomas H. (supergrobi)
Datum: 14.02.2008 18:36

So, ich hab mir jetzt mal den Audio Codec nachgebaut, hat aber leider
nicht funktioniert. Ist es richtig, das der Mode Eingang auf GND liegt ?
Das wäre ja nach Datanblatt Two Wire...

kann man irgendwie nachvollziehen, ob der Codec richtig initialisiert
wurde ?

Der Quarz ist 12 MHz, richtig ?

Hab die Platine noch mal neu geroutet, damit ich eine einseitige Platine
habe... muss das noch mal durchgehen, hatte keine Lust mehr :)

Gruß
Thomas
Autor: TheMason (Gast)
Datum: 14.02.2008 19:35

@thomas

ich hab im schaltplan an den wichtigsten pins zum connector überall
doppelt und dreifach widerstände vorgesehen. zum einen um gegen
kurzschlüsse zu schützen, und zum anderen damit man durch weglassen sich
den codec "vorkonfigurieren" kann.
z.b. kann man indem man entweder r5 oder r18 weglässt das dingen als spi
oder twi konfigurieren.
mit r19 bzw. r23 wird bestimmt ob der codec mit dem quarz laufen soll
oder seinen clk über pin 1 des connectors bekommt.

die initialisierung mache ich meist so :

- codec resetten (register 15)
- device als master
- clk divider setzen
- audio routing setzen (zum testen das bypass-bit setzen)
- den rest (power off/lautstärken/usw).

dann schaue ich nach ob der quarz schwingt und ob BCLK und LRCLK
anliegen und ob an DOUT etwas zappelt. wenn dem so ist funktioniert der
codec.

einen 12mhz quarz kann man ebenfalls verwenden, muß dann aber das
clk-divider register richtig setzen.

also der codec ist von der beschaltung her recht einfach und auch die
initialisierung ist super-simpel. ich hatte bisher eigentlich nie große
probleme damit.
vielleicht konnte dir meine kleine anleitung etwas helfen.
wenn du noch fragen hast, frag ...

gruß
rene
Autor: Rene Böllhoff (themason) Benutzerseite
Datum: 07.05.2008 22:28

Mal ein kleines Zwischenupdate.

Im Audio-Projekt-Artikel habe ich vor einiger Zeit ein paar Bilder eines
Aufbaus des DAP's hochgeladen. Der DAP läuft in einem FPGA Board welches
von Thomas Pototschnig designt worden ist (miniGA). Das Bild ist unter
"DAP mit selbstgelötetem FPGA Board" zu finden.
Gesteuert wird der DAP von einem AVR (im moment mega32, wird demnächst
aber ein mega644). Das Bild dazu ist in der Picture-Gallery :-)

Das ganze funghiert als Synthesizer, bzw. soll ein solcher werden, bzw.
ist dabei einer zu werden (und wie ich finde ein recht guter :-)).

Kurzer Umriss :
 - 3 Oszillatoren
 - 2 Filter (seriell/parallel)
 - 2 LFO's
 - 2 Hüllkurven
 - Einspeisung eines externen Audio-Signals (wird zu den Oszis gemischt)
 - Modulationsmöglichkeiten (imm aufbau)
 - Delay (im aufbau)
 - Chorus (im aufbau)
 - EQ (im aufbau)

Das ganze ist schon per MIDI steuerbar (allerdings funktioniert der SW
UART noch nicht richtig, mit dem ich alle Parameter von außen steuern
möchte, also kann ich momentan nur einige wenige Parameter per
MIDI-Controller steuern).
Zum Einstellen aller Parameter habe ich ein UI-Board gebaut welches
einige Potis (16), Schalter (11) und LEDs (24) sowie ein Display und
einen Drehgeber enthält. Leider habe ich beide Platinen noch nicht
erfolgreich miteinander reden lassen können. Kommt aber noch.
Was noch zu umzusetzen ist, ist ein Delay, Chorus und EQ als
Effektsektion, dann ist der Synth von der Funktionalität (und von meinem
persönlich gesteckten Ziel) her komplett.
Wenn ich am Wochenende Zeit finde mache ich mal ein Audio und evtl.
Video Demo des Synths.
Sobald das Teil fertig ist (es fehlt wie gesagt nur noch die
Kommunikation zwischen beiden Platinen, die SW ist größtenteils fertig)
werde ich das gesamte Projekt (Schaltpläne, Sourcen, Bilder, Audiodemos,
usw.) mit in das Repository aufnehmen, auf das das jemand nachbauen möge
(sofern Zeit vorhanden :-))

Gruß
Rene
Autor: Dirk (Gast)
Datum: 08.05.2008 08:55

Hallo Rene,

ich finde das Projekt sehr interessant. Für mich stellt
sich die Frage, ohne das Projekt im Detail zu kennen,
ob Du nicht auf dem Spartan 3 einen Softcore einsetzen
möchtest, z.B. soc-lm32, siehe hier:

https://roulette.das-labor.org/bzrtrac/wiki/soc-lm32

um den externen Mikrocontroller einzusparen.

Gruß Dirk
Autor: TheMason (Gast)
Datum: 08.05.2008 10:35

Hallo Dirk,

kann man sicherlich machen. Dazu muß das derzeitige Design aber komplett
überarbeitet werden, da durch die verwendung des 32x32 bit
multiplizierers so wie er implementiert ist sehr viele ressourcen
(speziell interconnects) verbraten werden die erweiterungen sehr
erschweren. (bin ja schon heilfroh das ich das design überhaupt in einen
spartan3 200 geprügelt bekommen habe, und selbst in einem 400'er wirds
eng).
allerdings benötigt die softcore cpu dann noch einiges an speicher, da
man um floating-point rechnereien für die filterkoeffizienten nur schwer
drum herum kommt. daher braucht der steuernde uC einiges an speicher
(schließlich soll der ja nicht nur die koeffizienten berechnen, sondern
auch alle anderen elemente bedienen wie lfo's, hüllkurven, modulation,
midi usw ...)

gruß und danke für den link
rene

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.