Sida 7 av 7

Re: FPGA-baserad synth

Postat: 5 september 2010, 07:06:03
av stekern
Nu har det hänt lite saker med det här projektet igen.
Jag har hunnit med att implementera detuning av oscillatorerna (ner till en cent), legato och portamento.

Kontrollprogrammet är uppdaterat:
Bild

Här finns ett litet lyssningsdemo som illustrerar de ovanstående "nyheterna":
http://www.sk-electronics.com/sk-synth/ ... sample.mp3

Re: FPGA-baserad synth

Postat: 3 oktober 2010, 14:12:59
av stekern
Jag har nu ändrat om lite hur vågformerna fungerar.
Innan så genererades sågtand, triangle och fyrkantsvåg av FPGAn och sinusvågformen låg laddat i ett block ram i FPGAn.
Dessa har jag nu flyttat ut så de läses från det parallella flashminnet som finns på evaluationskortet.
Varje vågform tar 8192 16-bits word.
128 stycken vågformer tar upp halva flashet, den andra halvan har jag tillägnat åt att ladda in trumsamplingar.
Trumsamplingarna är i 44.1kHz och 16384 16-bit långa, dvs 64 trumsamplingar får plats.
Det är ungefär 0.37 sekunder per sampling (vilket kan vara i minsta laget, iaf till crashscymbaler och dylikt, så det är möjligt att jag reviderar detta).

För att använda trumsamplingarna har jag implementerat ett litet "trumkit" vid sidan av synthen.
Den lyssnar på midikanal 10, och spelar upp olika samplingar genom att använda midi-noternas nummer som offset i flashet.

Lyssningsprov:
http://www.sk-electronics.com/sk-synth/funk.mp3

Re: FPGA-baserad synth

Postat: 3 oktober 2010, 20:04:41
av overclocked
Helt grymt stekern! :shock: Jag slutar aldrig förvånas över detta projekt. otroligt! Jag måste nog koppla upp anläggningen igen och sitta och plinka lite. Kul med trummor också! Finns det nå planer på att göra nåt enklare Reverb? Skulle väl sitta som en fläskläpp tillsammans med detta renskalade synthprojekt.. och nu när du friat upp en massa BlockRAM så... tja vad tror du? 8)

Re: FPGA-baserad synth

Postat: 4 oktober 2010, 00:20:13
av Andax
Snyggt jobbat! Ang dina samplingar, skulle du inte kunna göra en enkel ljudkomprimeing för att få rum med längre samplingar?

Re: FPGA-baserad synth

Postat: 4 oktober 2010, 14:29:02
av stekern
Andax:
Jo, det skulle ju vara en möjlighet.
Problemet är bara att jag knökt in så mycket grejer i den stackars FPGAn att utrymmet är på bristningsgränsen.
För varje ny grej som jag pillar in så får jag börja med att klia mig i huvudet och försöka optimisera bort några slicear någon annanstans.
Ett enklare knep vore att använda dynamisk längd av samplingarna (t.ex. så är 0.37 s långt för en virveltrumma),
men jag förkastade den iden just pga att jag ville hålla resursutnyttjandet nere.
Det mest trovärdiga botemedlen som jag kommer ta till är att dra ner antalet trumsamplingar
(men det måste vara en 2 potens, för att offset uträckningarna skall vara simpla).
Ett annat alternativ vore att dra ner vågformernas längd.

overclocked:
Gör det, det är så kul när andra lajar med grejerna ;)
Som jag vet det är det nog bara du, jag och en kille på FPGA-synth mailinglistan som testat den.
Reverb, dist, flanger och delay är grejer som skulle vara kul att implementera.
Det som begränsar är just utrymmet, men jag jobbar just på att minska ner envelope koden, så vi får se vad som får plats.

Re: FPGA-baserad synth

Postat: 9 oktober 2010, 14:09:10
av stekern
Jag bestämde mig för att göra längden på trumsamplingarna dynamiska i alla fall.
Jag gjorde det genom att lägga dit en header i trumsamplingsutrymmet i flashet.
Headern innehåller start-offseten för varje sampling.
Den sista samplingen har även dess slut-offset sparad i headern.
Dessa läser jag sen in i ett BRAM under startup-sekvensen.

Re: FPGA-baserad synth

Postat: 27 oktober 2010, 04:12:41
av stekern
Nu har projektet gjort lite framsteg värda att nämnas igen.
En digital delay line har implementerats.
Inga märkligheter egentligen, samplingar sparas i ett antal BRAM som sedan spelas upp med en fördröjning.
Den maximala möjliga fördröjningen är antalet samplingar/samplingsfrekvensen.
För tillfället sparar jag 8192 samplingar (8 st. 16-bit x 1K BRAM) och samplar i 27kHz, vilket ger max fördröjning på ca 300 ms.
Helst skulle jag vilja dra upp samplingsfrekvensen till minst ca 44kHz,
men av någon anledning spårar ISE ur när jag försöker lägga in > 8 st BRAM.
Den vill då få det till 16 st BRAM och så många har jag inte ledigt längre.
Om någon har någon idé varför den gör så, hojta gärna till.
Annars kan jag ju dela upp BRAMen själv och muxa addresserna, men jag har inte orkat det än.

Inparametrar till delayen är:
"Delay time" = fördröjningens längd (0 = 2 ms, 127 = 300 ms)
"Dry amount" = hur mycket av originalljudet som skall mixas in (0 = inget, 127 = max)
"Feedback" = hur mycket av delayens utgång skall mixas med ingången (0 = utgång/128, 127 = 1*utgång)

Dessa inparametrarna är kopplade till MIDI interfacet.

Koden till delaymodulen finns här:
http://www.sk-electronics.com/svn/repos ... delay.vhdl

Och så det obligatoriska lyssningsprovet:
http://www.sk-electronics.com/sk-synth/delay_sample.mp3

Re: FPGA-baserad synth

Postat: 9 december 2010, 05:19:49
av stekern
Eftersom mitt Avnet spartan-3 kort började kännas fruktansvärt trångt, bestämde jag mig för att skaffa mig ett devbräde med lite större/kraftfullare FPGA.
Det vart ett Atlys Spartan-6 kort från Digilent.
http://www.digilentinc.com/Products/Det ... Prod=ATLYS
Själv är jag inte student, så jag fick betala fullpris (vilket inte är farligt med tanke på vad man får), men är man student så är priset på $199 mycket fördelaktigt. Ett tips bara.

Det jag har hunnit med att laja med det nya kortet är att porta synthen till det (spartan-6 syntetiseraren är lite kinkigare än spartan-3 varianten)
och implementera stöd för AC '97 codecen.
För att få MIDI-kommunikation med det nya kortet valde jag en lite annorlunda lösning än till spartan-3 kortet (där hade jag ett breakout-kort med MIDI-kontakt och optokopplare).
I stället använder jag mig av USB-UART konvertern som sitter på kortet (Exar XR21V1410): http://www.exar.com/Common/Content/Prod ... ParentID=4
För att få den att agera som ett MIDI-device skrev jag en Linux kernel modul baserad på Exars modul som finns i länken ovan.
MIDI modulen finns här om nån är intresserad:
http://www.sk-electronics.com/sk-synth/ ... 101208.tgz

Re: FPGA-baserad synth

Postat: 10 december 2010, 08:47:44
av overclocked
Bara att gratulera, det kortet är ju en riktig värsting för pengarna! Jag kan tänka mig att du nu inte är bunden till logik/minnesbegränsningar i dina framtida strävanden mot en förbättrad FPGA-synth! KUL! Jag hoppas du fortsätter utveckla den, så ska jag fortsätta följa och testa! :-)

Dock, om det fungerar som det gjorde när jag var deltidsstudent så var det inte möjligt att köpa korten till de rabatterade priser endast genom att vara student själv. Jag var sugen på:
http://www.digilentinc.com/Products/Det ... rod=XUPV2P
och gick en kurs i "VHDL för inbyggda system". Detta kort kändes då mycket prisvärt. Det krävdes, enligt min handledare, att skolan gjorde inköpet och att kortet "stannade" i labbsalen.. tråkigt nog! Så då blev följande kort istället till fullpris:
http://www.digilentinc.com/Products/Det ... od=S3E1600
Mycket nöjd med det också!