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
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.
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 ?
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
Datum: 19.03.2007 08:54
Darf ich mal fragen, welchen Codec du verwendet hast? Ich konnte da keine Info zu finden.
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)
Datum: 19.03.2007 11:04
> TLV320AIC23B
Fettes Teil, genau was ich suche :)
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)
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?
Datum: 19.03.2007 11:18
hab ich als sample bei ti bekommen. kannst glaube ich 3 stück auf einmal ordern.
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
Datum: 20.03.2007 13:30
Ich werd heute Abend zH mal nachschauen, was ich eingestellt hatte.
Datum: 20.03.2007 13:36
dank schonmal im voraus. hier mal ein screenshot der optionen bei denen am wenigsten ungeroutete signale nach dem par herauskommen. gruß rene
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
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
Datum: 20.03.2007 22:55
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.
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
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 ...
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
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
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 ....
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?
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)
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.
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
Datum: 12.04.2007 20:35
weil ja jeder der wasweisichwieviel millionen deutschen ein FPGA board daheim hat ;)
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 :-)
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 :-)
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?
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
Datum: 17.04.2007 21:54
Update : Delphi-Quellcodes zum EQ-Demo, Filter-Demo und Delay-Demo hochgeladen.
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
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
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
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
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.
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
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
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
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
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
Datum: 04.05.2007 16:16
@Andreas: Zur Not kennt ghdl auch --ieee=synopsys. Aber den Code umstellen wäre der saubere Weg. Rick
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
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
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.
Datum: 06.08.2007 07:39
@jürgen also die einzelnen Komponenten (Filter und Delay) funktionieren ja schon. Sollte machbar sein :-)
Datum: 06.08.2007 12:31
Wenn ich das richtig sehe, funktioniert das Ganze mit einer Art Befehlsprozessor ?
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
Datum: 06.08.2007 13:09
Das FPGA ist also eine Art Coprozessor - verstehe. Was ist denn noch alles an Modulen geplant?
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)
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.
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
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!
Datum: 07.08.2007 13:54
Wieso würde das Latenz erzeugen? Die paar Befehle sind doch in ein paar Takten abgearbeitet.
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!
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
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.
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.
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 :-)
Datum: 01.09.2007 17:03
hat eigentlich jemand mittlerweile den DAP auf dem nexys board mal ausprobiert und kann mir feedback geben ?
Datum: 19.01.2008 21:09
ist das projekt so unattraktiv ? fehlen soviele informationen ? sagt doch mal was ...
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
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
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
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
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
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
