Forum: FPGA, VHDL & Co. Frage zu Optimierung


von TheMason (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin dabei mir einen Audio-Prozessor in meinem Spartan3-FPGA zu
implementieren. Im ersten Schuß hab ich mal eine State-Machine gebaut
die einen Oszillator und einen IIR-Biquad enthält (quasi Grundgerüst
für einen Synthesizer). Mit der Simulation bin ich soweit zufrieden,
Oszi funtz, Biquad funzt). Allerdings weiß ich nicht wie ich das dingen
schneller bekomme. Laut ISE liegt die maximale Geschwindigkeit bei
98Mhz. Und das finde ich doch etwas lahm (zumal es ja nur der erste
Schuß ist, und im zweiten Schuß ein Programm per Block-Ram abgearbeitet
werden soll, also keine feste State-Machine).
Mir ist aufgefallen das sobald ich einen 32x32Bit multiplizierer
verwende das teil sofort elend langsam wird. Wenn ich nur den
Oszillator verwende komme ich laut ISE weit über 500MHz, bei verwendung
eines einzelnen 32x32 Bit Multiplizierers sackt die geschwindigkeit
direkt auf unter 150MHz. Ich muß dazu sagen das ich von den
Timing-Constraints die Finger bisher von gelassen habe, weil ich an die
Timings keine exakten Anforderungen stelle. Ich überlasse es dem
ISE-Tool die geschwindigkeit rauszuholen die maximal drin ist.

Die eigentliche Frage ist für mich nun, wie bekomme ich die
Multiplikation schneller ? Ich hab mal gehört das wenn man eine
geclockte Multiplikation (Komponente ?!) verwendet diese deutlich
schneller wird. Ich möchte im moment noch auf pipelining-techniken
verzichten, da ich mit der ganzen DSP'erei noch nicht soweit bin.
Falls es eine Komponente gäbe, wie wäre diese anzusprechen wenn ich
eine 32x32Bit Signed (!) Multiplikation realisieren möchte ?

Schonmal vielen Dank vorab und Gruß
Rene

PS. Das Design ist etwas "konservativ" aber dafür recht einfach zu
verstehen denke ich. Für Kritik und Verbesserungsvorschläge am Design
bin ich immer offen (ich weiß aber schon das ich 2 Multiplikationen
gleichzeitig machen kann *gg)

von high_speed (Gast)


Lesenswert?

Hallo TheMason

Hast du deinen Code mit Tabulatoren geschrieben?
Als ich ihn  mit ConTEXT geöffnet habe, sieht er sehr unübersichtlich
aus.
Ich schreibe lieber mit Leerzeichen, denn die können besser von
verschiedenen Editoren interpretiert werden.

MfG
Holger

von TheMason (Gast)


Lesenswert?

Hallo Holger,

ich habs mir angewöhnt mit tabs zu arbeiten. wenn man Tabsize = 2 nimmt
siehts recht schick und übersichtlich aus :-))
Ich weiß geht auch anders, aber hat sich bei mir so eingbürgert (und
trotzdem fluche ich jedesmal von vorne wenn ich modelsim aufmache *gg)

hast du denn evtl. schon eine idee ?

gruß
rene

von Christian (Gast)


Lesenswert?

Hmm, ohne dein Design jetzt ausführlich zu studieren und als
Schnellschuss... ;-)
Versuche doch mal, die Xilinx Makros zu nutzen. Das sind 18bit
Hardware-Multiplizierer und man kann sie mit dem Coregen einfach zu
breiteren Multiplizierern verbinden uns sich Wrapper erstellen lassen.
Die Makros sind um längen schneller, als komplett in Logik erstellte
Multiplizierer!

von TheMason (Gast)


Lesenswert?

Hallo Christian,

wie kann man denn diese Makros nutzen ? (vor allem 32 bit signed, ohne
jetzt 4 Makros mit logik zu einem 32x32 Bit signed-Multiplizierer zu
verdröseln) Der Coregen sagt mir ich kann nur die DCMs nutzen. (hab nur
die ISE Version die bei meinem Spartan3 Starter-Kit dabei war,und die
unterstützt wohl anscheinend nicht alles)
Weiterhin ist mir aufgefallen das der ISE mir schon auflistet das er
doch für eine 32x32Bit Multiplikation 4 18x18Bit Multiplizierer
braucht. Deswegen bin ich ja auch so stutzig geworden das das design so
lahm ist.

Gruß
Rene

von FPGA-User (Gast)


Lesenswert?

@The Mason

Dein Code muss zwangsläufig langsam sein. Habe 5 Multiplikationen
gesehen, deren Ergebnisse alle in <siTMP_Var64> abgelegt werden.
Das produziert 2 riesige Multiplexer vor dem Multiplizierer,
jeweils max. 5x32-zu-1x32. Dazu kommt noch die Statemachine mit
den vielen States, die auch noch ausdekodiert werden und da
mit reinkommen. Also zu viel Kombinatorik, zu wenig Pipelining.

Ideal wäre:
Je 1 32bit-Register vor den Eingängen des Multipliers, 1 Register
am Ausgang. Das könnte aber zur Folge haben, dass Du mehr Takte
brauchst, um zum Ergebnis zu kommen oder dass es beim IIR-Filter
im Rückkoppelzweig gar nicht geht, wenn man pro Takt 1 Sample
haben möchte.
Ein 32bit Multiplier, signed mit 2 variablen Faktoren ist eben kein
Addierer. Wenn 1 Faktor konstant wäre, könnte man besser optimieren.
Brauchst Du bei dem Audio-Prozessor mehr als 100 MHz für das Filter?

von FPGA-User (Gast)


Lesenswert?

@TheMason

im ersten Schritt würde ich versuchen, mal die ganzen Zeilen

siTMP_Var64 <= (siOscOutput * siBQ1CofB1); ...

zu ersetzen durch (Bsp.) :

faktor_1 <= siOscOutput; -- faktor_1 = 32 bit Register
faktor_2 <= siBQ1CofB1; -- faktor_1 = 32 bit Register

Und den Multiplier dann außerhalb der FSM machen:

result <= faktor_1 * faktor 2;

Überblicke jetzt nicht so schnell, ob das so geht, aber das
wäre ein erster Ansatz für mehr "Durchsatz"

von TheMason (Gast)


Lesenswert?

hallo fpga user,

habe deinen beitrag nur kurz überflogen, werde gleich noch kurz was
dazu schreiben, bin aber eben erst noch unterwegs.

danke schonmal für den hinweis.

gruß
rene

von FPGA-User (Gast)


Lesenswert?

hallo rene,

hab nochmal genauer geschaut, das Problem ist natürlich, dass
die Ergebnisse des Multis wieder für andere Additionen o.ä.
benötigt werden, also Du wirst nicht drumrum kommen, die
einzelnen Schritte und Zwischenergebnisse mal sauber
nacheinander aufzuschreiben. Dann müsste man prüfen, wann
welches Ergebnis frühestens gebraucht wird.

Könnte auf einen Kompromiss hinauslaufen: höhere Taktfrequenz
aber dafür mehr Takte bis zum Ergebnis oder umgedreht.

von TheMason (Gast)


Lesenswert?

Hallo FPGA User,

erstmal danke für die Infos. Das mit der Multiplikation ausserhalb der
FSM werd ich mal ausprobieren. Dadurch das ich die ganzen States ja eh
nur sequentiell abarbeite dürfte es gehen.

Zu deiner Frage wegen den 100MHz. Mir geht es darum das ich im 2. Schuß
einen programmierbaren Audio-Prozessor implementieren will. Das
Grundgerüst ist schon fertig (kann ich gerne mal reinstellen). Dort
wird  statt fester Register Block-Ram verwendet. Der ganze Prozessor
ist so organisiert (oder soll so organisiert sein) das man mit jedem 32
Bit Programm-Wort (Block-Ram) ein Modul aufruft (ein Modul besteht dann
aus x-States innerhalb einer großen State-Machine). Sprich 5
Programmwörter ergeben das was ich momentan mit der festen Statemachine
mache (Oszillator rechnen, Audio-Wert im Block-Ram verschieben , Biquad
durchrechnen, Wert Ausgeben, Ende).
Mir ist es im Prinzip egal wieviele Takt-Zyklen pro "Modul" benötigt
werden (ich brauche eh schon 2-3 Zyklen nur um ein Datenwort aus dem
Block-Ram zu holen oder zu speichern). Es geht sich mir einzig und
allein um die Geschwindigkeit mit der die ganze Geschichte laufen kann.
Wenn ich 500 MHz erreiche (ok, ist etwas utopisch ...) habe ich ca.
10000 Takte pro Sample (bei 48KHz) und dann interessiert es mich nicht
mehr viel wieviel ich für ein Modul benötige (wer braucht schon 100
Biquads *gg).
Wie gesagt das ist der 2. Schuß. Ich möchte nicht einen reinen DSP
implementieren, da mir dann das implementieren der einzelnen Module
(Oszillator, Biquad, Clipping, usw.) zu aufwendig ist bzw. mein
Block-Ram zu schnell verbraucht ist, und ich noch andere Sachen in den
FPGA drücken wollte (z.B. VGA-Text Interface).
Zu dem was du zu dem Biquad gesagt hast :
Ich glaube es lässt sich nicht wesentlich anders realisieren, da es eh
auf 5 multiplikationen, 5 additionen und 4 verschiebe operationen
hinausläuft (wobei erst die rechnerei und dann die schieberei kommen
muß) mir ist klar das man da noch parallelisieren kann (2
multiplikationen gleichzeitig), aber es braucht auch mehr
multiplizierer, und ich wollte nicht alle ressourcen dafür verballern.

vielen dank für die infos und für anregung und weitere infos danke ich
schonmal im voraus

schönen gruß
rene

von TheMason (Gast)


Angehängte Dateien:

Lesenswert?

hallo fpga-user,

ich habs mal probiert die multiplikation ausserhalb der fsm, aber noch
innherhalb des prozesses zu legen. es brachte zumindest einen
teilerfolg. statt 98 mhz habe ich jetzt 123 mhz. aber der weisheit
letzter schluß ist es wohl nicht.

mir ist noch was aufgefallen :
in dem beispiel-code ist mal ein einfacher oszillator implementiert.
synthetisiere ich den mit multiplikation komme ich auf 270 mhz. ohne
schafft der dann 520 mhz. kann es sein das die multiplizierer nicht
mehr als 270 mhz machen ? wäre das evtl der grund warum es nicht
schneller geht (vor allem wenn man 32x32 bit macht bei denen ja 4 stück
gebraucht werden) ?

schönen gruß
rene

von FPGA-User (Gast)


Lesenswert?

hallo rene,

klar sind die Multiplizierer das langsamste Teil in Deinem
Design, logisch, es ist ja auch die komplizierteste Rechen-
operation von denen die Du verwendest.
Wenn 4 Multis 18x18 zusammengebaut werden, um 32x32 zu erhalten,
wirds natürlich noch langsamer.
Wenn Du für die 2 Faktoren und für das Ergebnis jeweils 1 Register
spendierst, dann wird die max. Taktfrequenz nur noch von der
Geschwindigkeit des Multiplizierers abhängen. Die kannst Du
dann nur noch steigern, wenn Du ein schnelleres Device nimmst
oder die Bitbreiten noch optimieren kannst.
Es wäre auch einen Versuch wert, ein Timing-Constraint speziell
für den Multiplizierer zu setzen. Dann siehst Du recht schnell,
was die Synthese noch machen kann.
Der einzige Ausweg ist dann noch, mehrere Multis parallel laufen
zu lassen, auf Kosten des Stromverbrauchs und der Ressourcen.

von TheMason (Gast)


Lesenswert?

Hallo fpga-user,

erstmal danke für die infos. hab schon fast sowas befürchtet. na ja. da
werd ich wohl mit 123 mhz auskommen müssen. sind immerhin 2700 takte pro
sample. hoffe mal das die große state-machine für den 2. schuß mir dabei
keinen strich durch die rechnung macht und das dingen noch langsamer
wird.
werde aber wohl 2 32x32 bit multis verwenden um die biquads schneller
zu machen. die restlichen multis werden wohl für andere aufgaben
herhalten müssen (wenn denn am schluß überhaupt noch was in den fpga
reinpasst *gg)
jedenfalls bin ich mit dem biquad echt sehr zufrieden. die simulation
sieht super aus (richtig schön mit runden ecken und überschwingen,
falls gewollt *gg). dann dürfte mein audio-prozessor ja doch noch was
geben. und falls es nicht reicht werd ich wohl nen virtex nehmen müssen
(immer dieses mit "spatzen auf kanonen schießen" *ggg)

jedenfalls erstmal vielen dank und einen schönen gruß

rene (der sicher noch öfter fragen haben wird *gg)

ps. falls jemand mit biquads, oszillatoren und synthesizern was machen
möchte, fühlt euch frei meinen code zu verwenden wenn ihr ihn den
brauchen könnt. :-)

von Kest (Gast)


Lesenswert?

Ich finde sehr interessant, was du da machst!
Wie kommen bei Dir die audiodaten rein? Welche Wandler nimmst Du? Oder
digital?

Ich würde da auch sehr gerne mal experementieren. Habe auch schon mal
fünfband Equalizer mal gemacht, hat gut funktioniert. Das ganze Ding
lief bei 33 MHz (Virtex irgendwas, systembedingt) Erst wollte ich alles
paralell machen, dann machte ich doch seriell... Na ja. egal.
Auf jeden Fall, werde ich Dein Projekt weiterverfolgen :-)

Ich denke, Spartan 3 sind sehr leistungsfähig, Virtex's sind Overkill
total. Ich denke, Du solltest alles genau definieren, wie alles
ablaufen soll. Erzähl mal bitte genauer über die Anbindung, Spartan 3-
Starterkit habe ich hier, und auch andere Altera sachen, aber ohne
Audiocodec :-( Vielleicht kann ich irgendwie helfen, oder was
beitragen.

Gruß
Kest

von TheMason (Gast)


Lesenswert?

Hallo Kest,

erstmal danke für die Blumen :-))

Ich hab im moment noch keine echten wandler dran. ich mache das über
einen vhdl-selbstgebauten 8bit-d/a-pwm mit einfachem nachgeschalteten
filter *gg (man ist ja faul). audio-eingänge hab ich noch nicht.
wenn ich mal soweit bin (ich hoffe doch bald *gg) werde ich codecs
nehmen. sehr wahrscheinlich den TAS3004 (war es glaube ich) von ti. der
hat nen ad/da wandler, nen dsp mit drin, recht wenig beschaltung und es
gibt die dinger als samples.

mein ziel ist es einen audio-porozessor zu bauen der quasi aus modulen
besteht (oszillatoren, biquads, addierer, multiplizierer (für
verstärker/abschwächung), switches, evtl rms, envelope usw.).
jeder opcode im programmspeicher soll dabei ein modul-aufruf
darstellen. es gibt dabei einen audio-speicher, einen daten speicher,
und einen eigenen speicher für biquad-daten (damit das block-ram nicht
so schnell auf ist, und evtl für spätere
geschwindigkeitsoptimierungen).
angesteuert wird das ganze über spi. (hab da auch schon ein paar
brauchbare komponenten für). man ist dabei unabhängig vom prozessor und
wenn man dann noch auf die idee kommen sollte eine sd/mmc karte zu
nehmen hat man ein flexibles audio-system (sprich
synthie/effektgerät/mischer/vocoder ....)

das ist mein erklärtes ziel. habe auch schon wie gesagt ein
grundgerüst, allerdings noch nicht simuliert und bei weitem noch nicht
fertig.
im moment bin ich dabei (wie oben schon erwähnt *gg) einen synthesizer
zusammenzubasteln. mittlerweile hat das teil 2 oszillatoren und 2
biquads die auch soweit laufen (zumindest in der simulation).
das ganze braucht 68% des spartans.
muß das ganze jetzt nur noch mit meinem msp verheiraten und dann dürfte
da der erste 8 bit sägezahn mit resonanz rauskommen *ggg
ich weiß nicht was du im audio-bereich schon gemacht hast, aber tipps
und tricks kann ich immer brauchen.
können uns ja gerne mal per email unterhalten.
alleine wirds wahrscheinlich noch ein weilchen dauern bis das erklärte
ziel vollbracht ist *gg

zum thema virtex :

virtex ist zwar overkill, aber ich weiß nicht wo man günstig an größere
eval-boards mit spartan3 drankommt. so ein 400'er oder 1000'er
spartan3 hätte wahrscheinlich ressourcen satt (incl. vga interface und
ähnlichem schnick-schnack) aber es sollte auch noch in dem rahmen von
100-150 euronen liegen. schließlich müsste man sich ja irgendwann mal
eine zusatz-platine mit audio-codecs und sonstiger hardware ätzen
lassen und das kostet ja auch wieder gut geld ...


schönen gruß
rene

von Kest (Gast)


Lesenswert?

Hallo!

Endlich mal ein Mensch, der genau das machen möchte, was ich immer
schon vor hatte! :-)

Als erstes zum FPGA. Ich würde an Deiner Stelle etwas warten, bis der
neuer Spartan 3E Kit von xilinx rauskommt. Der hat dann 500K, 32 MB
SDRAM, Flasch, VGA, USB, Ethernet. Das reicht für viele Sachen ;-) Und
soll lächerliche 149 $ kosten :-o Das gute ist, die teile sind gut
erweiterbar. Man könnte eine Art Expansion-Board bauen, mit dem
audio-Codec und alles andere.

So ein Teil wollte ich schon immer bauen, aber mir fehlt leider die
Zeit :-/ Als ich "Cameleon" gesehen hatte (kennst Du es?), da wollte
ich sowas (aber besser ;-)) nachbauen. Und das ist auch mein erklärtes
Ziel.

Ich möchte ja nicht mit der Tür ins Haus fallen, aber lass uns doch so
ein Projekt starten. Wiki einrichten (habe leider keine Ahnung, wie das
geht ;-)) und so weiter. Per Mail können wir auch kommunizieren, kein
Problem. Aber schön wäre, wenn jeder daran teil nehmen kann.

Viel mit Audio habe ich nicht gemacht, halt einfache Sachen. Was ich
noch gerne hätte, wäre ein analog synth mit digitalen elementen (oder
umgekehrt). Mit VHDL beschäftige ich mich aber schon länger. Vielleicht
bin ich kein Crack, aber hab' schon ein Paar (relativ) Große Projekte
gemacht, und es funktioniert auch ;-)

Ich schreib' mal, was ich gerne hätte:
- AD/DA (egal wie Breit und kHz ... hauptsache brummt ;-))
- MIDI
- CF

Man könnte auch AVR oder wie auch immer für MIDI und Controlling
nehmen. Oder auch alles im FPGA. Wie ich schon sagte, ein Expansion
Board wäre cool: einfach zu bauen (oder herzustellen), alles drauf, was
man braucht, jeder kann so ein Teil benutzen.

so, was meinst Du, wollen wir es starten? :-) Vielleicht gesinnt sich
der einer oder anderer mit dazu?

Ach so, noch was, ein 1000er Spartan gibt es bei www.xess.com für 200$.
Aber ich weis nicht, ob das sich lohnt. Balt kommt ja was von Xilinx ;-)
Und die 500 kGatter unterschied machen nciht sehr viel aus. Übrigens die
500 Mhz sind wirklich sehr utopisch! Es wird schon hart sein auf 150 zu
kommen. Wobei...

Gruß

Kest

von TheMason (Gast)


Lesenswert?

Hallo Kest.

Starke Sache :-)

Mit einem Projekt können wir gerne was machen. Die Idee gefällt mir
gut. Muß dir allerdings sagen das ich auch nicht immer Zeit dafür habe.
Aber das interesse ist da.
Also mit Wiki und solchen sachen kenn ich mich auch nicht aus. Da
müsste dann noch ein dritter dazu.
Die Idee mit dem Expansion Board finde ich gut. Bin auch schon am
überlegen wie man das am besten hinbekommt. Vor allem kostengünstig.
Das ist ja meistens der Knackpunkt.
Was mir an so einem Board wichtig wäre, das man es für unterschiedliche
Evaluation Kits verwenden kann. Sprich das man einen eigenen connector
nimmt und über ein kurzes adapter-kabel an jedes mögliche kit
(altera/xilinx...) dranstecken kann. Dann kann man es auch für spätere
Kits mit anderer Belegung verwenden.
Also AD/DA Wandler sollten drauf sein (mir würden 2-3 codecs reichen,
also 2-3 Stereo rein/raus). Wie gesagt interessant fände ich die
TAS3004 weil sich da noch einiges konfigurieren lässt. Und man hätte
auch die Möglichkeit das Expansion Board standalone nutzen zu können
(die DSPs von dem TAS). MIDI sollte ebenfalls nicht fehlen *gg.
Allerdings sollte man vielleicht besser SD/MMC nehmen (jedenfalls bin
ich ein Fan dieser kleinen schnuckeligen Karten, obwohl ich deren
ansteuerung noch nicht erfolgreich hinbekommen habe, aber das ist nur
ne frage der zeit). Dann braucht man nicht mit sovielen ports
rumhampeln, und von der Geschwindigkeit her sollte auch noch einiges
machbar sein. Aber das kann man ja noch schauen.
Muß mal eben was zum Cameleon fragen : Das war doch ein effektgerät,
oder ? Hab schonmal was davon gehört, weiß aber nicht mehr so genau was
das kann.
Also bei dem Prozessor (der dann sinnigerweise auch auf dem Expansion
board drauf sein sollte) wäre ich eher für einen ARM. (z.b. LPC2106)
Eigentlich aus dem Grunde weil wenn es um Koeffizientenberechnung für
Filter geht kommt man ohne vertretbaren aufwand nicht um Floating-Point
drumherum (speziell bei Synthesizern, wo ja alle paar ms ein oder
mehrere neue koeffzientensätze berechnet werden müssen, nebst noch
einigen anderen aufgaben wie controlling, sequencing,
hüllkurvenberechnung, lfos, display, potis, menüs usw. usw. zu tun
sind). Vor allem hat man da noch etwas reserven. Weiß allerdings nicht
so recht wo man günstig an die Dinger drankommt.
Im Audio-Bereich hab ich schon etwas an erfahrung gesammelt (jetzt auch
nicht übermässig). Hab ein modulares Audio-System auf meinem PC als
Cubase Plugin programmiert (funzt aber nicht 100% :-((). Aber da konnte
ich doch schon einiges an Erfahrung sammeln. (deswegen lief der Biquad
auch schon fast auf anhieb *gg)
Also mit dem FPGA werd ich eh noch warten, weil ich erstmal versuchen
möchte soviel wie möglich aus dem Spartan3 rauszuholen (und da steckt
mit sicherheit noch ne menge drin), aber danke schonmal für die Info.
Hab auch gesehen das es bei Segor einen Spartan3 400'er in lötbarem
TQ144'er für ca 35 Euro gibt.

Also mit dem Projekt können wir gerne machen.
Wäre auch echt klasse wenn noch ein oder 2 leute dabei sind die
ebenfalls etwas erfahrung haben und auch so sachen wie wiki machen
könnten.

schönen gruß
rene

von Kest (Gast)


Lesenswert?

Hallo Rene,

dass Du nicht immer Zeit hast, verstehe ich vollkommen. Mir geht es da
auch nicht anderes.
Ich hoffe, dass es mehr Leute sich dazu gesinnen und zusammen mit uns
irgendwas "großes" entwickeln ;-)
Tja, jetzt die "Kosten". Mir ist schon klar, dass es nicht preiswert
ist. Denn, egal wie man es dreht, und dann noch FPGA selber lötet, dazu
noch ARM und andere SAchen, kommt man mit 2 Lagen nicht aus. Vier Lagen
sind aber auch nicht sehr viel teuerer. ...aber erstmal ist das egal.

CF/SD Karenfrage ist eigentlich klar, ich meinte auch SD. CF kam mir
einfach zuerst in den Sinn.

Zum Cameleon: das ist quasi ein Board mit einem DSP drauf (100 MHz,
glaube ich), plus MIDI und schönes Gehäuse und weiterem Schnickschnack.
Dazu gibt es ganze Entwicklungsumgebung, ob AMP-Simulator oder Synth,
man kann die Programme einfach laden und man hat es. Die einzige Sache
war, was mich so gestört hat, dass das Ding so 600-700 Euro kostet. Ich
finde das etwas übertrieben.

Mit etwas intelligenz ;-) kriegt man alles in einen FPGA drauf. Was
viel Arbeit macht, sind halt die ganzen Algorithmen für Effekte und
so.

Mit einem ARM bin ich einverstanden, obwohl ich damit noch nie was
gemacht habe, aber die Teile sind doch alle gleich ;-)

So, nun weiter, wie ich mir alles vorstelle:
Im FPGA ist quasi ein "Prozessor", der Befehle einfach abarbeitet, so
wie bei modernen Grafikkarten. Dazu gibt es dann einen Befehlsatz, und
den kann man halt ändern/laden. Alles total simpel. Das Programm steht
im Blockram, Koeffiziente und Co vielleicht auch. Per i2c/spi oder wie
auch immer, hat man den vollen Zugriff auf alles. That's it!
Im Endeffekt läuft alles darauf hinaus, was man als einen "Befehl"
deklariert. Üblich ist multacc oder wie auch immer. Und mit mind. 1000
Takte pro Sample ist man sehr gut unterwegs. Und wenn man auch mehrere
Einheiten hat (Skalierbar), dann kotzt da jede DSP dagegen ab :-o :-)

Noch mal zu mir. Ich arbeite in diesem Bereich, also mit FPGAs
allgemein. Habe auch Erfahrung mit Layout und anderen Kleinigkeiten,
die so anfallen. So einen design könnte ich (theoretisch) an ein/zwei
Tagen aus dem Boden stampfen, dass da die ersten Sachen simulierbar
sind. Dafür müsste ich aber wissen, was gemacht werden soll. DEnn
nichts ist blöder, als wenn man zwischendurch die Spezifikationen
ändert.

Überhaupt, wundere mich, wieso nicht viele damit was machen :-o

Für die Zukunft (also weite weite Zukunft ;-)) würde ich gerne schon
ein einzelnes Board haben wollen, mit SDRAM, SRAM, MIDI, SD, VGA, mind.
8 AD/DA, digitale Ein/Ausgänge. DAs Problem ist nur, dass man allein da
nicht sehr weit kommt :-/

Gruß
Konstantin

von KennyOswald (Gast)


Lesenswert?

Hallo TheMason!
Als AnalogSynthesizer kann ich Dir den MonterSID empfehlen. s.h.
http://c64upgra.de/c-one/ .

mfg
KennyOswald

von TobiFlex (Gast)


Lesenswert?

Hallo KennyOswald.

"Als AnalogSynthesizer kann ich Dir den MonterSID empfehlen. s.h.
http://c64upgra.de/c-one/ "

Das wäre mir neu, daß es den da gibt. Hast Du genauere Infos?

Viele Grüße
TobiFlex

von TheMason (Gast)


Lesenswert?

Hallo KennyOswald,

mir geht es ja gerade darum einen Synthesizer bzw. Audioprozessor in
VHDL zu implementieren (siehe Thread "Leute für Audio-Projekt
gesucht")
 :-)) Leute werden dafür immer noch gesucht :-)

Das man mit dem SID aus dem C64 schon einiges machen kann ist mir klar.
Aber es muß ja nicht gerade ein rein analoger Synth sein.
Aber danke für die Info. Werd mir mal das Dingen genauer angucken

Gruß
Rene

PS. Woher kann man denn funktionierende SID 6581-Chips eigentlich noch
bekommen ?

von KennyOswald (Gast)


Lesenswert?

Hallo TheMason!
Der MonsterSID ist ein in ein FPGA (Altera) integrierter 16 Kanal SID.
Der ist so weit ich das richtig verstanden habe, Digital. Habe ich im
Forum gelesen. Der code ist aber nicht veröffentlicht worden.

mfg
KennyOswald

von TobiFlex (Gast)


Lesenswert?

Ah - Danke - Alles klar.
Alles andere hätte mich auch sehr gewundert.
Für den C-One gibt es bisher kein Design mit einem SID im FPGA. Es muß
ein original SID-Chip für den Sound auf das Board gesteckt werden.

Aber vieleicht läßt sich hiermit was anfangen:
(SID in VHDL für einen Altera Cyclone/Stratix)
http://www.fpga.nl/jester.html

Viele Grüße
TobiFlex

von KennyOswald (Gast)


Lesenswert?

Da fehlt nur noch der Yamaha FM und ein MOOG-Filter und wir haben fast
alle analog sythies damit abgedeckt.

mfg
KennyOswald

von TheMason (Gast)


Lesenswert?

Hallo,

@kenny

also FM sollte (abgesehen von einem schlanken Sinus-Osillator) kein
Thema sein. FM soll ja nachher auch mit meinem Audio-Prozessor möglich
sein, wenn er denn mal fertig ist.
Einen waschechten MOOG-Filter dürfte insofern schwierig sein als das
man da schon quasi auf Physical Modeling zurückgreifen müsste (wegen
der Bauteil-Toleranzen und leicht unterschiedlichen Kennlinien), aber
ein entsprechender IIR-Filter klingt auch schon gut.
Habe selbst mal was Richtung Software-Synths gemacht, und mit den
Ergebnissen bin ich recht zufrieden.
Mein Ziel ist es nun das ganze in Hardware zu packen. :-)
Mal schauen was draus wird. Hoffe das ich noch einige Leute
"mobilisieren" kann für das Audio-Projekt :-)

Erstmal Danke für die Infos vom C-One (wieder lecker Quellcode-Futter
zum durchstöbern :-)))

@tobiflex

Danke für den Link zum jester. Versuche noch zu verstehen wie der
Filter funktioniert, wobei mir noch nicht klar ist wo die Koeffizienten
herkommen und welcher Filter implementiert worden ist. Hab aber gerade
auch erst reingeschaut.


Gruß
Rene

von TobiFlex (Gast)


Lesenswert?

"Erstmal Danke für die Infos vom C-One (wieder lecker Quellcode-Futter
zum durchstöbern :-)))"

Wenn Du dazu Fragen hast... Vieles davon ist von mir.

Viele Grüße
Tobias Gubener

von KennyOswald (Gast)


Lesenswert?

Hier gibst infos zum SID:
http://de.wikipedia.org/wiki/MOS_Technologies_SID

Hier gibst ein Blockdiagram mit dem Aufbau vom SID:
http://stud4.tuwien.ac.at/~e9426444/sidtech3.html

Wegen AD-DA kannst Du Dich vielleicht mit dem hier kurzschliessen:
http://beis.de/


mfg
KennyOswald

von KennyOswald (Gast)


Lesenswert?

@Tobias Gubener
Hast Du daran mitgearbeitet?

mfg
KennyOswald

von TobiFlex (Gast)


Lesenswert?

"Hast Du daran mitgearbeitet?"

Ja. Bis ich im Mai 2004 eingestiegen bin ging praktisch nichts mit dem
C-One. Als erstes habe ich einen neuen Startupprozessor bzw.
Startupsystem entwickelt. Dann habe ich meine eigenen CPC-Cores
beigesteuert und den VC20 angepaßt. Als letztes habe ich den FPGA64 (
http://syntiac.com/fpga64.html ) im C-One zum Laufen gebracht.
Viele Grüße
TobiFlex

von TheMason (Gast)


Lesenswert?

@TobiFlex

Cool. Hatte ich gar nicht gesehen das du auf der C-One Seite vertreten
bist (hatte nur mal eben kurz drüber geschaut).
Klasse was du da so machst :-). Ich selbst bin in VHDL bei weitem noch
nicht soweit. Schaffe es ja gerade mal einen Ansatz für einen
Synthesizer zu implementieren :-)) (aber immerhin)
Werde mich bei Fragen bzgl der Quellcodes an dich wenden. Ich denke der
Lerneffekt durch die Quellcodes (Prozessor, Bus-Logik usw) dürfte enorm
sein.

@Kenny

Danke für die Links (speziell den von Wikipedia, hab da einige lustige
Links gefunden und lad mir gerade eine SID-Emulation und ein paar
lieder dazu runter :-))
Die restlichen Sachen waren mir auch schon bekannt bzw. geläufig.
Was ich noch zum Thema AD/DA suche ist ein Codec der quasi nichts an
beschaltung benötigt. Habe mir da auch schon was ausgesucht (TAS3004,
wie in dem "Leute für Audio-Projekt gesucht"-Thread schon dargelegt
:-)), aber vielleicht gibts ja noch etwas kleineres, um zumindest mal
von meinem 8-BIt-PWM D/A Wandler loszukommen *gg (vor allem weils ja
nur ein Ausgang ist, und einen Audio-Eingang hab ich ja noch nicht)

@all

Muß noch mal eben Werbung für das Audio-Projekt machen :

Suche noch Leute die Interesse an der Audio-Technik haben. Speziell
Synthesizer, Mischer, Effekt-Geräte und HD-Recording.
Würde mir gerne mit mehreren Leuten einen FPGA programmieren und eine
kleine Hardware bauen mit der man ein flexibles Audio-System aufziehen
kann. Konkrete Ideen bzw. Umsetzungen sind schon vorhanden (abgesehen
von der kleinen Hardware).
Mir geht es dabei um Erfahungsaustausch und den Spaß am Basteln mit
Audio.
Hoffe das sich da noch einige Leute finden lassen.

Schönen Gruß
Rene

von TobiFlex (Gast)


Lesenswert?

Hihi

"Ich selbst bin in VHDL bei weitem noch
nicht soweit."

Frag mich nicht nach VHDL. Damit habe ich auch erst vor einem halben
Jahr angefangen. Vorher habe ich nur mit AHDL und Schaltungseditor
gearbeitet. Aber ich glaube auch nicht, daß die Beschreibungssprache so
wichtig ist. Viel wichtiger ist das grundsätzliche Verständnis für
Digitaltechnik.

"Suche noch Leute die Interesse an der Audio-Technik haben. Speziell
Synthesizer, Mischer, Effekt-Geräte und HD-Recording."

Ich könnte den AY 3-8912 Soundchip beisteuern falls der was nutzt. Ich
finde Dein Projekt sehr interessant muß aber leider aus Zeitgründen
zurückhaltend sein. :-(  Schaffe jetzt schon nicht alles was ich gern
möchte.

Viele Grüße
TobiFlex

von KennyOswald (Gast)


Lesenswert?

Habe Interesse, nur wenig Zeit und zu wenig erfahrung.
Bin aber bereit, dafür hart zu arbeiten.

Schau Dir auch mal das hier an:
www.ucapps.de

PS: Eigentlich sollten hier genug Resourcen zu finden sein. Das Forum
enthält ja alle wichtigen Bereiche (DSP, FPGA, µC).

mfg
KennyOswald

von TheMason (Gast)


Lesenswert?

Hi TobiFlex,

aber mit FPGAs und CPLDs machst doch sicherlich schon länger oder ?
*ggg
Mit dem ganzen Gebiet hab ich erst vor einem halben Jahr richtig
angefangen. Das es egal ist ob Verilog, AHDL oder VHDL ist mir schon
klar, und ich denke ein gewisses Grundverständnis von Digitaltechnik
habe ich schon. Ist halt nur die Erfahrung die fehlt (ja ich habe immer
noch Angst eine IO-Leitung bidirektional zu nutzen weil ich Antgst hab
mir das Board zu schießen *ggg)

Aber zu dem Audio-Projekt mal : Zeit spielt nicht so die Rolle. Kest
hat auch wenig Zeit, und ich werde auch nicht jeden Tag daran sitzen.
Mir geht es erstmal darum Leute zusammen zu bekommen die Interesse an
so einem Projekt haben um dann Ideen zu sammeln und sich zu überlegen
wie man sowas am besten aufziehen kann. Wie gesagt Vorschläge,
Andregungen und Ideen habe ich schon eine ganze Weile, bin aber auch
immer offen für neue Sachen. Und das ganze Projekt hat eigentlich
keinen zeitlichen Rahmen.


Der AY 3-8912, war das nicht ein FM-Chip (ähnlich der
Adlib-Soundkarten) oder war der im Atari drin ?
Bei dem Projekt hatte ich vor Codecs (16/24 Bit 48/96 kHz) zu
verwenden, die über einen FPGA zum dudeln gebracht werden.
In dem FPGA soll eine Engine laufen (die für den Grob-Entwurf schon
recht weit ist) mit der sich Mixer, EQ's, Synthesizer, Effektgeräte
und später vielleicht auch HD-Recording realisieren lässt.

Wie gesagt Zeit spielt keine Rolle. :-))

Schönen Gruß
Rene

von TheMason (Gast)


Lesenswert?

Hi Kenny,

die Seite ucApps kenn ich. Finds stark was der Typ an MIDI-Tools so
alles bastelt. Habe mir auch mal nen kleinen MIDI-Controller gebastelt,
der aber mittlerweile eingeschlafen ist.
MIDI sollte bei dem Audio-Projekt auch dabei sein, damit die
möglichkeit eines Synthesizers auf jedenfall gegeben ist (da braucht
man erstmal nur Audio-Ausgänge *gg)

Wie ich dem Tobi auch schon gerade geschrieben hab : Zeit ist kein
Thema. Es geht sich mir erstmal darum das sich Leute zusammen finden
und man gemeinsam an so einem Projekt sitzt. Das die meisten Leute
berufstätig sind (wie ich selbst ja auch) ist klar, und von daher ist
es kein Thema wenn mal ein paar Wochen nicht viel passiert. Hauptsache
das Interesse an so einem Projekt ist da und die Leute machen sich ein
paar Gedanken dazu.

Und Erfahrung ist ja eh immer von Person zu Person unterschiedlich. Ich
selbst habe vor nem halben Jahr mit FPGAs angefangen und freu mich
mittlerweile wie ein Schneekönig zumindest schonmal Oszillatoren und
Filter halbwegs am laufen zu haben, was andere an einem Nachmittag
fabrizieren ... Also von daher. Es kommt auf das Interesse und die
Gedanken an die man in so einem Projekt mit einfließen lässt.

Schönen Gruß
Rene


PS. Wegen der Ressourcen und kompetenten Leute hier find ich dieses
Forum so Klasse *ggg

von TobiFlex (Gast)


Lesenswert?

"Der AY 3-8912, war das nicht ein FM-Chip (ähnlich der
Adlib-Soundkarten) oder war der im Atari drin ?"

Der war im AtariST und CPC464/6128 drin. Ist recht einfach gehalten.
Keine Filter - nur programmierbare Teiler.

Viele Grüße
TobiFlex

von David B. (zorg)


Lesenswert?

Hallo zusammen

ich bin durch Zufall beim stöbern über dieses Forum und Topic
gestolpert und hab mich aus Begeisterung gleich mal angemeldet:

Bei einem Projekt wie hier angesprochen wäre ich gerne dabei!

Kurz zu mir: ich arbeite bei ARRI (Filmtechnik http://www.arri.de) an
einem Filmscanner, dessen Innenleben fast ausschliesslich FPGA
basierend ist. Momentan entwickle ich hier AD Wandlung + optisches
Übertragungssystem für Rohbilddaten (ca. 18Gbit/s). Übertragung läuft
über 2 parallele synchronisierte 10GB-Ethernet Kanäle mit INTEL
optischen Transceivern, die Datenverarbeitung / Steuerung realisiere
ich auf Virtex2Pro FPGAs.
Mit FPGAs und VHDL kenne ich mich also einigermassen aus.

Ich hatte schon lange geplant, eine Art "Digital"-Synthesizer zu
bauen, d.h. der nicht analoge Klangerzeugung simuliert sondern die
möglichkeiten der Digitaltechnik ausreizt. In jüngster Zeit dachte ich
an eine Kombination von FPGA mit analogen Oszillatoren und einigen ADDA
Wandlern und Multiplexern, also einer Art analoger Matrix, in der das
FPGA drinhängt und die Klangbearbeitung macht. Habe bei meiner früheren
Firma Motorola was in der Richtung gemacht, bei einer Telematik-Unit für
Audi. Zusätzlich bräuchte man halt ein MIDI IF, digitale Bedieneinheit
und z.B. eine analoge Bedieneinheit mit 16 Drehregler die über adcs am
FPGA hängen.

Leider fehlt mir einfach die Zeit, allzu intensiv was zu machen,
weshalb ich es faszinierend fände, wenn man sich da zusammentun könnte.
Hobbymässig spiele ich schon seit zig jahren mit elektronischer Musik /
Synthesizern und hab da auch schon einen kleinen Fuhrpark zu hause.

Also, wenn Ihr Lust habt so ein Projekt aufzuziehen und jemand
dabeihaben wollt der sonst noch nicht in diesem Forum aufgetreten ist,
dann bin ich dabei!

Viele grüsse
David

von TheMason (Gast)


Lesenswert?

Hallo David

finde ich cool das du mitmachen möchtest. Dann wären wir schon zu dritt
(jedenfalls mit "offiziellem" Statement : "bin dabei" :-)))
Wie auch schon oben beschrieben ist Zeit nicht das Problem. Hauptsache
die Leute haben Interesse und man hört/liest ab und zu voneinenander.
Wie man halt gerade Zeit hat.
Ich denke eh das das ganze "Projekt" über einen langen Zeitraum
laufen wird, aber es soll ja auch was werden und es besteht ja auch
kein Zwang :-)

Also in VHDL bin ich nicht so fit (jedenfalls nicht so wie du oder der
Kest (Konstantin)) aber ich denke für meine kleinen Zwecke sollte es
reichen. Mit meiner programmierbaren Audio-Engine bin ich schon recht
weit. Werde die Tage mal den VHDL-Code sowie C-Code reinstellen, damit
man zum einen damit spielen kann, und zum anderen sich über meinen
VHDL-Code aufregen kann :-)), bzw. Verbesserungsvorschläge machen kann
wie man bestimmte Sachen besser umsetzen kann.

Ich würde sagen das wir für dieses Projekt einen neuen Thread aufmachen
und uns zuerst mit dem Expansion-Board beschäftigen damit man wenigstens
mal Audio In und Out hat und das ganze an ein FPGA-Board seiner Wahl
korken kann. Ich halte das für sinnvoll, damit Leute die vielleicht
später zustossen wollen auch die Möglichkeit eines einfachen Einstiegs
haben, bzw. das man eine gemeinsam nutzbare "Plattform" hat, auf die
man aufsetzen kann (zumal ich selbst noch nicht einen einzigen AD/DA
Wandler angeschlossen habe :-)).
Und wenn man dann ein IO-Board hat kann man sich mit der Programmierung
des FPGAs und des uCs beschäftigen.


Freue mich das du dabei bist.

Schönen Gruß
Rene

PS. Habe in dem Thread "Leute für Audio-Projekt gesucht" noch ein
paar Anregungen und Vorschläge zum Thema IO-Board gemacht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.