bouwen van een modulaire synthesizer op...

153
Faculteit Toegepaste Wetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. J. Van Campenhout Bouwen van een Modulaire Synthesizer op FPGA door Benoit Catteau en Wouter Rogiest Promotor: prof. dr. ir. D. Stroobandt Thesisbegeleider: ir. B. Schrauwen Afstudeerwerk ingediend tot het behalen van de academische graad van burgerlijk elektrotechnisch ingenieur Academiejaar 2003–2004

Upload: buithien

Post on 17-Feb-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Faculteit Toegepaste WetenschappenVakgroep Elektronica en InformatiesystemenVoorzitter: prof. dr. ir. J. Van Campenhout

Bouwen van een Modulaire

Synthesizer op FPGA

door Benoit Catteau en Wouter Rogiest

Promotor: prof. dr. ir. D. StroobandtThesisbegeleider: ir. B. Schrauwen

Afstudeerwerk ingediend tot het behalen van de academische graad van burgerlijkelektrotechnisch ingenieur

Academiejaar 2003–2004

Dankwoord

We willen iedereen bedanken die ons hielp – misschien zelf onbewust of indirect.Wetend dat we altijd mensen vergeten vermelden we enkelen in het bijzonder.

Beginnen we met de vrienden in Rome. Paola, en de familie Statuti-Sterpetti,jullie slaan alle records in gastvrijheid. Filippo, je stond klaar voor ons. Giovanna, jeavondmalen zijn onvergetelijk; ook bedankt voor je wegwijs in het italiaans. Marco,Fabrizio, Daniele: jullie waren groots...legendarisch...maar ga...! Irene, Claudio,Luisa, Francisco,... jullie verlichten alle zorgen met jullie vriendschap.

Een hartelijke dank gaat uit naar de professionele hulp die we in Rome ontvingen.Professor Uncini stond ons bij in de synthesizerwereld, en maakte altijd tijd voorons. Professor Balsi en professor Olivieri hielpen ons wegwijs in digitaal ontwerp,en lieten ons de kans onze boodschap te prediken. Professor Rizzi tenslotte leerdeons onszelf te zijn, en dat is zelf in het kader van een thesis belangrijk.

Matthias, onze beschermengel, merci – je weet waarom. Tom en Peter, mercivoor jullie inbreng in onze virtuele infrastructuur. Ridders, en leden van de cake--club, wij zien mekaar binnenkort! Thomas, merci voor al je betrokkenheid, en dewonderlijke foto’s. Jan en Stijn, merci voor de uitlijning. Moog, Bode en Fourier,jullie deden wel.

Sjah, een mens werkt dan een gans jaar aan een thesis en behoort dan ook eendankwoord te schrijven. Het jammere is dat er van zo’n thesisproject enkel de codeoverblijft, en die vertelt ons niet welke mensen er allemaal hun steentje hebben bijge-dragen, zowel bij het schrijven als bij het ondersteunen van de ontwerpers zelf. Tochwens ik, Benoit, speciaal mijn ouders te bedanken die me de kans hebben gegevenom op Erasmus te gaan. En de vele mensen die ons zijn komen opzoeken, zoals dedelegatie van JET Symphonic Band (Isabelle, Geert, Nico, Caroline, Julie, Marieke,Steven en Jeroen), Eva en Mieke, die onverwacht ons wat kwamen opvrolijken ennatuurlijk ook Thomas en Evelyne met wie we Rome vanuit een ander perspectiefhebben bekeken.

i

Ik, Wouter, wil mijn vader, mijn zus en Martine bedanken voor de steun, be-trokkenheid en motivering. Zonder jullie stond ik hier niet. Een heel dierbaar iemandverdient mijn dank op alle vlak – naar jou gaat de dedicatie. Vincent, Frederick enKoen, merci voor jullie gulle aanwezigheid. Carl was zo vriendelijk ons een jaarlang op zijn infrastructuur te trakteren. Geert, mijn grootouders, VIP Philippe enMarianne, bedankt voor de goede zorgen. Simon, salve. Peter, ook jij, gegroet.Plato, Rorty, Pirsig, Kubrick en Darwin, bedankt.

Een speciale dank verdienen de mannen op ELIS. Hendrik en zijn makker Jonashielpen ons uit de nood met een MIDI keyboard. Harald, Jan en Wim hielpen onsvooruit met VHDL en de chip-programmering. Marc schoot ons op vele manierente hulp, en wijdde ons ook in in de wereld van de alternatieve klavieren. Philippebracht vele verhelderende tips aan voor het softwareontwerp, en flateerde ons metzijn betrokkenheid.

Tot slot vermelden we onze promotor en begeleider. Professor Stroobandt ver-dient onze oprechte dank. Hij stond ons toe het ontwerp mee te nemen op Erasmusnaar Rome. Hij toonde steeds begrip voor de complicaties die een erasmusverblijfmet zich meebrengt, en gaf ons vertrouwen. Benjamin tenslotte, was de man op wiewe terecht mochten rekenen. Hij stond ons, ook vanop afstand, bij in het toewerkennaar de grote doorbraken. Hij zag niet op tegen de moeite die lange afstanden metzich meebrengen. Tenslotte was hij steeds betrokken in ons wedervaren, en dat vande Fynth.

Benoit en Wouter, Rome, juni 2004

ii

Acknowledgements

We want to thank everybody who helped us – some of you might not even be awareof doing it. Though aware of the fact that including names will always leave us anincomplete list, we want to thank the below mentioned explicitly.

We start with our friends in Rome. Paola, and the whole family Statuti-Sterpetti,you broke all records in hospitality. Filippo, you were there for us. Giovanna, yoursuppers are unforgettable, a special thanks for the language assistance. Marco, Fab-rizio, Daniele: you were great...heroic... but go...! Irene, Claudio, Luisa, Francisco,...you turned Rome into a second home for us.

Some grateful words go out to the professional help we received in Rome. Pro-fessor Uncini assisted us in the world of synthesizers, en always made the time tolisten to us. Professor Balsi and professor Olivieri helped us in digital design, andgave us the opportunity to tell Italy of our project. Professor Rizzi thought us tobe ourselves, and that is, even for a thesis, an important thing.

Matthias, our guardian angel – you know why – thanks. Tom and Peter, thankyou for your aid in virtual tools. Knights, and all members of the Cake Society, wemeet again! Thomas, thanks for all your involvement, and the marvellous pics. Janand Stijn, thanks for the lay-out. Moog, Bode en Fourier, you did well.

When one is working on a thesis for a whole year, at the end he’s expected towrite down some acknowledgements. Since the result of such a thesis is a hugeamount of code, it cannot tell who has helped us, when writing the code and whenwe needed some support. So I, Benoit, wish to thank my parents, who gave methe chance to do a year of erasmus in Rome. Also those who came to visit us, thedelegation of JET Symphonic Band (Isabelle, Geert, Nico, Caroline, Julie, Marieke,Steven en Jeroen), Eva and Mieke, who came to cheer us up unexpectedly and ofcourse Thomas and Evelyne with whom we look at Rome through the viewfinder.

I, Wouter, want tho thank my father, my sister and Martine for their support,involvement and motivating words. If it wasn’t for you, I wouldn’t be here. A very

iii

precious someone deserves my gratitude in every way – the dedication is to you.Vincent, Frederick and Koen, thanks for your cheerful presence. Carl showed hiskindness by lending us his accommodation for a year. Geert, my grandparents, VIPPhilippe and Marianne, thanks for your warm support. Simon, salve. Peter, youtoo, salve. Plato, Rorty, Pirsig, Kubrick and Darwin, thanks.

A special thanks for the boys at ELIS. Hendrik and his friend Jonas helped uswith a MIDI keyboard. Harald, Jan and Wim explained us VHDL and chip pro-gramming. Marc was a help to us in many ways, and introduced us to alternativekeyboards. Philippe helped us with the software design, and flattered us with hisinvolvement.

Last but not least, we name our promotor and assistant. Professor Stroobandtdeserves our sincere gratitude. He allowed us to take the design all the way toRome. He showed empathy for all complications, inherent to an Erasmus Project,and gave us his confidence. Benjamin, finally, was always there for us, preparingwith us for the break-throughs. He never complained, and was unceasingly involvedin our actions, and those of the Fynth.

Benoit and Wouter, Rome, june 2004

iv

Ringraziamenti

Un ringraziamento sincero a tutte le persone che ci hanno aiutato. Pur sapendo chedimentichiamo sempre qualcuno, ringraziamo qualche persona in particolare.

Cominciamo con gli amici di Roma. Paola e tutta la famiglia Statuti-Sterpetti,avete meritatato qualche medaglia (almeno tre) per la vostra ospitalita. Filippo, erisempre lı per noi. Giovanna, le tue cene sono indimenticabili, e grazie tanto perl’assistenza per l’italiano. Marco, Fabrizio, Daniele: siete stati grandi...mitici...maandate ...! Irene, Claudio, Luisa, Francisco,... la vostra amicizia e piu cara dell’ oro.

Un ringraziamento speciale per l’aiuto professionale che abbiamo potuto riceverea Roma va: al professor Uncini, esperto nel mondo dell’ audio digitale, che ha messoa disposizione il suo tempo per aiutarci; professor Balsi e Olivieri ci hanno aiutatocon il design digitale, e ci hanno offerto l’opportunita di parlarne in publico. Pro-fessore Rizzi ci ha insegnato ad essere noi stessi, e questa lezione vale anche nel casodella nostra tesi.

Matthias, nostro angelo custode, grazie mille – sai perche. Tom e Peter, grazieper l’aiuto con il nostro ambiente virtuale. Cavalieri, e soci dell’ associazione “CakeClub”, ci vediamo! Thomas, grazie per la participazione e le foto meravigliose. Jane Stijn, grazie per il lay-out. Moog, Bode e Fourier, siete stati bravi.

Quando si lavora tutto un anno su una tesi, ci spetta dover fare anche qualcheparola di ringraziamento. Perche il risultato e una marea di codice, non e facile direchi ci ha aiutato, durante la programmazione, e quando i noi progettisti abbiamoavuto bisogno di sostegno. Allora, io, Benoit, vorrei ringraziare i miei genitori, chemi hanno dato la possibilita di andare in Italia per fare l’Erasmus. E anche quelliche sono venuti a visitarci: il gruppo del JET Symphonic Band (Isabelle, Geert,Nico, Caroline, Julie, Marieke, Steven e Jeroen), Eva e Mieke, che sono apparsi eci hanno fatto ridere, e sicuramente Thomas e Evelyne con i quali abbiamo vistoRoma dietro una macchina fotografica.

v

Io, Wouter, vorrei ringraziare mio padre, mia sorella e Martine per il supporto,la participazione e l’aiuto. Senza voi non stavo qua. Una persona carissima meritatutta la mia gratitudine – sei la persona a cui viene dedicato queso lavoro. Vin-cent, Frederick en Koen, grazie per la vostra compagnia divertente. Carl, grazieper averci offerto il tuo materiale per un anno. Geert, i miei nonni, VIP Philippee Marianne, grazie per tutto. Simon, Salve. Peter, salve anche a te. Plato, Rorty,Pirsig, Kubrick, e Darwin, grazie.

Un ringraziamento speciale per quelli che lavorano ad ELIS. Hendrik e Jonas cihanno aiutato con la tastiera MIDI. Harald, Jan e Wim ci hanno aiutato con VHDL,e la programmazione del chip. Marc ci ha aiutato in tante maniere, e ci ha presen-tato alle tastiere alternative. Philippe ci ha sostenuto con il design del software, eha mostrato la sua participazione.

Finalmente, vorremmo scrivere del nostro promotor e assistente: professoreStroobandt che ci ha offerto l’opportunita di svolgere il nostro progetto in Italia.Ha mostrato sempre la sua condiscendenza in caso di complicazioni, legate al pro-getto Erasmus. Benjamin e stata la persona che potevamo disturbare con le nostredomande. Non si e mai lamentato di tutti i problemi che gli abbiamo causato,legati alla nostra distanza. Lui era sempre lı, per aiutarci, e per participare nellacostruzione del Fynth.

Benoit e Wouter, Roma, guigno 2004

vi

Bouwen van een Modulaire Synthesizer op FPGA

doorBenoit Catteau en Wouter Rogiest

Afstudeerwerk ingediend tot het behalen van de graad van burgerlijk elektrotech-nisch ingenieur

Academiejaar 2003–2004

Universiteit GentFaculteit Toegepaste WetenschappenVakgroep Elektronica en InformatiesystemenVoorzitter: prof. dr. ir. J. Van Campenhout

Promotor: prof. dr. ir. D. StroobandtThesisbegeleider: ir. B. Schrauwen

Samenvatting

Modulaire synthesizers bestaan al sinds jaar en dag in de wereld van analogeelektronica. Robert Moog1 legde de grondslagen in 1965 vast met een door hembedacht prototype, in [3]. Het concept was vernieuwend: scheid signaalbronnen,signaalverwerkers en signaalversterkers in afzonderlijke modules, voorzie ze elk vanin- en uitgangen op hun frontpaneel, en verbind ze extern met kabels.Deze geboorte bleek direct levensvatbaar, omdat het de muzikant een quasi on-beperkte vrijheid levert in het creeren van nieuwe klanken, en imiteren van bestaandeinstrumenten.Vandaag zijn modulaire synthesizers onverminderd een “hot topic” in de audio-wereld, en genieten blijvende aandacht van kenners in de elektronische muziekwereld.

Zo groot de aandacht, zo talrijk de variaties. Modulaire synthesizers zagen inde meest kleurrijke formaten en vormen het daglicht. Analoog ging het verhaal vanenkele luttele modules, over grote expansie van het gamma aan modules, naar minia-turisatie. In de digitale wereld werd er zowel in hardware en software ontworpen inhet kader van marktgerichte, goed verkopende producten.

Het voorliggende ontwerp gaat verder. Het implementeert de modulaire synthop een FPGA chip. Het kind draagt de naam Fynth. Het is een 8 noten polyfonesynthesizer met stereo uitgang en bemonsteringsfrequentie 32 kHz. Het bedient zichvan woordenschat uit de analoge synth-wereld, en is tegelijk gestoeld op elementaireprincipes uit de wereld van digitale systemen: Moore machines, busprotocols, time

1uitspraak: zoals de lange ’o’ in het engelse vogue

vii

scheduling,...Het is baanbrekend in zijn miniaturisatie, en biedt een sterke flexibiliteit. Eenmuzikant zonder voorkennis in hardware-ontwerp wordt de mogelijkheid gebodende modulaire synthesizer via software te herprogrammeren en te bespelen. Eenhardware-ontwerper grijpt zijn kans om de synth volstrekt naar zijn wens te kneden,en kiest zelf welke modules hij in hardware aanwezig wil zien.

Trefwoorden: synth, digitale audio, ELIS, FPGA

viii

Building of a Modular Synthesizer on FPGA

byBenoit Catteau and Wouter Rogiest

Final Project to obtain the title of Elektotechnical Engineer

Academic Year 2003–2004

University of GhentFaculty of Applied ScienceDepartment of Electronics and Information SystemsHead: prof. dr. ir. J. Van Campenhout

Promotor: prof. dr. ir. D. StroobandtAssistant: ir. B. Schrauwen

Abstract

Modular synthesizers exist for decennia in the world of analog electronics. RobertMoog2 defined the principles in 1965, with a prototype from his own hand, in [3].The concept was new: separate signal sources, signal elaborators, give each of theman input and output on the front panel, en connect externally, using cables.This birth soon proved to be vital, giving the musician access to almost unlimi-ted freedom to create new sounds, and simulate existing instruments. Up to now,modular synthesizers remain a hot topic in audio land, and have the continuingattention of experts in the world of electronic music.

As big the attention, so big is the number of variations. In the past decennia,modular synthesizers were created in the most colourful formats. Analog synthe-sizers started out from having only few modules, arriving at a large number, eachhaving smaller size. Digital synths were developed in both hardware and software,attaining success as commercial products.

The presented design takes synthesizers further. It implements a modular synthe-sizer on a single FPGA chip, and is called Fynth. It is an eight note polyphonoussynthesizer, with stereo output, and a sampling rate of 32 kHz. It uses vocabulary ofthe analogue world of synths, yet is simultaneously build upon elementary principlesof digital design: Moore Machines, bus protocols, time scheduling.

As a new design, it is a leap forward in its small scale and its flexibility. Amusician without knowledge of hardware design is able to control an play the synth,

2pronunciation: as the long ’o’ in vogue

ix

using software written for that purpose. A hardware designer feels himself lucky,discovering a synth that can be tuned according to his personal wishes. He himselfchooses which modules he wants to include in hardware.

Keywords: synth, digital audio, ELIS, FPGA

x

Costruzione di un Sintetizzatore Modulare su FPGA

daBenoit Catteau e Wouter Rogiest

Tesi di Laurea Specialistica per ottenere il titolo di Ingegneria Elettronica

Anno Academico 2003–2004

Universita di GentFacolta di Scienze ApplicateDipartimento di Elettronica e Sistemi di InformazionePresidente: prof. dr. ir. J. Van Campenhout

Promotor: prof. dr. ir. D. StroobandtAssistente: ir. B. Schrauwen

Riassunto

I sintetizzatori modulari esistono da quattro decenni nel dominio dell’elettronicaanalogica. All’epoca, Robert Moog3 introduceva gli elementi con un prototipo di1965. Il concetto era tutto nuovo: fare la separazione tra sorgenti, elaboratori eamplificatori dei segnali, e costruire blocchi separati, con un ingresso e uscita sulfront, e legati tra loro con dei cavi.

Questo ha mostrato un gran successo. Il musicista aveva la liberta di crearenuovi suoni, e poteva simulare gli strumenti classici. Ora, sintetizzatori modularirimangono un “hot topic” nel dominio di musica elettronica.

Le variazioni sono numerosissime. Nel mondo analogico, la storia comminciavacon qualche blocco e continuava con la creazione di un modulario piu diverso, og-nuno miniaturizzato. Nel dominio digitale, prodotti ben diversi, sia hardware chesoftware, sono stati costruiti.

Questo progetto implementa un sintetizzatore modulare su FPGA. Si chiamaFynth. Ha 8 voci independenti, una uscita di due canali, e una frequenza di campi-onamento di 32kHz. Per di piu, si basa su tutti gli elementi di una sistema digitale:Macchina di Moore, protocolli, divizione del tempo,...Offre un strumento ancora piu miniaturizzato, e una flessibilita profonda. Un mu-sicista e capace di suonarlo e programmarlo con il software. Il progettista hardwareinvece e capace di cambiare la struttura stessa, grazie alle proprieta di riconfigu-razione.

3pronuncia: come ’o’ nella parola inglese vogue

xi

Keywords: sintetizzatore, audio digitale, FPGA

xii

Aan Reinilde & Liesbeth

Inhoudsopgave

1 Inleiding 1

1.1 Probleemstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Invalshoek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.3 Overzicht van dit document . . . . . . . . . . . . . . . . . . . . . . . 2

2 Synthesizers en Audio 5

2.1 Synthesizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Muzieksynthese . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.2 Modulaire Synthesizers . . . . . . . . . . . . . . . . . . . . . . 13

2.2 MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.3 Digitale Synthesizers . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.3.1 Criteria voor Digitale Geluidskwaliteit . . . . . . . . . . . . . 19

2.3.2 Digitale audio en Vaste Komma . . . . . . . . . . . . . . . . . 26

3 FPGA 31

3.1 Een Herprogrammeerbare Chip . . . . . . . . . . . . . . . . . . . . . 31

3.2 Het Aanbod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.1 In & Uit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.2 Geheugens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.3 DSP’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2.4 PLL’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2.5 LAB’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.3 Samenspel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

i

4 De Fynth 41

4.1 Verdeel en Heers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1.1 Een Instrument . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1.2 Een Multiprocessor . . . . . . . . . . . . . . . . . . . . . . . . 43

4.1.3 In en Uit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.1.4 Tussenin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.1.5 Klokken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.1.6 Time Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.1.7 Integratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.1.8 Partiele Herconfiguratie . . . . . . . . . . . . . . . . . . . . . 57

4.2 The Big Picture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.2.1 De Opstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.2.2 Van Keyboard tot Boxen . . . . . . . . . . . . . . . . . . . . . 59

4.2.3 De Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.3 Look Closer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.3.1 Geluidssignalen en controlesignalen . . . . . . . . . . . . . . . 61

4.3.2 Enkele verbreide Operaties . . . . . . . . . . . . . . . . . . . . 63

4.3.3 Een Verbreid Proces – Noise Generator . . . . . . . . . . . . . 65

4.4 De Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.4.1 Chronos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.4.2 Deltasigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.4.3 Een Algemene Muziekmodule . . . . . . . . . . . . . . . . . . 68

4.4.4 Sencoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4.4.5 De Square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4.4.6 Sawtooth, Triangle, Sine en Noise . . . . . . . . . . . . . . . . 81

4.4.7 ADSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

4.4.8 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

4.4.9 Delay Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

4.4.10 Middleman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4.4.11 Mixer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

4.5 Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

4.5.1 Patch Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 98

ii

4.5.2 Demo Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 99

4.5.3 PCI Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

4.5.4 Serieel Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 102

4.5.5 Parallel Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 103

4.6 De Persing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

5 Extensies & Conclusie 107

5.1 Stand Van Zaken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5.1.1 Versie 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

5.2 Toekomstmuziek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

5.2.1 Partieel Herconfigureren . . . . . . . . . . . . . . . . . . . . . 110

5.2.2 MIDI Rechtoe Rechtaan . . . . . . . . . . . . . . . . . . . . . 111

5.2.3 Op een Xilinx chip... . . . . . . . . . . . . . . . . . . . . . . . 111

5.2.4 Verdere Alternatieven . . . . . . . . . . . . . . . . . . . . . . 112

5.3 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

5.3.1 Strategieen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

5.3.2 Nooit Rond . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

A Fynth - The Specs 115

A.1 Technical Information . . . . . . . . . . . . . . . . . . . . . . . . . . 115

A.2 MIDI Implementation Chart . . . . . . . . . . . . . . . . . . . . . . . 115

B Integraal schema van de Fynth 116

C Quartus Report 118

C.1 De resultaten: algemeen . . . . . . . . . . . . . . . . . . . . . . . . . 118

C.2 De resultaten: timing . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

C.3 Het grondplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

D Geheugenindeling 121

D.1 Square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

D.1.1 Implementation Section . . . . . . . . . . . . . . . . . . . . . 121

D.1.2 Note Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

D.2 ADSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

iii

D.2.1 Implementation Section . . . . . . . . . . . . . . . . . . . . . 122

D.2.2 Note section . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

D.3 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

D.3.1 first order memory block . . . . . . . . . . . . . . . . . . . . . 124

D.3.2 second order memory block . . . . . . . . . . . . . . . . . . . 125

D.4 Delay Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

D.4.1 Implementation section . . . . . . . . . . . . . . . . . . . . . . 126

D.4.2 Note section . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

D.5 Middleman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

D.5.1 Implementation section . . . . . . . . . . . . . . . . . . . . . . 127

D.5.2 Note section . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

E Overzicht van de bijgeleverde digitale documentatie 130

Bibliografie 131

iv

Lijst van figuren

2.1 De Moog-synthesizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2 Een wavetable instrument dat gebruikt maakt van 4 wavetables. Elkeomhullende rechts komt overeen met een wavetable links . . . . . . . 8

2.3 Een elliptische baan en het resulterende signaal. De bovenste figuurtoont een bovenaanzicht van het oppervlak dat voldoet aan de vergeli-jking wave(x, y) = (x − y) × (x + 1) × (y − 1) × (y + 1) . . . . . . . . 9

2.4 Tijdsvarierende additieve synthese: aparte frequentie en amplitude-omhullenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.5 boven: een vereenvoudigd zicht op een zoemgeluid met een aantal har-monischen met gelijke bijdrage. onder: na de substractieve syntheseis dit spectrum gecreeerd met vier pieken . . . . . . . . . . . . . . . . 11

2.6 Frequentiemodulatie . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.7 Het spectrum van een teruggekoppelde oscillator dat varieert naar-mate β toeneemt, met x = 200 Hz. De horizontale as heeft een bereikvan 0 tot 10 kHz. De verticale as gaat van 0 tot 60 dB. . . . . . . . . 12

2.8 Modellen van trillende oppervlakken en volumes aan de hand vanhet massa-veer model. (a) een trillend oppervlak, (b) een model vaneen trom met een circulaire ordening van de massa’s en veren en (c)een trillend volume kan gemodelleerd worden door een traliewerk vanmassa’s verbonden met veren aan de zes zijden . . . . . . . . . . . . . 13

2.9 De MiniMoog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.10 De verschillende oscillatoren . . . . . . . . . . . . . . . . . . . . . . . 15

2.11 De frequentiekarakteristiek van het Moogfilter . . . . . . . . . . . . . 15

2.12 Een ADSR volume-omhullende, met zijn vier fases A,D,S en R. . . . 16

2.13 Een DSP-chip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.14 Frequentierepresentaties . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.15 Enkele en dubbele precisie van vaste komma . . . . . . . . . . . . . . 26

v

2.16 Statistiek van de inkomende informatie, onder het niveau van dekwantisatiestap q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.17 Conversie van een analoog signaal naar een 4 bits vaste komma digi-taal signaal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.18 Dezelfde conversie maar door de ruis zijn de overgangen niet te voor-spellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.19 De ladder- en de tralie-implementatie van digitale filters . . . . . . . 29

3.1 Het bordje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2 Schematisch overzicht van de chip . . . . . . . . . . . . . . . . . . . . 33

3.3 Zicht op het binnenste van de chip . . . . . . . . . . . . . . . . . . . 34

3.4 Een pll schematisch weergegeven . . . . . . . . . . . . . . . . . . . . . 36

3.5 Een zicht op de architectuur van een logic element . . . . . . . . . . . 37

4.1 Een eenvoudig schema van de Fynth . . . . . . . . . . . . . . . . . . . 42

4.2 Conceptuele voorstelling van een eenvoudige patch . . . . . . . . . . 49

4.3 Hardware-voorstelling van de eenvoudige patch . . . . . . . . . . . . 55

4.4 conceptuele voorstelling van de eenvoudige patch . . . . . . . . . . . 56

4.5 Schema van de door chronos uitgedeelde busenables . . . . . . . . . 57

4.6 De acht mogelijke overgangen van regel 30 . . . . . . . . . . . . . . . 65

4.7 De evolutie van regel 30 in de tijd . . . . . . . . . . . . . . . . . . . . 65

4.8 Schema van de deltasigma modulator . . . . . . . . . . . . . . . . . . 67

4.9 Voorbeeld van de deltasigma modulatie van de waarde -1/4 . . . . . 68

4.10 Algemene Opbouw van een Muziek-Module . . . . . . . . . . . . . . . 69

4.11 Conceptueel Schema van de Note Handling . . . . . . . . . . . . . . . 76

4.12 C code voor een Moog VCF . . . . . . . . . . . . . . . . . . . . . . . 85

4.13 Blokschema van het filter . . . . . . . . . . . . . . . . . . . . . . . . . 85

4.14 Regalia Mitra Filter, en de klassieke implementatie van de All-PassFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

4.15 Tralie-implementatie van eerste en tweede orde . . . . . . . . . . . . . 87

4.16 Simulatie van de overdrachtsfunctie van de module filter. . . . . . . . 88

4.17 Delay line in zijn werking als “panning only” (p.o.), en als “delaydepth delay line” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.18 Delay line in zijn werking als “echo delay line” . . . . . . . . . . . . 91

vi

4.19 Schema van de mixer . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.20 Smart step down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

B.1 Algemeen overzicht van de verschillende modules. . . . . . . . . . . . 117

C.1 Het grondplan van de FPGA-chip. Onderaan (roze) zijn een aantalLogicLock -regio’s te zien voor de PCI interface. In het blauw ziet menwaar de sinus-generator zich situeert op de chip. . . . . . . . . . . . 120

vii

Lijst van tabellen

4.1 Opsomming van de modules, en hun aantal implementaties . . . . . . . . . . . 54

4.2 Overzicht van de door controlesignalen gemoduleerde parameter, per module . . 63

4.3 Operaties van de sencoder . . . . . . . . . . . . . . . . . . . . . . . . . . 74

4.4 Operaties van de oscillatoren, met hun digitale codering in het serieel protocol. . 80

4.5 Operaties van de ADSR, met hun digitale codering in het serieel protocol. . . . 83

4.6 Operaties van het filter, met hun digitale codering in het serieel protocol. . . . . 89

4.7 Operaties van de delay line, met hun digitale codering in het serieel protocol. . . 92

4.8 Operaties van de Middleman, met hun digitale codering in het serieel protocol. . 94

4.9 Operaties van de Mixer, met hun digitale codering in het serieel protocol. . . . 97

4.10 Standaard opbouw van een boodschap in Fynth patch protocol. . . . . . . . . . 98

4.11 Benaming onder woorden van de verschillende modules, en hun benaming in hetPatch protocol en het PCI protocol . . . . . . . . . . . . . . . . . . . . . . 99

4.12 Benaming onder woorden van de verschillende commando’s, hun benaming in hetpatch protocol, en hun codering in het PCI protocol . . . . . . . . . . . . . . 100

4.13 Standaard opbouw van een boodschap in Fynth demo protocol. . . . . . . . . . 101

4.14 Standaard opbouw van een boodschap in zowel Fynth PCI protocol als Fynth

serieel protocol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

4.15 Module-adressen op seriele en parallelle bus, in decimale notatie . . . . . . . . 102

4.16 Standaard opbouw van een boodschap in Fynth parallel protocol. . . . . . . . . 104

C.1 De Quartus II c© Flow Summary . . . . . . . . . . . . . . . . . . . . . . . 118

C.2 Het Timing analyser rapport . . . . . . . . . . . . . . . . . . . . . . . . . 119

viii

Hoofdstuk 1

Inleiding

1.1 Probleemstelling

Het doel van deze thesis is de bouw van een modulaire synthesizer in FPGA. Belang-rijk hierin is het modulaire concept: het zorgvuldig isoleren van verschillende mo-dules, tot in de hardware. De muzikale vereisten zijn meerstemmigheid, en volledigepatch-herconfigureerbaarheid.

1.2 Invalshoek

“Hardwareontwerp is zoals smijten met een boomerang: hoe meerervaring je hebt, hoe minder hij tegen je kop knalt.”

Benoit Catteau

Hardwareontwerp is zweten. Hardwareontwerp is vallen en opstaan. Hardwareon-twerp is al doende leren. Hardware is een kick, na doormaken van het voorgaande.Hardware dwingt je tot beslissingen – de goeie vlijen zich neer in je ontwerp, deslechte krijg je vroeg of laat naar je hoofd geslingerd.

Dit document is met verschillende doeleinden geschreven.

• Uiteenzetten wat er bestaat aan synthesizers en FPGA’s, om te tonen hoe ditwerk zich verhoudt tot beide.

• De lezer vertellen hoe hij de Fynth, resultaat van de thesis, kan hanteren.

• De opbouw van de hardware uitvoerig belichten, in de hoop dat een mogelijkeopvolger-ontwerper er mee gediend is.

1

• Tonen waar de onwerpers hindernissen ontmoeten, en op welke manier ze eenuitdaging vormden op gebied van creativiteit, analytisch denken, geduld enwerkzaamheid.

Dit document tracht leesbaar te zijn voor iedereen. Evenwel is het een illusie te be-weren dat het geen voorkennis van de lezer onderstelt. In het bijzonder wordt van delezer verwacht dat hij reeds noties heeft van digitale representaties (signalen, data,boodschappen), digitale systemen, en, specifieker, met hardware ontwerp op FPGAmet behulp van VHDL. Niettemin trachten hoofdstuk 2 en 3 een tegemoetkomingte zijn.

Verder willen de auteurs benadrukken dat dit document geen beeld van het werkzelf geeft. Het schept een beeld van het resultaat, en houdt voor de helderheidvan het betoog de chronologie van het ontwerpproces op de achtergrond. Dikwijlsscheen het de ontwerpers toe dat verbeten uitproberen de beste weg is, en dat slechtsachteraf de ware verklaring van het resultaat op de proppen komt. Dit documenttracht zo vaak mogelijk wetenschappelijk te zijn in zijn benadering, maar het deviesblijft: uit de techniek komt de wetenschap voort, niet noodzakelijk omgekeerd.

1.3 Overzicht van dit document

Hoofdstuk 2 valt in twee secties uiteen. De eerste sectie gaat in op een jong instru-ment in de muziekwereld, wiens implementatie het doel is van dit project: de synthe-sizer. Er wordt een beknopt overzicht gegeven van de verschillende types bestaandesynthesizers. De lezer wordt ingewijd in elementaire begrippen rond synthesizers, ende verschillende vormen van muzieksynthese. Vervolgens wordt toegespitst op eenwelbepaald type synth, de modulaire synthesizer. Elementaire opbouw en mogelijkevarianten worden kort besproken.Een volgende sectie geeft een ruwe schets van de werking van de MIDI-standaard,en duidt de rol aan van dit protocol in het kader van dit project.De derde sectie behandelt digitaal audio ontwerp. Verschillende mogelijke imple-mentaties van digitale audio worden in kaart gebracht, en FPGA-ontwerp wordtbinnen dit geheel gesitueerd. De determinerende rol van de gehanteerde getalrepre-sentatie (vaste komma) wordt afgewogen. Een focussering op het correct gebruikvan vaste komma vormt het sluitstuk van dit hoofdstuk.

Hoofdstuk 3 voert de tweede hoofdrolspeler in ons project ten tonele: deFPGA-chip van ALTERA, samen met talrijke additionele elektronica geıntegreerdop een Stratix PCI Development Board, een in de PC inschuifbare PCI kaart. Hethoofdstuk vangt aan met een bondige inleiding over FPGA’s, en hoopt het onder-werp toegankelijk te maken voor de leek. Een volgende sectie schetst hoe de chip

2

zich verhoudt tot de andere electronica op het bord, en hoe hun symbiose de ge-bruiker toestaat om het kaartje op een hoger abstractieniveau te herprogrammeren.De rol van de toolchain, VLSI design en VHDL worden uiteengezet. Ook wordtkort aangegeven met welke programma’s de ontwerpers te werk gingen. De laatstesectie belicht de verschillende protocols en geheugens die de Stratix kaart biedt; zemaakt de brug naar synthesizerontwerp door het nut van de voorhanden zijnde com-ponenten te meten aan de noden van een modulaire synthesizer: in- en uitwegen,gebruikte geheugens, gehanteerde klokken,... worden besproken.

Hoofdstuk 4 brengt het kind van dit ontwerpproject ten berde: de Fynth. Aan-vattend met een kwalitatief discours, gaat de uitleg, conform een top-down strategie,van grote naar steeds kleinere schaal; van de globale opstelling, tot de besprekingvan de procesverdeling binnen een enkele module.Vooreerst wordt er geschetst hoe de “verdeel-en-heers-strategie” uit de analogewereld vertaalbaar is naar FPGA-ontwerp. Het verband wordt gelegd tussen geschei-den conceptuele blokken, en hun hardware-projectie. De verschillende protocols(vier in aantal) worden opgesomd en toegelicht. Er wordt ingegaan op het belangvan time scheduling, proces-orthogonaliteit en geheugenscheiding. Er wordt eenblack-box model vooropgesteld van elk blok. Er wordt bepleit hoe uniformisatie vande interne signaalvoorstelling, gekoppeld met fixed time scheduling, de flexibiliteitaanzienlijk ten goede komt. Ook wordt er getoond dat bepaalde integraties (“hetsamennemen van implementaties”) de autonomie van de afzonderlijke implemen-taties niet in gedrang brengen, en de hardware veel efficienter benutten. Tenslottewordt aangegeven hoe het black-box model de weg opent naar partiele herconfi-gureerbaarheid at runtime – een luxe voor de muzikant, die zijn analogon niet (ofnauwelijks) kent in de analoge wereld.De volgende sectie toont het project in zijn volledige ontplooiing: hier wordt schema-tisch weergegeven wat de Fynth zoal nodig heeft om te werken, en wordt van elkonderdeel de taak toegelicht. Ook wordt aangeduid hoe de communicatie verloopt.Een aparte sectie is gewijd aan de opsomming van de protocols, en een grondigoverzicht van hun eigenschappen.Aansluitend komt de sectie die de taakverdeling in de Fynth onder de loep neemt.We kijken nu zuiver op niveau van de FPGA-chip, en bestuderen de inhoud enhierarchie. Alle blokken worden aan de lezer voorgesteld, en krijgen een duidingomtrent hun bestaansreden en verantwoordelijkheden.Verder in de fijnstructuur van de Fynth doordringend, analyseert de volgende sec-tie de interne werking van elk blok afzonderlijk, en geeft van de intern gescheidenprocessen het nut van hun autonomie weer, en hun eventuele communicatiemecha-nismen.Een aparte sectie, getiteld “De Persing”, geeft een beeld van de wijzigingen die deontwerpers doorvoerden in hun poging om misschien wel de meest ondoordringbarekunst in hun ontwerp tot een goed einde te brengen: het inbrengen van de succesvol

3

gesimuleerde code in de hardware.Het slothoofdstuk, hoofdstuk 5, vat aan met een overzicht van al dan niet geımple-menteerde zaken en mogelijke bugs. In een volgende sectie onderzoeken de ontwer-pers verschillende scenario’s voor uitbreiding, en schatten hun moeilijkheidsgraad.De conclusie is het slot.

In bijlage zitten nog enkele appendices. De appendix “Specs” zet de technischespecificaties van de Fynth op een rijtje. Een aparte appendix geeft een integraalstructureel grondplan van de Fynth. Een volgende appendix geeft extracten uithet compilatierapport van Quartus, ultieme scheidsrechter in een FPGA-ontwerp.Een andere appendix geeft een beeld van het geheugen-gebruik van de verschillendemodulen, en wil toekomstige opvolger-ontwerpers van dienst zijn met details overadreslocaties. De laatste appendix somt op wat de nieuwsgierige lezer kan vindenop de bijgeleverde digitale documentatie.

4

Hoofdstuk 2

Synthesizers en Audio

“Music is the art of sounds in the movement of time.”Anonymous

2.1 Synthesizers

2.1.1 Muzieksynthese

Instrumentenbouw

Van oudsher is de mens gefascineerd door geluid. Instinctief ervaren we lage geluideneerder als rustgevend en hoge geluiden veeleer als alarmerend. Het spreekt voor zichdat de mens ook zelf geluiden wou produceren en imiteren. Instrumentenbouw be-gon met simpel houten slagwerk. In de loop van de geschiedenis kwamen gaandewegmeer en meer complexe en gevarieerde instrumenten ter wereld. Instrumentenbouwgroeide uit tot een ware kunst; een goed klassiek instrument vervaardigen vergtjaren tot decennia aan ervaring en studie. Voor de bouw van een elektronisch in-strument geldt in principe dezelfde regel; gelukkig wordt van de bouwers veel mindertechnische ervaring gevergd; ze kunnen immers voor veel problemen terugvallen opwetenschappelijke grondslagen, eigen aan de elektrotechniek.

Elektronische Muziek

De twintigste eeuw was vooral gedreven door het algemeen gebruik van elektriciteit.Zo openden zich op 26 september 1906 de deuren van de“Telharmonic Hall” in NewYork. Daar konden 900 toehoorders een concert beleven van een nieuw instrument,het Telharmonium van Thaddeus Cahill. Het was de eerste en grootste synthesizerooit. Als eerste produceerde het tonen van niet-mechanische oorsprong, dergelijketonen worden tot op vandaag synthetische tonen genoemd.

5

Begin jaren zestig deden de Bell laboratoria baanbrekend onderzoek naar de gloed-nieuwe transistortechnologie. Voor de analoge wereld betekent dit de opkomst vanopamps. Robert Moog maakte hier handig gebruik van, en luidde een nieuw tijd-perk in voor de elektronische muziek; hij creeerde de modulaire synthesizer 1. Hetresultaat heet “Moog”, en is te zien in Figuur 2.1. De MiniMoog was klein, robuust,en klonk daarenboven goed. Van bij zijn marktlancering genoot hij een razendepopulariteit. De MiniMoog werd de standaard om nieuwe geluiden te ontdekken,en blijft een niet weg te denken protagonist in de geschiedenis van de modulairesynthesizers.

Figuur 2.1: De Moog-synthesizer

Computers & Muziek

Ook in de computerwereld drong muziek door. De Bell Laboratories namen het voor-touw in de beginjaren, en lieten hun computers, IBM 704’s, geluiden synthetiserenmet om het even welke stemming of golfvorm, inclusief tijdsvarierende frequentie-en amplitude-omhullenden2. De gehanteerde programmeertaal heette “Music I”, enbood de gebruiker de mogelijkheid om een driehoeksgolf te genereren met wille-keurige frequentie en duur3.

1Lees meer over Robert Moog op www.salon.com2Protagonist was Max V. Matthews; hij hanteerde de IBM 704 machine. Deze was capabel

36 bit brede woorden te verwerken, had een ingebouwde vlottende komma processor, en had eengehaugencapaciteit van 144 kB. Samen met een 12 bit met vacuumbuizen gebouwde Digitaal--Analoog Convertor was de onderzoeksgroep de enige die door computers gegenereerd geluid konproduceren.

3De eerste compositie in deze taal, ”In a silver scale”, is een monofone studie, geschreven doorpsycholoog Newman Guttman op 17 mei 1957.

6

In 1958 had de IBM 704 al plaatsgemaakt voor een verbeterde versie, gemaakt uittransistoren: de IBM 7094. Dat gaf meteen de aanleiding tot een verbeterde pro-grammeertaal, “Music II”. Het was toen al mogelijk om 4 onafhankelijke stemmente gebruiken, evenals zestien in het geheugen opgeslagen golfvormen.In 1958 werd in New York City het eerste concert voor met computermuziek geor-ganiseerd. John Cage was er de moderator van een nabeschouwing.In de jaren zestig volgden de talen elkaar op, in het kielzog van de ontwikkeling vande computertechnologie. Naar al die programma’s wordt nu gerefereerd als “MusicN” talen.Vandaag bestaan er enorm veel mogelijkheden. Het kan gaan van een gewone com-puter waarop een programma als Cubase c© is geınstalleerd, tot een volledig gespecia-liseerde blok hardware, zoals de Korg c©, een legende als het op synthesizers aankomt.

Synthese – de filosofieen

Om geluid te synthetizeren kan men verschillende paradigma’s hanteren. De voor-naamste sommen we hier op.

Wavetable Synthese: Deze invalshoek werd gebruikt bij de eerste computer-muziek. De werking gaat als volgt. Verschillende relatief eenvoudige golfvor-men zijn in het geheugen opgeslagen, of althans een periode ervan. Met diebasisvormen kan men dan op twee manieren tewerk gaan. Ofwel gebruikt mende verschillende golfvormen niet tegelijk, maar gaat men geleidelijk van de enein de andere over naarmate de toon evolueert zoals in Figuur 2.2. Het heeft alsvoordeel dat bijvoorbeeld voor de aanslag van een piano een aparte golfvormkan worden gebruikt. De andere manier is een uitbreiding van additieve syn-these (zie verder). Hier komen de golfvormen niet na elkaar, maar worden zegesommeerd. Door die verschillende lagen te gebruiken, bereikt men hybridetimbres zoals een saxofoon/fluittoon.

Golfgebied Synthese: Een uitbreiding van de wavetablesynthese is golfgebiedsynthese(Figuur 2.3). Men maakt daarbij opnieuw gebruik van een wavetable,maar dan geen eendimensionale tabel, maar wel tweedimensionale. De waardesvan de golfvorm kunnen weergegeven worden in een driedimensionaal opper-vlak dat dus afhankelijk is van twee variabelen. Daarna kan men paden be-denken op dat oppervlak, wat resulteert in een bepaalde sequentie van waar-den, die opnieuw in een golfvorm resulteren.

Bemonstering: Bij “bemonstering” of sampling gebruikt men, net zoals bij wave-tablesynthese een golfvorm die in het geheugen is opgeslagen. Maar de golfvormis hier eigenlijk een echte opname, wat betekent dat het geheugen duizendencycli bevat. Daardoor zit het hele verloop in frequentie en volume allemaalbevat in dat ene sample en vertoont het geluid dadelijk al een grote rijkdom

7

Figuur 2.2: Een wavetable instrument dat gebruikt maakt van 4 wavetables. Elke omhul-lende rechts komt overeen met een wavetable links

aan eigenschappen. Men kan de opname dan onveranderd gebruiken voor eenmontage, maar meestal wordt de mogelijkheid gegeven om te loopen. Dat is eeneenvoudige manier om het geluid langer te maken door een stuk er voortdurenduit te herhalen, zonder dat het echt opvalt. Meer gesofisticeerde techniekenzijn pitch-shifting en sample-rate conversion without pitch-shifting. Door deeerste techniek wordt het mogelijk om het geluid te hergebruiken, maar op eenandere toonhoogte. Dit wordt gerealiseerd door een temporegeling. Wanneermen ook de tweede techniek gebruikt, dan kan men zelfs de oorspronkelijkelengte van het monster behouden, terwijl de toonhoogte toch is veranderd.

Additieve Synthese: Additieve synthese is een populaire techniek die gebaseerd

8

Figuur 2.3: Een elliptische baan en het resulterende signaal. De bovenste figuur toont eenbovenaanzicht van het oppervlak dat voldoet aan de vergelijking wave(x, y) = (x − y) ×(x + 1) × (y − 1)× (y + 1)

is op de fouriergetransformeerde van signalen. Er is immers aangetoond dat elksignaal kan ontbonden worden in een oneindige som van sinussen. Vandaar dat,waneer men over een rijke bron van sinussen zou beschikken, men elk mogelijkdenkbaar geluid zou kunnen synthetiseren. Doordat men echter steeds over eeneindig aantal oscillatoren beschikt, is men uiteraard beperkt in de praktischeverwezenlijking (Figuur 2.4). Dan wordt er teruggegrepen naar technieken alsprincipal component analysis, waarbij enkel de voornaamste frequenties doorde sinusbronnen worden gemaakt in de hoop het gewenste geluid daarmee zogoed mogelijk te benaderen.

Granulaire Synthese: Bij granulaire synthese is er gedacht aan de golf-deeltjes-dualiteit die bestaat bij elektromagnetische verschijnselen zoals licht. Net zoalswe licht kunnen voorstellen als een golf of anderzijds als deeltjes (fotonen),kunnen we ook geluid proberen te modelleren als verschijnselen opgebouwduit elementaire deeltjes. Deze voorstelling is vooral geschikt wanneer we eeningewikkeld geluid willen voorstellen. Dan is de gemakkelijkste manier om dat

9

Figuur 2.4: Tijdsvarierende additieve synthese: aparte frequentie en amplitude-omhullenden

te doen, gebruik maken van geluidsdeeltjes. Die deeltjes zijn van korte duur (1tot 100 ms) maar lang genoeg zodat de lengte, de frequentie, en de amplitudenog kunnen waargenomen worden. Die representatie houdt het midden tussende tijdsrepresentatie (zoals bij sampling) en de frequentierepresentatie (zoalsbij additieve synthese). Door gebruik te maken van een verzameling basisele-menten, kan men ook hier aan de slag om een welbepaald geluid te genereren.

Substractieve Synthese: De naam substractieve synthese doet dadelijk denkenaan additieve synthese. Het is immers de regelrechte tegenhanger. In plaatsvan te starten van geluidsbronnen die precies een frequentie weergeven, startmen van oscillatoren die naast een grondtoon, ook een groot gamma aan boven-tonen genereren. Het komt er dan op neer om het gewenste spectrum aan tonente extraheren. Daarvoor worden filters gebruikt. Men bekomt een resultaatals in Figuur 2.5.Deze techniek werd voor het eerst toegepast in de vocoder. Dit instrumenttracht de menselijke stem te imiteren. Daarvoor legt men een bron aan diebij benadering alle frequentiecomponenten bevatte. Daarna wordt dat geluiddoor een filterbank gejaagd. Het resultaat was dat men erin slaagde om hetspectrum van klinkers goed na te bootsen. Een zingende stem bleek redelijkgoed na te bootsen, een spreker daarentegen werd vertaald in iets onverstaan-baars.

10

Figuur 2.5: boven: een vereenvoudigd zicht op een zoemgeluid met een aantal harmo-nischen met gelijke bijdrage. onder: na de substractieve synthese is dit spectrum gecreeerdmet vier pieken

Voor synthesizers bleek deze techniek een groot succes, ondermeer dankzij derealiseerbaarheid en de zeer typische rauwe, krachtige klank. Vele van de le-gendarische klanken uit de popmuziek van de jaren ’80 kwamen tot stand metdeze methode.

Figuur 2.6: Frequentiemodulatie

Modulatiesynthese: Ook modulatiesynthese bestaat. Zowel AM (amplitude-

11

modulatie), FM (frequentiemodulatie) en fasedistortie worden als synthesetech-niek gebruikt. De meest gebruikte van die verzameling is teruggekoppelde FMsynthese. Bij die techniek wordt de uitgang teruggekoppeld naar de fase-ingangen opgeteld bij het fase-increment dat nodig is om de gevraagde frequentie teproduceren. In Figuur 2.6 is dit weergegeven. In formulevorm bekomen we

uitgang = A · sin(y) met y = x + β · A · sin(y)

Figuur 2.7: Het spectrum van een teruggekoppelde oscillator dat varieert naarmate βtoeneemt, met x = 200 Hz. De horizontale as heeft een bereik van 0 tot 10 kHz. Deverticale as gaat van 0 tot 60 dB.

Een belangrijk voordeel van deze techniek, is dat een enkele oscillator eenveelzijdige bron wordt; naarmate β varieert is de resulterende golfvorm eenzuivere sinus, of juist een golfvorm vol boventonen. Dit wordt getoond inFiguur 2.7.

Fysische Modellering: Een andere manier is het starten van een muziekinstru-ment en het trachten te modelleren met fysische wetten: physical modeling.Dit is aangegeven in Figuur 2.8.

12

Figuur 2.8: Modellen van trillende oppervlakken en volumes aan de hand van het massa-veer model. (a) een trillend oppervlak, (b) een model van een trom met een circulaireordening van de massa’s en veren en (c) een trillend volume kan gemodelleerd wordendoor een traliewerk van massa’s verbonden met veren aan de zes zijden

Andere: Met computertoepassingen kan men verder gaan. Men kan b.v. devereiste fequentiepieken opgeven en de computer de daarvoor nodige bron-nen en filters laten berekenen, waarna het gewenste geluid kan worden gepro-duceerd. Het analogon in het tijdsdomein bestaat ook: een periode van eengolfvorm d.m.v. een aantal punten aangeven. Daarmee kan de computer doorinterpolatie (van lineair tot splines) de benodigde waardes berekenen en inhet geheugen stoppen. Het resultaat leent zich uitstekend om aan wavetablesynthese te doen. Er bestaan zelfs methodes voor synthese op basis van sto-chastische regels. De mogelijkheden reiken zowaar verder dan de horizon...

Als besluit van deze paragraaf vermelden we onder welk paradigma de Fynth ont-worpen werd: substractieve synthese.

2.1.2 Modulaire Synthesizers

Deze thesis implementeert een modulaire synthesizer met substractieve synthese. Decombinatie is geenszins nieuw; een legendarische voorganger oogstte er reeds grootsucces mee: de MiniMoog. Een afbeelding is te zien in Figuur 2.9.

De MiniMoog is een muziekinstrument. Ontwerper Robert Moog liet zijn kennisvan de elektrotechniek gelden, en liet zich veelvuldig inspireren door zijn vrien-

13

Figuur 2.9: De MiniMoog

den muzikanten. Als afgestudeerd ingenieur fysica (vastestof-fysica) was hij gefasci-neerd door de mogelijkheid om met opamps en transistoren muziek te maken. Zijnpopulairste verwezenlijking is de MiniMoog, de eerste elektronische synthesizer diemuzikanten mee op het podium konden nemen4.

Modulariteit

Uniek aan een modulaire synthesizer is de mogelijkheid om elke module als eenonderdeel van de geluidsweg zelf te gebruiken, of om het blokje toe te passen om eenbepaalde parameter in die geluidsweg te beınvloeden. Wanneer men de MiniMoogeven naderbij bekijkt, kan men inderdaad verschillende modules onderscheiden.

Oscillator

De eerste module is de oscillator, het circuit dat “vibreert”. Dat blokje kan derauwe golfvorm genereren, en kan aangezien worden als het trillende riet of de snaarvan een klassiek muziekinstrument. De vorm van de rauwe golfvorm is belangrijk,want naargelang die vorm, verandert de harmonische inhoud en dus ook het timbrevan het geluid. Men kan de oscillatoren als echte geluidsbronnen gebruiken, maaranderzijds kan het geproduceerde signaal ook bv de frequentie van een andere oscil-lator moduleren.Ook in de Fynth zijn er oscillatormodules aanwezig. Er is een blokje dat een zaag-tandgolf genereert. Die vorm zorgt voor het grootst aantal harmonischen en klinkthelder en zoemerig. Een blokgolfmodule heeft daarentegen enkel even harmonischenen klinkt daardoor helder, maar hol als een klarinet. De pulsbreedte van de blokgolfkan gevarieerd worden, het blijft echter een heldere dunne klank. Men kan ook eendriehoekige golfvorm gebruiken. De harmonischen zijn daar zo laag in amplitudedat het geluid gedempt en fluitachtig klinkt. De ontwerpers hebben ook een sinus-generator voorzien, niet echt als geluidsbron, maar eerder om effecten als triller,of vibrato te kunnen bekomen. Ten laatste is er ook een ruisbron. Ook die kan

4Robert Moog is een legende in de synthesizerwereld, en is in vele opzichten het gezicht vandigitaal audio-ontwerp. Hij stond aan de basis van de ontwerpsfilosofie (modulaire synthesizers).Hij ontwierp de Minimoog. Hij stond mee aan de basis van het standaardprotocol voor digitalemuziekuitvoering: MIDI (zie Sectie 2.2).

14

moeilijk een echte oscillator worden genoemd, maar is nuttig voor het bereiken vanspeciale effecten en bovendien kan er een bepaalde frequentie in herkend wordenals dit blokje gebruikt wordt in combinatie met een filter. De golfvormen ziet mensamengevat in Figuur 2.10.

Figuur 2.10: De verschillende oscillatoren

Filter

Filters zijn de modules die de naam substractieve synthese in de praktijk omzetten.Het neemt immers een aantal frequenties weg uit het ingangssignaal. Algemeenbestaan er drie soorten filters. Een laagdoorlaatfilter (Figuur 2.11) neemt alle fre-quenties boven zijn afsnijfrequentie weg. Een hoogdoorlaatfilter laat die frequentiesnet wel door. En de laatste soort, banddoorlaatfilters, heeft twee afsnijfrequenties.Die twee definieren een band waartussen alle frequenties doorgelaten worden. DeFynth bevat een laagdoorlaatfilter met mogelijkheid van resonantie. 5

Figuur 2.11: De frequentiekarakteristiek van het Moogfilter

5Er is vaak discussie over de definitie van afsnijfrequentie. Laten we voor alle duidelijkheidaannemen dat dit het punt is waar de amplitude ten opzichte van de doorlaatband met 3 dB wordtverminderd (of de amplitude is gehalveerd) [6]

15

ADSR

De ADSR staat toe om het volume te regelen, en is in technische termen een volume-omhullende generator. Deze module beschrijft de omhullende van het geluid naar-mate het evolueert in de tijd. Om de eigenschappen van dit blok te regelen zijn ermeestal vier parameters voorzien. “Attack”, gemeten in de tijd, bepaalt het vol-ume bij de toonaanzet. Dan wordt met “decay” geregeld hoe gauw de toonaanzetovergaat in het aangehouden gedeelte van de toon, de “sustain”. Met die parame-ter wordt de geluidssterkte geregeld gedurende die tijd. Als laatste is er “release”:hiermee wordt bepaald hoe lang het duurt vooraleer de noot uitsterft. Deze vierparameters samen vormen een ADSR-generator. Dit is weergegeven in Figuur 2.12;men notere dat de betekenis van de parameter sustain niet de lengte van de sustain-fase aanduidt (zoals de figuur lijkt te suggereren), maar de hoogte.Ook in het ontwerp is een ADSR-generator aanwezig. Het is een belangrijk elementin de toonvorming. Wanneer men een toon van een klassiek instrument bestudeert,kan men er een vergelijkbaar verloop in herkennen.

Figuur 2.12: Een ADSR volume-omhullende, met zijn vier fases A,D,S en R.

Mixer

De laatste belangrijke component is de mixer. Daar wordt immers het aandeel vanalle geluidsbronnen in het eindsignaal geregeld. Het spreekt voor zich dat dezecomponent ook in het ontwerp niet ontbreekt, want hij is van cruciaal belang omeen goede samensmelting van de verschillende klanken te bekomen.

16

Regelen

Een belangrijke eigenschap van de MiniMoog is de mogelijkheid om parameterste moduleren. Zo kan b.v. de frequentie van een oscillator door de uitgang vaneen andere oscillator worden beinvloed. Daardoor krijgt men een trillereffect eneen complexer toonbeeld. Voor de MiniMoog is dat mogelijk, omdat elk blokjeeen uitgangswaarde genereert, gemeten in spanning, die zonder meer bewerkingenmet b.v. een spanningsgecontrolleerd filter kan worden verbonden (wah-wah effect).Vandaar dat de componenten voltage controlled oscillators (VCO), voltage controlledfilters (VCF) en voltage controlled amplifiers (VCA) heten. Om die effecten toete laten heeft men bovendien nog een LFO voorzien, een low frequency oscillator.Hij genereert frequenties beneden de 20 Hz, dus onhoorbaar, maar wel uitermategeschikt als moduleersignaal. De ontwerpers hebben ook deze filosofie gevolgd. Aanelk blokje (behalve de eindmixer dan) wordt de mogelijkheid gegeven om ofwel eengeluidselement of een controle-element te zijn.

Een nieuwe MiniMoog?

Hierboven is de Fynth vergeleken met de MiniMoog, maar dat neemt niet weg dathij de vergelijking met andere modulaire synthesizers niet zou doorstaan. Het ver-schil zit hem dan vooral in kleinere dingen zoals bepaalde opties die wel of nietaanwezig zijn. Het grote verschil ten opzichte van de MiniMoog is dat het ontwerp 8notenpolyfonie ondersteunt, terwijl de MiniMoog een monofone en dus pure ”lead-synthesizer is.

2.2 MIDI

MIDI6 is een communicatie-standaard om digitale muziekinstrumenten (typisch pi-ano keyboards) met elkaar te verbinden. MIDI werd ontwikkeld in de vroege jaren’80, en maakt het mogelijk letterlijk tientallen instrumenten te verbinden en te latensamenwerken. MIDI abstraheert een muzikale partituur of live-uitvoering tot eenreeks van gebeurtenissen, en zet alleen deze om tot – bijgevolg compacte – digitalecode. Het indrukken van een noot op het klavier genereert een MIDI “Note-On”boodschap, bestaande uit 3 boodschappen van elk 7 bit, geflankeerd door een start-bit (0) en een stopbit (1). De eerste boodschap geeft de aard van het commandoaan (voor “Note On” is dat de binaire sequentie 1001 0000, of, in hexadecimalenotatie, 0x90), de volgende 7 bit geven het nootnummer aan, en de laatste 7 bitgeven de velocity of aanslagintensiteit aan7. Het indrukken van e.g. de la van het

6Music Instrument Digital Interface7Voor details over MIDI-protocol verwijzen we naar [5].

17

vierde octaaf8 genereert een note-on boodschap voor nootnummer 69.Er bestaan vele types MIDI-boodschappen, waarvan sommige betrekking hebbenop de uitvoering, andere op meer formele zaken als synchronisatie, verandering vaninstrument. Van alle MIDI-boodschappen die door het keyboard uitgezonden endoor de PC ontvangen worden, behoudt de Fynthsoftware enkel de note-on en note-off boodschappen, en negeert de andere. De nuttige boodschappen worden door desoftware omgezet in het Fynth-eigen protocol, dat verder toegelicht wordt in Sub-sectie ?? en “PCI Protocol” heet (omwille van de bus waarover de boodschappenreizen).

Vanaf de conversie naar PCI protocol is er geen sprake meer van MIDI als stan-daard9. Het PCI protocol bevat de aanslagintensiteit niet meer, en geeft alleen een(geschikt genormeerde) frequentie door, die correspondeert met het nootnummer.De Fynth herkent deze informatie en onderneemt passende acties.

Uit bovenstaande mag het de lezer duidelijk zijn dat de Fynth geenszins eenMIDI-machine is. Het MIDI-protocol werd ontworpen voor de digitale nabootsingvan instrumenten en orkesten, en biedt ons slechts weinige commando’s die een vol-doende breeddragende betekenis dragen om ons tot nut te zijn.Enerzijds zijn vele MIDI-commando’s die de Fynth schijnbaar van pas kunnen komente eng in betekenis als het op modulaire synthesizers aankomt 10.Anderzijds vallen vele MIDI-commando’s (zoals het implementeren van verschillendeMIDI-kanalen) buiten het bestek van dit afstudeerwerk, of buiten het interessege-bied. Voorgaande argumenten nopen ons ertoe enkel de in betekenis samenvallendeMIDI-commando’s te gebruiken, en de rest via software te controleren11. MIDI dientons veeleer als muzikant – wat is er beter dan een echt pianoklavier onder de vingers– en minder als ingenieur.

2.3 Digitale Synthesizers

Men moet goed beseffen dat het maken van muziek via hardware nog niet langbestaat, maar wel degelijk een hele evolutie heeft doorgemaakt. Van uren rekenwerk

8 Dit is de diapason, genoteerd als A in Helmholtz-notatie, en sinds 1938 per definitie vastgelegdop 440 Hz. Meer informatie in [2]

9Het “niet standaard zijn” kan uitnodigen tot uitbreidingen van de Fynth; voor uitdiepingrefereren we aan Hoofdstuk 5.

10 Nemen we het voorbeeld van een handige draaiknop op het MIDI keyboard om de attacktime te regelen, dan zien we dat de regeling van de verondersteld unieke ADSR voor de Fynthmet zijn zes ADSR’s een spraakverwarring vormt. Een software-gestuurde selectie van ADSR’sdie door MIDI dienen aangestuurd biedt soelaas, doch zadelt ons al gauw op met rendementsarmprogrammeerwerk en een gebruiksonvriendelijk voorkomen

11Software, die we overigens al nodig hebben voor het doorsturen van patches, vreemd aan MIDI.

18

voor een streepje muziek, is het streefdoel van de hedendaagse geluidsingenieur hetontwerp van een “real-time” digitale synthesizer. Daartoe beroept hij zich vooralop gespecialiseerde DSP-chips die de nodige bewerkingen voldoende rap kunnenuitvoeren en die de “real-time” synthese de dag van vandaag mogelijk maken. Erzijn dan ook een aantal criteria ontstaan om DSP-chips te kwantificeren.

2.3.1 Criteria voor Digitale Geluidskwaliteit

Voor DSP’s12 (Figuur 2.13) zijn de belangrijkste criteria bemonsteringsfrequentie,woordbreedte, en interne coderesolutie. Als men tonen wil genereren, horen daarook de lengte van de wavetable, en de frequentieresolutie bij.

Bemonsteringsfrequentie

De bemonsteringsfrequentie of sampling rate houdt direct verband met het Nyquist-theorema. Als men het ganse hoorbare spectrum (20 - 20000 Hz) zou willen be-strijken, dan heeft men minstens een frequentie nodig van 40 KHz. Het spreektvoor zich dat daarom industriele standaarden zijn aangenomen. De meest gangbarefrequentie voor professioneel gebruik is 48 KHz. Maar om historische redenen is bijde compact disc een andere frequentie aangenomen, nl. 44,1 KHz, die veel algemeneris ingeburgerd door het succes van die informatiedrager.

Figuur 2.13: Een DSP-chip

De ontwerpers hebben geopteerd voor een systeem dat aan geen van beide stan-daarden voldoet. De Fynth is een synthesizer geworden met een sample-frequentievan 32 KHz. Aangezien het MIDI-protocol wordt geondersteund, moet de hoogstmogelijke frequentie kunnen worden voorgesteld. Die bedraagt voor MIDI 12544Hz, en blijft ook met deze samplefrequentie representeerbaar.

De aandachtige lezer merkt op dat, voor een toon van 12 kHz, alle harmonis-chen onrepresenteerbaar zijn, conform het Nyquist-theorema. De eerste harmonischeheeft immers de dubbele frequentie, 24 kHz, reeds ver buiten het domein van repre-senteerbare frequenties. Wat gebeurt er met de harmonischen? We detecteren een

12Digital Signal Processor

19

knelpunt ter hoogte van de oscillatoren, de signaalgeneratoren.Redeneren we verder op de 12kHz toon, e.g. gegenereerd door een zaagtand, in zijnaard rijk aan harmonischen. Denken we aan Nyquist, dan beseffen we dat de juistegeneratie alleen de grondtoon zou leveren. Alle harmonischen (frequentie f0) zijnimmers onrepresenteerbaar, en kunnen dus alleen, via aliasing, het signaal bevuilenop frequenties (16 kHz - f0).Om de mathematisch correcte 12 kHz te genereren, zou de zaagtand zijn signaalmoeten afleiden uit een sinusoıdaal verloop (vrij van harmonischen). In de Fynthevenwel, wordt de 12 kHz toon rechtstreeks afgeleid uit de zaagtand-functie. Dezelaatste is rijk aan harmonischen, die in het geval van een 12 kHz toon boven debemonsteringsfrequentie vallen. Deze bron leidt om evidente redenen tot anderemonsterwaarden, dan in het geval bemonstering van een sinusoıdaal signaal. Hetverschil tussen de sinus-monsterwaarden, en de monsterwaarden uit de zaagtand,zijn foutwaarden. Hun opeenvolging, het foutsignaal, creeert stoorsignalen in hetuitgaand signaal. Deze stoorsignalen zijn evenwel van secundair belang, om volgenderedenen.

• Het vermogen van het foutsignaal blijft heel laag voor signalen met frequentievoldoende onder de bemonsteringsfrequentie.

• Zelf een vleugelpiano (het type piano met het grootste frequentiebereik) heeftvoor zijn hoogste noot slechts 8 kHz.

Niettemin schaden zij de geluidskwaliteit. Nemen we de oplossingen in overweging,dan stellen we twee dingen vast.

• Een elegante oplossing lijkt het plaatsen van een laagdoorlaatfilter na elkeoscillator. Dit is echter ronduit verkeerd: de ongewenste frequenties zijn reedsin het signaal doorgedrongen, en bevinden zich op een willekeurige positie inhet spectrum. Filtering kan niet baten, het kwaad is reeds geschied.

• Een echte oplossing zou een eenzijdig wavetable-gebaseerde aanpak zijn. Peroctaaf13 zou een wavetable voorzien kunnen worden, die vooraf al netjes ont-daan is van alle frequenties, hoger dan de bemonsteringsfrequentie. Dezeoplossing is afdoend, en hoewel ze behoorlijk wat geheugen opslorpt, is zequa structuur weinig “hardware-vretend”.

Om redenen van relatief laag grensnut, zagen de ontwerpers af van de implementatievan deze complexere structuur14. De ontwerpers beperkten zich tot een simpele

13beter nog ware per 1/3 octaaf14Deze structuur nodigt evenwel uit tot uitbreiding van de Fynth, en wordt als dusdanig vermeld

in Hoofdstuk 5.

20

mathematische calculatie15, beseffend dat ze hiermee een zekere fout laten bestaan.Evenwel menen ze dat deze daling van geluidskwaliteit voor hoge frequenties hetspeelplezier niet hoeft te remmen.

woordbreedte

Denken we aan de representatie van een audio-signaal in een amplitude-tijd diagram.Als de x-as de tijdsas zou zijn, dan is de bemonsteringsfrequentie de resolutie bekekenlangs deze as. Maar even belangrijk is de woordbreedte, de resolutie langs de y-as. De gangbare norm is zowel 16 bits input en 16 bits output. Om dat ietstastbaarder te maken, kunnen we deze cijfers ook vertalen in dynamiek. Met devolgende vuistregel

dynamischbereik = aantalbits× 6, 11[dB]

bekomt men voor deze zestien bits een bereik van 96 dB.Studies hebben aangetoond dat het oor een bereik heeft van 0 dB tot ongeveer125 dB. Die bovengrens komt overeen met de pijndrempel. De standaard 16 bitbestrijken dus het grootste deel van wat het oor aankan. Niettemin zijn de laatstejaren ook DSP’s beschikbaar die werken met 20 bits aan in- en uitgang en dan met120 dB uiteraard nog meer voldoen. De grotere woordbreedte vertaalt zich, in sig-naal-technische termen, in een vermindering van de kwantisatieruis.Als er een breedte van 16 bits aan in- en uitgang wordt gehanteerd, wil dat nietzeggen dat intern die breedte wordt aangehouden, integendeel. Ook hier is het zodat, wanneer men vertrekt van 16 bit in/uit, intern meestal een breedte van 24bit wordt aangehouden. Dan nog is die breedte niet voldoende om hoogwaardigefilteroperaties uit te voeren. Er is sowieso bij hardware filters gevaar dat er limitcycles optreden. Dit betekent dat het filter uit zichzelf begint te oscilleren, door depropagatie van kleine numerieke fouten. De oplossing hiervoor is het opdrijven vande woordbreedte tot 48 bit. Nadeel is natuurlijk dat de verwerkingssnelheid dangehalveerd wordt, of de opgeeiste chipoppervlakte verdubbeld. Het veel gebruiktealternatief is het voorzien van een 32- tot 64-bit vlottende komma voorstelling.

In het ontwerp is aan de eis van 16 bit aan de uitgang voldaan. Intern gebruikenwe 18 bit. Die keuze is bepaald door de structuur van het bordje zelf. De ontwer-pers gebruikten de DSP-blokjes op de chip. Deze hanteren woordbreedtes die eenveelvoud zijn van 9 bit. De ingangen van de DSP-blokken hebben alle breedte 9bit (18 bit voor twee DSP’s in parallel), de uitgangen hebben breedte 18 bit (36 bit

15Het gebruik van de mathematische functie kunnen we, in signaal-termen, bestempelen als hetterugvallen op een signaal met oneindige bandbreedte. Het beperken van de bandbreedte gebeurtpas door het bemonsteren zelf; hoe goed dit bemonsteren gebeurt hangt af van de kwaliteit encomplexiteit van het bemonsteringsalgoritme.

21

voor twee in parallel). De breedte verdubbelt dus na vermenigvuldiging.Als men de filters bekijkt, dan wordt daar gewerkt met registers van 36 bit, dus ookhier is de registerbreedte verdubbeld. Door de keuze van de filterstructuur zou dekans op gelimiteerde cycli moeten verkleind zijn, of althans zou hun aandeel moetenbeperkt zijn. Dit is de gunstige eigenschap van de gebruikte implementatie: eentraliestructuur met truncatie, zoals vermeld in [6].

Vaste versus Vlottende Komma

Normaal gezien wordt een DSP ontworpen om bewerkingen in vaste komma uit tevoeren van 16-, 24- of zelfs 32-bit. Nochtans zijn een aantal DSP’s ook in staatom te rekenen in vlottende komma. De precisie van beide soorten processoren ishetzelfde, maar het grote voordeel is het dynamisch bereik. Door die representatiekan een 16-bit processor het beperkte bereik van een 16-bit vaste kommaprocessor[-32768, 32767] weglachen met een aanzienlijk groter bereik. Bekijken we e.g. in hetgeval van 1 tekenbit, 11 bits mantisse en 4 bits exponent, dan hebben we

−(211 − 1)24= −9.5 · 1052 tot 9.5 · 1052

Het grote bereik maakt vlottende komma aantrekkelijk voor audio- toepassingen,om diverse redenen.

• Het absolute bereik is groter.

• Het dynamisch bereik is veel groter: telkens de amplitude van een signaal invaste komma halveert, vermindert het aantal van nul verschillende bits in demantisse met 1. Om die reden zakt de SNR aanzienlijk, en geven toepassingenmet heel laag volumeniveau16 ronduit zwakke resultaten. Vlottende kommaheeft hier hoegenaamd geen problemen mee: hoezeer het volume ook afneemt,de resolutie van de representatie blijft gelijk.

• De kans op saturatie, ten gevolge van overflow, is virtueel onmogelijk. Demogelijkheid van overflow bemoeilijkt in het algemeen alle structuren waarterugvoeding gewenst is. In concreto refereren we aan de implementatie vande filter, die in vaste komma een lastige bevalling is.

Waarom dan nog opteren voor vaste komma? De redenen zijn als volgt.

• Vlottende komma-bewerkingen vragen gespecialiseerde hardware. Deze wasniet als core17 beschikbaar aan de ontwerpers, en het zelf implementeren vandeze bewerkingen is ronduit een aparte thesisopdracht waard.

16wat in muziekpartituren als pianissimo betiteld wordt17Met core doelt men op stukken code, vervaardigd door derden, die een bepaalde ingangs-

uitgangsrelatie realiseren. Sommige zijn kant en klaar in hardware implementeerbaar, anderevergen nog aanpassingen.

22

• Vlottende komma is duur – de gespecialiseerde hardware slorpt een stuk vande beschikbare ruimte op de chip op, en laat minder ruimte voor de modulesvan het ontwerp.

Wavetable

In de wereld van synthesizers en samplers is de geheugengrootte van zeer grootbelang. Meer geheugen betekent meer ruimte en dus zowel grotere precisie in wo-ordbreedte en ook langere geluiden. Natuurlijk kan de lengte van geluiden oneindiglang worden als er een lusstructuur wordt voorzien en zo voortdurend een stukjewordt herhaald. Desalniettemin is de lengte van de wavetable bepalend voor dezuiverheid van de geluidsweergave.

Om de gedachten te vestigen, citeren we enkele cijfers18. Wanneer men eenwavetable laat horen van 256 waarden, dan haalt die maximaal een SNR van 43 dB.Als men die lengte verviervoudigt en de geheugentoegang vier maal sneller maakt,dan bekomt men een geluid van dezelfde lengte, maar wel met een SNR van om enbij de 55 dB. Ook dat resultaat is nog niet om naar huis te schrijven, dus is menmeer en meer interpolerende oscillatoren gaan gebruiken. Waar vroeger de waardewerd benaderd door de dichtsbijzijnde waarde opgeslagen in het geheugen, wordennu veelal de tussenliggende waarden berekend via een interpolatie (gaande van line-air tot hogere orde). Daar wordt b.v. met een wavetable die 1024 waarden bevatwaarop lineaire interpolatie wordt toegepast, een uitstekende 109 dB SNR waardegehaald.

Aangezien geheugen geen probleem was, is een sinusoscillator geımplementeerddie gebruik maakt van een wavetable met 4096 18bit waarden opgeslagen. Bovendienis er ook lineaire interpolatie toegepast zodat de SNR geen zorg is. De andereoscillatoren (blokgolf, zaagtand, driehoek en ruis) hebben geen wavetable nodig.De signaal-ruisverhouding van de oscillatoren is belangrijk omdat door de daaropvolgende bewerkingen (volume-omhulling, filtering,...) de SNR enkel negatief zullenbenvloeden.

Frequentieresolutie en Afstemmen

Ook de voorstelling van de frequentie zelf is belangrijk. Met frequentieresolutiewordt bedoeld hoe fijn frequenties kunnen worden voorgesteld over het ganse au-diobereik.

18Deze zijn afkomstig uit het werk van Curtis Roads, [5], dat verbluft door zijn volledigheid endiepgang. Zeker dit laatste is een grote verdienste binnen zijn genre, ‘overzichtswerk”.

23

Vooreerst bekijken we de probleemstelling. Het audiobereik bestrijkt het frequen-tiegebied 20 Hz – 20 kHz. Uit hoortests blijkt dat een mens een goede frequentie-waarneming heeft in de lage- en middenregisters. Voor hoge frequenties daalt denauwkeurigheid van de waarneming.De muziekwaarneming zelf werkt met verhoudingen: tussen twee frequenties wordtniet het absolute verschil in Hertz waargenomen, maar integendeel de verhouding.Een halve toon omhoog gaan wordt fysisch vertaald in het creeren van een fre-quentieverhouding; dit betekent een vermenigvuldiging met een factor, eigen aande gekozen stemming. Voor gelijkzwevende stemming is die factor, per halve toon,steeds de twaalfdemachtswortel van twee. Een halve toon omhoog gaan betekentvoor een toon van 100 Hz een increment met 5.95 Hz; voor 1000 Hz is dit 59.5 Hz.

Figuur 2.14: Frequentierepresentaties

De eenvoudigste aanpak is een lineaire frequentievoorstelling: een omrekenings-

24

factor vertaalt de binair voorgestelde waarden rechtstreeks in de fysische frequentie.Deze voorstelling is toegepast in de Fynth, en wordt geıllustreerd in Figuur 2.14.Ze heeft evenwel een aanzienlijk nadeel: een overgang van toonhoogte (e.g. eenhalve toon omhoog) wordt in absoluut frequentieverschil, in Hertz, met constantenauwkeurigheid gerepresenteerd. Dit is incompatibel met de waarneming, die, vooreen representatie met een te laag gekozen aantal bit, de lage tonen als vals zal er-varen, en de hoge als juist gestemd. Daarom wordt het aantal bit in deze voorstellingvolledig afgestemd op de vraag voor de laagste tonen: vanaf hoeveel bit klinken zejuist?

De best aan het oor aangepaste representatie is de logaritmische voorstelling;zij is afgebeeld in Figuur 2.14. Een tussenoplossing, geschikt voor vaste kommatoepassingen, is een afzonderlijke codering van het octaaf, in e.g. 4 bit, en een line-aire voorstelling binnen dit octaaf. Deze oplossing beperkt de woordbreedte. Deontwerpers hielden zich bij de lineaire voorstelling, om de rekentechnische proble-men van deze voorstelling te vermijden.De Fynth heeft een woordbreedte van 18 bit. Dit volstaat om, bij normaal indrukkenvan de toetsen, goed gestemd te klinken19. Om speciale effecten te hanteren alseen vlotte glissando is de minimum woordbreedte van 21 bit evenwel aangewezen.Tegenwoordig is een frequentieresolutie van 1 mHz courant. Vertaald naar MIDItoonhoogte zou dit een resolutie tot op 1 cent20 eisen. De Fynth heeft een frequen-tieresolutie van 6 mHz, te laag om de effecten helder weer te geven op alle mogelijkefrequenties.

Gaan we nog dieper in op de cijfers. In het ontwerp wordt als standaard wo-ordbreedte 18 bit gehanteerd; evenzo geldt dit voor de frequentie. De Fynth fre-quentierepresentatie stelt zijn maximum (alle 18 bits op 1) gelijk aan de maximaalrepresenteerbare frequentie aan 32kHz, dit is 16kHz21.De frequentieresolutie bedraagt 0,06 Hz over gans de bandbreedte. Kijkt men echternaar de vereisten voor de effecten dan wordt het meest stringente verschil berekendtussen 2 frequenties die 1 cent van elkaar verschillen. Die vindt men in de keldervan het bereik. Als men kijkt naar de laagste noot die door het MIDI-protocol kanworden meegegeven, dan is die C-1, of een frequentie van 8,1760 Hz. De halve toondaarboven, C#-1, is 8,6620 Hz. Dat maakt een verschil van bijna een halve Hz, ofm.a.w. een cent van de laagste halve toon is 4,862 mHz, waardoor een glissando-effect maar aangenaam overkomt vanaf A2, ofte 110 Hz.

19aldus [5]201/100 van een halve toon21In feite stelt de definitie van de Fynth frequentierepresentatie het binaire geheel getal, bestaande

uit een 1, gevolgd door 18 nulletjes, gelijk aan de helft van de exacte bemonsteringsfrequentie vande Fynth, dat is de helft van net geen 32kHz.

25

2.3.2 Digitale audio en Vaste Komma

Vaste Komma en Dither

De ontwerpers hebben ervoor gekozen om de signaalverwerking in vaste komma uitte voeren. Dit is weliswaar gemakkelijker dan het uitwerken van vlottende komma,maar toch zijn er addertjes onder het gras.

Ten eerste is er de representatie. Het ontwerp heeft als standaard woordbreedte18 bits. Vertaald naar vaste komma representatie is de meest linkse bit een tekenbit(0 is positief, 1 is negatief) en de rest vertegenwoordigt de waarde. Nu, vaste kommawil zeggen dat de komma vast staat, en in het ontwerp is dat net links van de 17significante bits. Vandaar dat het bereik beperkt is van -1 (of binair “10 0000 00000000 0000”)tot 1 (“01 1111 1111 1111 1111”)22.

Dit is echter de voorstelling voor enkele precisie. Bij de filters wordt dubbeleprecisie gebruikt. Dan zijn er 36 bits ter beschikking. Deze bits komen voort uit hetproduct van twee 18 bits enkele precisie vaste komma-getallen. Daaruit volgt dat erin de dubbele precisie plaats is voor twee tekenbits en er dus 34 bits overblijven omde waarde te kunnen voorstellen (zie Figuur 2.15). Bovendien kan aan de hand vandie twee tekenbits aan overflowdetectie worden gedaan: ze moeten immers steedsgelijk zijn aan elkaar, anders treedt er overflow op.

Figuur 2.15: Enkele en dubbele precisie van vaste komma

22dus eigenlijk 0,99999237060546875

26

Aan de ene kant is die precisie gewenst, maar aan de andere kant moeten we devaak terugstappen van die grote precisie naar de standaard 18 bit. Dat gebeurt nietzonder meer. Bij elke overgang naar een geringere precisie moet immers een afrond-ingsschema gebruikt worden. Dat kan van truncatie tot afronding gaan. Maar bijom het even welk afrondingsschema wordt er nog meer kwantisatieruis toegevoegd.Dat is er natuurlijk altijd, maar het gevaar is dat die ruis zou gecorreleerd wordenmet het nuttige signaal zelf. Er wordt namelijk op een deterministische manier deoverstap gemaakt naar een lagere precisie. Vandaar dat men bewust ruis toevoegt,vooraleer het afrondingsschema wordt toegepast: dither. Bijzonderheden hieroverzijn te vinden in [7].

Figuur 2.16: Statistiek van de inkomende informatie, onder het niveau van de kwantisatie-stap q

Voor de eenvoud nemen we aan dat we een continu signaal gaan discretiseren,zoals veel gebeurt bij analoog naar digitaal omzetting. We moeten kwantiseren;hiervoor gaan we uit van een uniforme verdeling van de inkomende waarden, onderhet niveau van de kwantisatiestap q. Dit wordt afgebeeld in Figuur 2.16.

Aangezien truncatie is toegepast, betekent dat voor de kwantisatieruis een uni-forme verdeling tussen 0 en q, de resolutie van de voorstelling. In Figuur 2.17 wordtechter duidelijk dat daardoor de ideale afronding niet wordt bereikt.

Daarom voegt men ruis toe, ook met een uniforme verdeling tussen 0 en q,zodanig dat we schematisch het volgende verkrijgen (Figuur 2.18) en veel beter debissectrice benaderen.

Het komt erop neer om bij elke overgang van dubbele naar enkele precisie ruistoe te voegen, om een zo goed mogelijke afronding te verkrijgen.

Digitale filters

De Moog modulaire synthesizers hebben een overdrachtsfunctie zoals afgebeeld inFiguur 2.11. Een implementatie op algoritmisch niveau is ronduit simpel; in vaste

27

Figuur 2.17: Conversie van een analoog signaal naar een 4 bits vaste komma digitaalsignaal

Figuur 2.18: Dezelfde conversie maar door de ruis zijn de overgangen niet te voorspellen

komma is evenwel voorzichtigheid geboden.

De voorstelling laat toe van getallen voor te stellen in het interval -1 tot 1.Vandaar dat er reeel gevaar bestaat voor overflow! Er is dan ook naarstig onder-zoek gedaan om robuuste filterimplementaties te vinden, die uit zichzelf binnen hetvoorstelbaar bereik blijven.De eerste, en ook heel strenge eis, is de structurele passiviteit. Dat wil dus zeggen

28

dat uit de structuur zelf volgt dat de overdrachtsfunctie de volgende eigenschap bezit.

|H(ejω)| ≤ 1, ∀ω.

Een gevolg van deze eigenschap is dat de gevoeligheid voor een verandering van eenparameter steeds beperkt blijft. Bijvoorbeeld, wanneer men de hoogte van een door-laatband met een parameter regelt, dan zal de gevoeligheid buiten die doorlaatbandtot nul worden gereduceerd.De tweede eis is stabiliteit. Daaruit volgt dadelijk dat terugkoppellussen uit den bozezijn. Bovendien zijn bepaalde structuren veel robuuster dan andere. Er bestaat im-mers zoiets als limit cycles. Het gaat hem om het feit dat een filter uit zichzelfkan beginnen oscilleren en dus ook resoneren. Dat effect is eigenlijk niet-lineair endaardoor enkel te voorkomen door de keuze van de structuur, samen met het afrond-ingsschema. Er bestaan twee robuuste implementaties: lattice- en ladder -filters, zieFiguur2.19.

Figuur 2.19: De ladder- en de tralie-implementatie van digitale filters

Er is gekozen voor een lattice-implementatie, samen met afkapping, zodat deaanwezige limit cycles beperkt blijven [6]. De lattice-structuur is niet rechtstreeks

29

op het filter toegepast, maar eerst is het filter opgesplitst in all-pass filters. Metgemak kunnen die dan in de robuuste structuur gegoten worden.

Die eisen blijven niet zonder gevolgen. Ze zorgen ervoor dat men resonantie opeen totaal andere manier moet implementeren. Normaal gezien zorgt een terugkop-pellus voor het resonantiefenomeen. Maar het vaste komma filter mag geen terugkop-pellus bevatten, zal dus de volledig uitgeschreven overdrachtsfunctie implementeren.In het project is er vertrokken van een filterbeschrijving met terugkoppellus en vlot-tende komma. Zodoende waren de ontwerpers eerst gedwongen om het filter tenormaliseren, zodat de maximum waarde van |H(ejω)| gelijk is aan 1. Om tochresonantie te creeren, kan men dus de bijdrage van een bepaalde band behouden,en de rest dempen. Daardoor is het effect van totaal andere aard dan wat met eenvlottende komma voorstelling kan verkregen worden.

In het ontwerp is bovendien de methode van Regalia-Mitra gebruikt[6]. Het isimmers normaal gezien zo dat parameters verschillende eigenschappen van het filterbeınvloeden. Om geschikt te zijn voor een synthesizer zouden eigenlijk enkel deafsnijfrequentie en de resonantie regelbaar moeten zijn, en liefst zo onafhankelijkmogelijk. En dat is precies waar Regalia-Mitra voor staat. Vandaar dat in hetgeımplementeerde filter de afsnijfrequentie, de resonantie en ook de resonantiebandregelbaar is - die laatste gewoon omdat het model ook toelaat om deze parameterte regelen.

Gelukkig bezorgen al deze beperkingen ons ook het voordeel dat de stabiliteitwel degelijk wordt bewaard (het volstaat om na te gaan dat de coefficienten vande overdrachtsfunctie kleiner zijn dan 1, wat met vaste komma altijd gegarandeerdis). Bovendien zijn we wat minder bezorgd om limit cycles, die toch nog steedsvoorkomen, maar zouden beperkt blijven. En ten laatste vermelden we ook dat deafrondingsruis door het gebruik van een filter slechts lineair toeneemt met de graadvan de overdrachtsfunctie en zelfs onafhankelijk is van de positie van de polen.

30

Hoofdstuk 3

FPGA

“The only difference between not knowing it and knowing it,is learning it!”

The Man

3.1 Een Herprogrammeerbare Chip

Wanneer men als ontwerper een volledig custom ontwerp wil uitdenken en realiseren,dan heeft men een zee van tijd nodig. Daarom zijn heel wat oplossingen voorhan-den om het leven als designer draaglijker te maken. Een van die manieren is eenbibliotheek van componenten beschikbaar stellen, standard cells, waarmee de on-twerper dan zijn volledig theoretische design in de praktijk kan omzetten, zonder alte veel last te hebben van problemen als latch-up, waarmee hij anders wel rekeningzou moeten houden. Ofwel maakt men het hem nog gemakkelijker door hem eensiliciumontwerp voor te schuiven waarop reeds componenten aanwezig zijn. Dankomt het erop aan om enkel de juiste verbindingen aan te brengen in een volgendelaag. Eigenlijk zijn voornoemde methoden nog steeds omslachtig en vergen ze vande ontwerper een enorme kennis en ervaring.

Daarom zag al gauw een ander soort chips het leven. Daar was de filosofie: allemogelijke componenten en verbindingen zijn aanwezig, de ontwerper moet enkel deoverbodige verbindingen verwijderen. Bijvoorbeeld kan hij dat door de baantjesgewoon weg te smelten. Daaraan is nog een nadeel verbonden: eens gemist is defout niet meer te herstellen, en mag de chip de vergeethoek in. Vandaar dat menherprogrammeerbare componenten ging aanwenden. En daar is de FPGA-oplossinger een van.

Op zo’n chip zijn er een groot aantal structuren aanwezig. Hij is op hierarchis-che wijze opgebouwd uit een aantal bouwstenen. Er wordt onderscheid gemaakt

31

tussen ingang-uitgangblokjes, de configureerbare logische blokjes en de interconnec-tiestructuren die de componentjes met elkaar verbinden. Meer en meer komen daarnog gespecialiseerde blokjes bij zoals gedistribueerd geheugen op de chip zelf en zoalsbij de Stratix-chip ook nog DSP-blokjes in staat zijn om vermenigvuldigingen aaneen hoog tempo uit te voeren.

3.2 Het Aanbod

De ontwerpers kregen een StratixII c© PCI development board (Figuur 3.1) terbeschikking. Zoals de naam al laat vermoeden, huist er op dat kaartje nog veel meerdan enkel de herprogrammeerbare chip.

Figuur 3.1: Het bordje

Heel belangrijk aan dat kaartje is het feit alleen al dat het kan ingeschoven wor-den op een PCI-slot1. Daardoor kan men, mits men de chip gepast programmeert,communiceren via het PCI-protocol en daarmee is de hardware dadelijk met debuitenwereld verbonden. Naast de chip is er nog plaats voor andere componen-ten. Heel belangrijk zijn de extra geheugenmodules. Op het bord is immers eenDDR-RAM2 geheugen geplaatst van maar liefst 256 Mbyte en een flashgeheugen.Daarenboven is er plaats voorzien om twee kristalklokken te monteren: een 33 MHz

1Peripheral Component Interconnect2Double Data Rate Random Access Memory

32

en een 100 MHz klok zijn aanwezig. Daarnaast is er nog de externe JTAG-poort, eenaantal andere in/output poorten zoals de standaard ethernetpoort. Ook zijn er aan-tal LED-jes3 geplaatst, enerzijds om te tonen of de voeding van het kaartje in ordeis en anderzijds nog 8 LED-jes die door de ontwerpers kunnen aangewend wordenom signaaltjes naar buiten te brengen. Naast de LED’s zitten nog drukknoppen. Derechtse reset het ganse bordje, maar de drie overige kunnen vrij door de ontwerpersworden aangewend. Wat voor het ontwerp van de synthesizer nog belangrijk is, zijnde pinnen die gemonteerd zijn en waaraan ook signalen kunnen worden aangesloten.Daarlangs wordt immers het uiteindelijke audiosignaal naar buiten gebracht.

De omgeving van de chip laat al vermoeden dat deze component met een bepaalddoel is ontworpen. Wanneer men ook het binnenwerk (Figuur 3.2 en 3.3) van dechip bestudeert, wordt het helemaal duidelijk dat deze chip in hoofdzaak bedoeld isom aan digitale signaalverwerking te doen. In het geval van beeldverwerking, kanimmers het DDR-RAM geheugen gebruikt worden om een volledig beeld op te slaan.Dat beeld kan dan in kleinere stukken binnengeloodsd worden in het gedistribueerdegeheugen van de chip zelf. Daar kan dan de gepaste operatie worden uitgevoerd enhet resultaat opnieuw via DDR-ram en PCI-bus naar de computer zelf worden ge-sluisd.

Figuur 3.2: Schematisch overzicht van de chip

3.2.1 In & Uit

Op de chip zelf zijn aan de rand een groot aantal input/output elementen voorzienmet als doel een groot aantal standaarden te ondersteunen t.o.v. de buitenwereld.Elke standaard heeft immers een andere manier van buffering, aanpassing, en daar-voor worden die elementen aangewend.

3Light Emitting Diode

33

Figuur 3.3: Zicht op het binnenste van de chip

3.2.2 Geheugens

Geheugenruimte is belangrijk. Daarom wordt een aanzienlijke hoeveelheid ruimte,niet alleen op het bordje, maar ook in de chip, ingenomen door geheugen. Het wordtaangeboden in drie soorten. Elk heeft als structuur simple dual port : het gaat omtweepoortsgeheugens.

• Ten eerste is er het M512 geheugen, snelste van de drie. Het geheugen is 512bit groot, en kan werken aan 318MHz en 18 bits per behandelen via een of tweepoorten. Voornamelijk worden die geheugens (op ons kaartje zijn er 224 in tweekolommen aanwezig) aangewend als FIFO-buffer4 of voor DSP-toepassingenof nog om van het ene naar het andere klokdomein over te stappen.

• Het iets grotere M4K geheugen heeft plaats voor 4 kilobit. is ook voorzienen kan 36 bitwoorden per kloktik van hoogstens 291 MHz aan. Daarvan zijn

4First In - First Out. Is m.a.w. bruikbaar als schuifregister: het eerst ingeschreven datawoordwordt ook eerst uitgelezen

34

er 138 in twee kolommen geschikt en die kunnen veel algemener aangewendworden. Bijvoorbeeld kan men er processorcode in opslaan (wanneer men dechip als processor heeft geprogrammeerd) of kan men er een opzoektabel instockeren (wat bij synthesizerontwerp mooi meegenomen is (zie verder)).

• Als laatste zijn er nog twee reuzeblokken voorzien: M-RAM (MegaRAM). Diehebben een capaciteit van 576 kilobit5, en werken aan een maximum van 269MHz en een woordlengte van ten hoogste 144 bit. Zij zijn vooral belangrijkom een grote hoeveelheid data op de chip beschikbaar te hebben.

3.2.3 DSP’s

De DSP’s6 zijn voorzien als twee kolommen gespecialiseerde blokken, nuttig voor sig-naalverwerking. Op de chip zijn ook daarvoor twee kolommen vrijgehouden. Het zijndeze die het leven van de ontwerper heel wat vergemakkelijken, want ze zijn geop-timaliseerd om vermenigvuldigingen of de zo gegeerde vermenigvuldiging gevolgddoor een optelling (zoals bij FIR-filters7) aan een hoog tempo uit te voeren. Dezeversie telt zelfs 8 DSP- blokken waarvan een enkel blok ofwel 8 9 x 9 bit vermenigvul-digingen kan uitvoeren, ofwel 4 18 x 18 bit of ook een 36 x 36 bit vermenigvuldigingtot een goed einde kan brengen. Bovendien kan elke vermenigvuldiger zo gepro-grammeerd worden dat de bewerking gepijplijnd wordt uitgevoerd waardoor dezeblokjes een nooit geziene verwerkingssnelheid halen.

3.2.4 PLL’s

Een PLL is een antwoord op de vraag naar hogere kloksnelheden8. Aangezien erenkel een 33MHz of 100 MHz kristalklok aanwezig is, hoe kan men dan het geheugenaan kloksnelheden laten draaien die nog veel hoger liggen? Ook daaraan is gedacht:aan boord zijn er immers nog een ander soort blokjes, geoptimaliseerd voor klok-toepassingen. Ze laten toe om uit een ingang van 33 MHz een uitgaande klokaan een veelvoud ervan te laten draaien. De chip kan zelfs tot 6 PLL’s bevatten.Dat betekent dat op de component de ruimte kan worden ingedeeld in een aantalklokdomeinen. Specifiek is men daarmee in staat om het geheugen aan een anderekloksnelheid te laten werken dan de rest van het ontwerp.

5in het geval van configuratie met 18 bit per geheugenadres6 Digital Signal Processor, een gepecialiseerde programmeerbare rekeneenheid in staat om aan

een hoog tempo mathematische berekeningen uit te voeren.7Finite Impulse Response Filter: dit soort filters zijn enkel afhankelijk van voorbije inputs en

hun antwoord op een impuls resulteert daardoor eindig in de tijd8Phase Locked Loop, ofte een fase vergrendelde kring

35

De werking van een PLL vertrekt vanuit een zeer stabiele bron. De kristaloscilla-toren zijn daarvoor uitermate geschikt, zie Figuur 3.4. Het uitgangssignaal geldt alscontrolesignaal. Het uitgangssignaal aan de hogere frequentie wordt immers geleverddoor een spanningsgecontroleerde oscillator(VCO). Die frequentie wordt gedeeld endaarna vergeleken met het signaal van de kristalklok. Als die fase niet nul is, danwordt een andere spanning aan de VCO aangelegd die daardoor in de juiste zin zijnuitgangsfrequentie corrigeert. Om de terugkoppeling stabiel te houden, wordt nade fasevergelijking nog een laagdoorlaatfilter toegepast. Zo wordt de kring enkelgevoelig aan de trend die zich lang genoeg manifesteert.

Figuur 3.4: Een pll schematisch weergegeven

3.2.5 LAB’s

De rest van de ruimte wordt opgevuld met de belangrijke LAB-elementen9. Diebestaan elk uit 10 LE’s10, de logische elementen en kleinste blokjes aanwezig op dechip. En elk logisch element is de basisbouwsteen (Figuur 3.5) van een ontwerp.Zo’n blokje is in staat om op 4 variabelen elke mogelijke logische functie toe tepassen. Intern is daarvoor een LUT-blokje aanwezig. Bovendien kan een logischelementje gebruikt worden als een schakel in een optelling/aftrekking en kan het dusook een carry bit verwerken. Daarna is er een register aanwezig dat het resultaatkan bufferen en zelfs in staat is om het resultaat terug te koppelen naar de ingangvan het logische element. Die blokjes stellen de ontwerpers dus in staat om om heteven welke boolese functie te implementeren (door de LUT voorzien in elk logischelement), om optellingen en aftrekkingen uit te voeren. Niet alleen van 4 bit bredevariabelen maar door het groot aantal voorziene controlesignalen kunnen een aantalLE’s zo geprogrammeerd worden om gangbare groottes als 16 of 18 bits te verwerken.

Wat meer en meer belangrijk wordt, is het aantal voorziene interconnecties. Hetzou mooi zijn om alle controlesignalen en ingangen te voorzien, maar de verbin-dingsbaantjes te verwaarlozen. Zeker wanneer men aan hoge kloksnelheden werkt,b.v. aan 200 MHz, zijn die componenten van cruciaal belang. Er is dan ook speciaal

9Logic Array Block10Logic Elements

36

Figuur 3.5: Een zicht op de architectuur van een logic element

aandacht besteed aan de interconnecties tussen de LAB-blokjes onderling. Een LABmoet immers kunnen verbonden worden met zijn buren, maar het kan gebeuren datde uitgang van een geımplementeerde functie verwacht aan de andere kant van dechip. Daarom zijn er zowel directe verbindingen voorzien met de aanliggende blokjesals baantjes van verschillende breedte om blokjes op dezelfde rij en dezelfde kolom tekunnen verbinden. Die laatste zijn zelfs zodanig dat er 3 verschillende zijn voor elkerij en kolom waartussen gekozen wordt om aan de vereiste snelheid en de vereisteafstand te voldoen.

3.3 Samenspel

Als men even abstractie maakt van de chiparchitectuur, is de grote vraag: “Hoewordt zo’n chip dan geprogrammeerd?” Daarvoor is een hele reeks programma’snodig, die elk een schakel zijn in de toolchain...

Nadat de ontwerper uitgedacht heeft wat hij zal realiseren en hoe, krijgt zijnontwerp een eerste reele vorm in een programmeeromgeving. Daarmee wordt geen

37

software-programmeertaal als C++ bedoeld, maar veeleer een hardware-taal. Demeest gangbare is VHDL11. Wanneer de code in die omgeving succesvol is gecom-pileerd, is het tijd voor de eerste test. De ontwerper kan dan middels een test-bank nagaan of de geprogrammeerde processen inderdaad de vooropgestelde functievervullen.

Toolchain

Na die verificatie kan het echte werk beginnen. Het ontwerp moet daarna immersingepast worden in de door de chipboer voorziene software om de functie uiteindelijkin de chip te doen belanden. Voor Stratix is dat de Quartus II c©-omgeving. Datpakket bevat de nodige componenten om over te gaan van een voor de ontwerperleesbare VHDL-code naar een voor de chip leesbaar bestand.

Dat die hele vertaling toolchain (letterlijk vertaald “werktuigreeks”) heet, heeftzo zijn redenen. Nadat het ontwerp in een overkoepelend VHDL-bestand is ingepast,worden verschillende stappen doorlopen. Vooreerst start de Analysis & Synthe-sis. Er wordt van de code overgestapt naar een databank, waarin alle bestandenhierarchisch worden ingepast. Daarna wordt er een logische synthese uitgevoerd, diede gebruikte logica minimaliseert en afbeeldt op de aanwezige elementen van de chip,zoals de logic elements. Dan is het de beurt aan de Fitter. Die toepassing vertrektvan de informatie die door de Analysis & Synthesis is verschaft. Het bekijkt delogic elements en beeldt ze af op de fysische structuren aanwezig in het kaartje. Datbetekent dat de Fitter het ontwerp voor een specifieke chip optimaliseert. Na dieoperatie bepaalt de Fitter ook de fysische interconnecties tussen zowel de gebruiktepinnen als logic elements. Die routing is belangrijk om de timing requirements tehalen en het spreekt voor zich dat de Fitter meer tijd nodig heeft dan de Analy-sis & Synthesis-tool. Als het ontwerp op het kaartje kan worden ingepast, mag deAssembler zijn gang gaan. Die neemt de verantwoordelijkheid om het bestand temaken waarmee de chip effectief zal geprogrammeerd worden. Aangezien de beschik-bare chip gebaseerd is op een SRAM proces, komt het erop neer dat het statischegeheugen geprogrammeerd wordt en daarmee verteld wordt aan de chip welke func-tie elk logic element uitvoert en met welke andere structuren de uitgang verbondenwordt. SRAM is hiervoor een uitstekende keuze, want het geheugen moet niet wor-den opgefrist en bovendien laat het toch toe dat de chip voor om het even welketoepassing kan worden hergeprogrammeerd. Met de informatie van de Fitter kan deTiming Analyser aan het werk. Dan wordt immers nagegaan of de ontwerpers zichgehouden hebben aan al de tijdsvereisten. Daarbij denken we vooral aan de setup-

11Very high speed integrated circuits Hardware Description Language. Een nieuwer alternatief,dat integratie voorziet met C, is SystemC. Deze laatste maakt zijn opmars, maar vertoont capriolenop het moment dat het ontwerp, hoe dan ook, moet omgezet worden naar VHDL

38

en holdtijden die moeten gerespecteerd worden bij het gebruik van registers. Daaruitvloeit dan een rapport dat alle timing-info bevat. Teneinde dit te illustreren, werdin appendix het rapport opgenomen, hiervoor refereren we aan Appendix C.

JTAG

Maar met een bestand op de harde schijf van de computer waarop Quartus II c©

een plaatsje heeft gevonden, is de chip nog steeds niet geprogrammeerd. Daarvoorwordt de in Quartus II c© ingebouwde Programmer gebruikt. Die maakt gebruik vaneen speciaal kabeltje dat via de parallelle poort van de computer verbinding maaktmet het kaartje. Langs dat kaartje wordt de FPGA-chip aangesproken via een spe-ciaal protocol: JTAG12. Oorspronkelijk is deze oplossing ontstaan om geıntegreerdecircuits te kunnen testen. Vroeger bestonden daarvoor speciale chips die een grootaantal pinnen naarbuiten brachten. Daar konden de ontwerpers dan een testsignaalaanhangen en aan een andere pin nagaan of de juiste uitgang werd bekomen of niet.Naarmate de miniaturisatie zich meer en meer doorzette, werd het onmogelijk omnog zo’n chips te maken die veel meer elementen bevatten en tegelijkertijd voldoendetestpinnen hadden.

Met de tijd is de idee ontstaan om een andere manier van testen toe te passen:de Boundary Scan. Men zorgt ervoor dat in de chip een aantal “virtuele” test-pinnen worden voorzien, die met aangepaste circuiterie met de rand van de chip,genaamd boundary scan cells, verbonden worden. Hieraan zijn veel voordelen ver-bonden: aangezien chips onderling ook kunnen verbonden worden, kan met eenexterne poort het ganse bord getest worden, met een geoptimaliseerd aantal pinnenen baantjes en bovendien kan de test in hoge mate automatisch worden uitgevoerd.Na een fabriekstest kan de chipfabrikant steunend op JTAG beweren een werkendproduct op de markt te brengen. Bovendien biedt het protocol nog veel meer mo-gelijkheden, want men is erin geslaagd om de chip met een en hetzelfde protocol ookte programmeren. Dan stuurt men geen testinformatie naar de boundary scan cells,gewoon configuratie-informatie waarmee de SRAM kan geprogrammeerd worden.

JTAG boundary chain biedt nog een andere mogelijkheid: na het programmerenkan je er testinfo mee naar buiten te brengen. Daarbij kan men gebruik maken vaneen andere krachtige toepassing in het Quartus II c©-pakket: de SignalTap II LogicAnalyser. Wanneer men de Logic Analyser wil gebruiken, moet men wel voorafbepalen welke signalen men naar buiten wil brengen. Daarvoor is wel wat ruimtenodig op de chip, naast het te testen ontwerp. Want de signaalwaardes worden eerstgebufferd in het gedistribueerd geheugen en daarna via JTAG binnen de Quartus

12Joint Test Action Group

39

II c©-software geloodst. Die zorgt voor een duidelijke weergave onder de vorm vantijdsdiagrammen en is een hele hulp om het ontwerp te testen, e.g. op communicatie.

Zoet

Zoals men aanvoelt, is men al een tijdje zoet om al deze toepassingen te lerengebruiken. Toch is deze software een onmisbaar element is bij digitaal ontwerp. Zovertelt de Fitter al of het ontwerp op het kaartje past, de Timing Analyser of ookalle vereisten qua tijd zijn gerespecteerd en SignalTap II Logic Analyser kan tijdensde werking van de chip een grote hulp zijn en duidelijk maken aan de ontwerpersof een bepaald signaal wel degelijk het juiste gedrag vertoont. De toolchain is eenonmisbaar instrument om een ontwerp tot een goed einde te brengen.

40

Hoofdstuk 4

De Fynth

“Truth in our ideas means their power to work.”William James

In dit hoofdstuk brengen de ontwerpers hun geesteskind naar voor: de Fynth.Voortbouwend op hoofdstuk 2 en 3 wil dit hoofdstuk tonen hoe de daar aangehaaldeelementen tot een synth gekneed werden – een proces dat in stappen verloopt. Voorde totstandkoming waren de ontwerpers genoopt tot letterlijk honderden ontwerps-keuzes. Deze grootte-orde hoeft de lezer niet te verbazen, daar het om een merk-waardige combinatie gaat: de implementatie van een modulaire synthesizer – hetmeest flexibele type; en een zo divers benutbaar hardware-platform als een FPGA.Het doorslaggevend argument in beslissingen bleek in vele gevallen de algemeenheid(en daarmee verbonden uitbreidbaarheid) te zijn, in enkele was het de controleer-baarheid.

4.1 Verdeel en Heers

“The difficulty is the choice.”Matrix Revolutions

4.1.1 Een Instrument

De Muziek

Maak kennis met de Fynth. De Fynth is een modulaire synthesizer met 2 au-diokanalen, een bemonsteringsfrequentie van 32kHz, en een polyfonie van acht noten.

41

Figuur 4.1: Een eenvoudig schema van de Fynth

Figuur 4.1 geeft een schematische weergave van de hardware. We herkennen verschil-lende blokken, modules genaamd. Sommige blokken herkennen we uit het betoogvan de modulaire synthesizers, andere zijn nieuw.De blokken, vertaalbaar naar de wereld van de analoge modulaire synths, noemenwe muziek-modules. De modules die integendeel ontstaan zijn om redenen van hard-ware-ontwerp, noemen we controlemodules.Een opsomming:

• muziek-modules

– De Oscillatoren, geluidsbronnen:

∗ square, of blokgolf

∗ sawtooth, of zaagtand

∗ triangle, of driehoek

∗ sine, of sinus

∗ noise, of ruis

– De geluidsverwerkers:

∗ ADSR

∗ filter

∗ delay line, of vertragingslijn

∗ middleman, of de sommator

42

∗ mixer

• controlemodules

– sencoder

– chronos

– deltasigma

De muziek-module middleman heeft een heel eenvoudige werking: het maakt desom van twee inkomende signalen, en stuurt die naar de uitgang. De muziekmodulevertragingslijn realiseert een stereo-effect, door verschillen te creeren tussen linker-en rechterkanaal, zowel in volume als in ogenblik van aanvatten (vertraging). Deandere muziek-modules zijn reeds vermeld in Hoofdstuk 2.Vermelden we toch dat er historisch nog een andere module in het spel was: custom.Custom speelt een willekeurige, door de gebruiker gedefinieerde golfvorm af. Dezemodule is niet geımplementeerd in de huidige versie van de Fynth. Niettemin wordtde module ook vernoemd in dit document, daar zij reeds een plaats verworven heeftin de organisatie van de bus.De controlemodule sencoder heeft een complexe taak: zij is het die de polyfoniemogelijk maakt. Zij maakt abstractie van de acht verschillende noten, en houdt bijwelke noot aan of af staat. Ook treedt zij op als bemiddelaar tussen de input en demuziek-modules.De controlemodule chronos is een heel eenvoudige module. Zij beheert de parallellebus, en neemt er de tijdsplanning, de time scheduling voor haar rekening.De controlemodule deltasigma doet, net als de muziek-modules, aan signaalverwer-king. Toch wordt zij niet als muziek-module betiteld, omdat zij niet op de parallellebus huist. Zij is enkel verantwoordelijk voor post-processing van de audio. Zij zeteen klassiek digitaal stereo audio-signaal, bemonsterd aan 32kHz, om in een delta-sigma-gemoduleerd signaal, dat uit de chip naar buiten gebracht wordt.

De Hardware

Keren we terug naar Figuur 4.1 en belichten we nu het hardware-aspect van de Fynth.De blokjes stellen modules voor, de lijnen stellen de seriele bus (een elektrische lijn)en de parallele bus (dertig elektrische lijnen) voor; het geheel vormt de Fynth en isals dusdanig volledig aanwezig in de FPGA-chip. De afgebeelde input bestaat uit32 bit brede boodschappen, binnenkomend vanuit de PCI bus. De output is hetmuzieksignaal, dat langs metalen contactpinnen het Stratix kaartje verlaat.

4.1.2 Een Multiprocessor

Om aan te vatten met de uitleg over het ontwerp, beginnen we met de inhoudvan de FPGA chip. De Fynth is in se een hardware-circuit, volledig en exclusief

43

aanwezig in de FPGA. Alle modules, met hun verbindingen en hun geheugen, zijnaanwezig in de herprogrammeerbare chip. Alle omringende apparatuur, zoals derest van het Stratix kaartje, de PC waarin het kaartje huist, het MIDI keyboard,de geluidsversterking,... kunnen we conceptueel zien als randapparatuur. Zij staande gebruiker toe de synthesizer te bespelen en te controleren, met de chip te com-municeren, en het geproduceerde resultaat te beluisteren. Ze zorgen ook voor detoelevering van bepaalde noodzakelijke inputs aan de chip: elektrische voeding, enmeerdere hoge-precisie kloksignalen.Het hart van de opstelling blijft evenwel de FPGA-chip, de Fynth, die een welomlijn-de taak heeft: binnenkomende digitale boodschappen omzetten in analoge muziek.Het is in letterlijke zin zo dat de digitale, 32 bit brede boodschappen binnenstromenlangs 32 pinnetjes van de chip, en de muziek van linker-, resp. rechterkanaal langstwee andere pinnetjes. Over de output moet nog gezegd dat het audiosignaal delta-sigma-gemoduleerd is. Dit betekent dat het reeds een analoog signaal is, maar nogdoor een laagdoorlaatfilter moet, om een echt “klassiek muzieksignaal” te worden,en naar een gewone muziekversterker te mogen gestuurd worden.

Indien we de Fynth formeel benaderen als een digitaal systeem, dan zien we datde ontwerpsfilosofie het meest verwantschap vertoont met die van een message-passing multiprocessor. Een multiprocessor is een processor die gelijktijdig meerdereinstructies uitvoert op meerdere data1. In het geval van de Fynth hebben we temaken met verschillende processoren (de modules), die elk over een eigen geheugenbeschikken, en werken met message passing, het doorgeven van boodschappen. Eenalgemene regel voor multiprocessors is de volgende.

Voor een multiprocessor met N processoren (modules), is de snelheids-winst, door het verhogen van het aantal modules van 1 naar N, steedskleiner is dan die in het geval van een enkele module, die werkt aan eenN keer snellere klok.

Deze regel blijft onbeperkt geldig in het geval van de Fynth, evenwel mag vermelddat het bewaren van het modulaire concept zonder twijfel voorrang geniet op desnelheid van de muzieksynthese, daar de effecten van snelheidsverlaging verwaar-loosbaar zijn2.Verder is de Fynth als multiprocessor message-passing : de boodschappen kunnen weformeel betitelen als “data in verwerking”, die hun weg afleggen van module naarmodule. Alle modules, op de sencoder na, zijn verbonden met een parallelle bus,

1Voor definitie en korte uitleg over multiprocessoren refereren we aan [4]2Als vuistregel mag gesteld dat een vertraging onder 100 µs in de hardware volstrekt on-

waarneembaar is. Onze interne vertragingen zijn van die grootte-orde. Men notere dat het gebruikvan het MIDI protocol, met zijn relatief lage datadebiet van 31.25 kbit/s, voor vertragingen vande grootte-orde ms zorgt.

44

waarover de boodschappen doorgegeven worden. De sencoder, de seriele encoder,treedt op als controller, die de interpretatie van de ingang regelt, en taken doorgeeftaan de modules via de seriele bus.

De keuze voor de multiprocessor-filosofie was een eenvoudige. Als we terugdenkenaan het concept van modulaire synthesizers, dan wordt het duidelijk dat de gewenstescheiding van oscillatoren, filters, ADSR... slechts volledig is als ze effectief tot inde hardware doorgevoerd wordt. Deze werkwijze maakt het mogelijk dat processenonafhankelijk en gelijktijdig draaien, basiseigenschappen van een multiprocessor.Dit biedt niet alleen comfort tijdens het ontwerp voor het detecteren van fouten, ditbiedt bovendien het onschatbare voordeel dat geısoleerde modules in hardware func-tioneren, zonder dat de andere noodzakelijkerwijs aanwezig zijn. Dit betekent datwe in het schema, behalve de obligate controller sencoder, er bijvoorbeeld kunnenvoor opteren alleen de square en de mixer in de hardware te implementeren. Hethoeft niet te verwonderen dat de ontwerpers hun testen zonder uitzondering richttenop een module per keer, en veel baat ondervonden bij die modulaire aanpak. Verderdient nog opgemerkt dat de voordelen van uitbreidbaarheid legio zijn: moeiteloos3

staat het model ons toe om een module weg te laten, te vervangen of bij te voegen4.De keuze voor een message-passing multiprocessor was verre van triviaal. Het al-ternatief, modules die parallel opereren op een gedeeld geheugen, leek eerst eenhaalbaar alternatief. Een instructiegeheugen zou dan beurtelings uitgelezen wordendoor elke module, die in het geheugen te verwerken data en de geschikte parametersaantreft, en na uitvoering aangepaste parameters en verwerkte data achterlaat. Vandit alternatief durven we beweren dat het haalbaar is, en, ter afweging ten opzichtevan het door ons gekozen message-passing alternatief, volgen hier enkele voordelen:

• De initialisatie van de hardware is eenvoudiger, want er is slechts een geheugen.

• Studie van het gedrag is in eerste benadering beperkt tot studie van de inhoudvan dit ene geheugen, daar het er een onmiddellijke weerspiegeling van is (ofbehoort te zijn).

• Betrouwbaarheid hangt niet af van de zwakste schakel in de ketting. In hetgeval van de Fynth is het zo dat het volstaat dat een module niet functioneert(en zijn boodschap niet doorgeeft aan de volgende module) opdat gans hetsysteem ineenstort, en de synthesizer stom blijft. Bij gedeeld geheugen zoueen in het geheel niet functionerende module de synthesizer niet platleggen:integendeel zou alleen het effect van de niet functionerende module afwezigblijven in het uiteindelijke geluid.

3Tenminste wat betreft het uitdenken van het concept betreft, want de moeilijkheid wordteigenlijk bepaald door de minder voorspelbare, strenge hardware. Ook hier geldt het devies: 10%inspiratie, 90% transpiratie; hoe eenvoudig het concept ook, de hardware-implementatie is moeilijk.

4Zo ging het met de module Middleman, uitgedacht en gecreeerd in de laatste weken van hetontwerp.

45

Toch zijn er ook nadelen aan gedeeld geheugen:

• Toegang van alle modules tot een geheugen vergt, behalve een goede tijds-planning (ook nodig voor message-passing) ook aangepaste, extra logica voortoegang tot het geheugen.

• Een ongeluk komt nooit alleen. Bij gedeeld geheugen kan het optreden vanslecht een enkele fout, op een enkel moment, in slechts een enkele module,resulteren in het foute klank van alle geluid die op die ene fout volgt. Ditkan bij de Fynth nooit het geval zijn. Oorzaak van dit onrobuust gedrag isjuist het terugvallen op exact een tabel, die alles determineert. Indien eenmodule in die tabel een wijziging op een verkeerde plaats of op een verkeerdemanier aanbrengt, zijn de gevolgen niet te overzien, en kunnen het gedrag vanandere modules onderuit halen. Dit laatste effect kan bij de Fynth nooit op-treden. Systeem-analytisch gesproken zijn er twee vormen van foutpropagatiedenkbaar voor shared-memory multiprocessoren. De eerste propagatie gebeurtin de data: de geluidsdata in verwerking wordt verkeerd verwerkt door de mal-functionerende module, en resulteert onvermijdelijk in een fout geproduceerdegeluidsmonster. Hieronder hebben zowel shared memory als message-passingmultiprocessoren te lijden. De tweede propagatie is in de module-werking : eenfoute handeling van een module kan het functioneren van andere modules inhet gedrang brengen. Dit is bij de Fynth niet denkbaar.

Deze nadelen waren voor de ontwerpers het argument om voor message-passing teopteren. Het uitsluiten van foutenpropagatie over de modules heen bevestigt hen inhun streven naar een modulaire filosofie.

4.1.3 In en Uit

Met de basisopzet in gedachten, kunnen we nu ingaan op de taakverdeling entiming binnen de chip.We gaan op zoek naar het antwoord op volgende hoogst basale vraag:

Hoe kan een hoop blokjes, aangesloten op een bus, muziek maken?

Vooreerst bekijken we de inkomende boodschappen van dichterbij.De ingang brengt boodschappen aan. Deze boodschappen zijn nodig om de Fynth telanceren. Ze brengen de Fynth informatie over hoe de gesynthetizeerde muziek moetklinken, en over welke noten al dan niet moeten beginnen of eindigen. De eerstevorm van boodschappen noemen we patchinformatie, de tweede nootinformatie.

• De patchinformatie is steeds gericht aan een module tegelijk.

46

• De nootinformatie is steeds gericht aan alle modules tegelijk; om die redennoemen we de boodschappen met nootinformatie ook broadcast (noot-)bood-schappen.

Als we denken aan de analoge modulaire synthesizer, dan speelt de patchinfor-matie, afkomstig van de software, een dubbelrol: het geeft de aangesproken moduleinformatie over hoe hij afgesteld is, en informatie over de verbinding die aan zijnuitgang hangt. In de analoge wereld is de eerste soort niet meer dan de instelling vande knopjes die op de module zitten: duty cycle (voor een square-module); attack,decay, sustain en release (voor een ADSR-module),... De tweede rol is een anderezaak: in de analoge wereld zijn de verbindingen elektrische kabels, die de output jackvan de ene module met de input jack van de andere module verbinden. Het digitaalanalogon is verrassend eenvoudig: elke module houdt een 8 bit breed doeladres, hettarget, bij, waarmee zij juist een andere module kan aanspreken. Een module houdtgeen bronadres bij – een module is blind ten aanzien van de herkomst van de te ver-werken boodschappen. Twee modules hebben geen doeladres: de mixer, aangezienhij obligaat met de uitgang verbonden is, en de seriele encoder, daar hij vast metde seriele lijn verbonden is.Dit verbindingsmodel is heel eenvoudig, en bovendien behoorlijk flexibel, zoalsduidelijk zal worden verderop in het betoog, wanneer de partele herconfigureer-baarheid besproken wordt.

Broadcast messages zijn boodschappen die niet naar een specifieke module gezon-den worden. Dit zijn de boodschappen die nootoperaties aanbrengen: het aanzettenvan een bepaalde noot (note on boodschap), het afzetten van een bepaalde noot(note off ), en het glijden van de frequentie van een bepaalde noot (glissando). Daarde Fynth het gelijktijdig weerklinken van 8 noten ondersteunt, wordt er in de Fynthlogica vereist, die abstractie maakt van de verschillende noten, bijhoudt welke aanof af staan, en beslist welke oude noten met nieuwe noten mogen vervangen wor-den. Deze verre van triviale taak is weggelegd voor de sencoder. Hij is het diealle inkomende nootboodschappen verwerkt, en ze bovendien vertaalt naar voor demodules verstaanbare informatie.

Leggen we nu ons oor te luisteren bij de uitgang. Zodra de Fynth geınitialiseerdis en de gebruiker de eerste noot ingedrukt heeft, klinkt de eerste muziek aan deuitgang. Deze muziek verkeert evenwel nog in een gemoduleerde vorm wanneer zede FPGA-chip verlaat. De output left en output right die weergegeven worden inFiguur 4.1 zijn nog geen audiosignalen in de zuiverste vorm: ze zijn deltasigma-gemoduleerd.Waarom is dit nodig? Wanneer de audiosignalen de mixer verlaten, is hun formaatzeer vergelijkbaar aan de signaalvoorstelling zoals we ze kennen van CD en PC: een

47

digitaal bemonsterd stereo signaal, met woordbreedte 16 bit, en bemonsteringsfre-quentie 32kHz. Toch is er nog een extra tussenstap nodig, om over te gaan naar eenanaloog signaal, dat naar een muziekversterker kan geleid worden.De meest klassieke oplossing ware een D/A converter, die het twee keer 16 bit bredesignaal als ingang krijgt, en aan de uitgang een continu audiosignaal produceert.Daar er geen D/A convertor in de chip of op het Stratix bordje voorhanden is, zijn wegediend met een andere methode. Die bestaat erin beide 16 bit brede audiosignalenelk naar een deltasigma modulator te sturen. Daar wordt het signaal geconverteerdnaar een analoog signaal, dat met een variatietempo van 33MHz afwisselend dewaarde van de maximale uitgangsspanning aanneemt, en spanning nul. Dit signaalheeft de belangrijke eigenschap dat zijn frequentie-inhoud in het Fourierdomein, be-halve de voor ons oninteressante piek op 33Mhz, ook de frequenties van ons ingaand(tot dan toe digitaal gerepresenteerd) signaal heeft. Verderop wordt de werking vande deltasigma modulator toegelicht in een apart onderdeel.Voorlopig volstaat het te weten dat we de stereo, deltasigma-gemoduleerde outputvan de chip door een analoog laagdoorlaatfilter sturen, en aan de uitgang het ge-wenste analoge signaal vinden.De laagdoorlaatfilter werd voor beide kanalen geımplementeerd met een simpel RC-filter, met een afsnijfrequentie die met een kleine marge boven de maximaal voorstel-bare frequentie5 van het audiosignaal ligt.Gewapend met deze kennis, besluiten we dat de uitgang van de laagdoorlaatfiltermag doorverbonden met een klassieke muziekversterker. Wij kozen voor de meestnabije oplossing in een computeromgeving: de geluidskaart.

4.1.4 Tussenin

Bekijken we opnieuw Figuur 4.1. Hogerop werd uitgeweid over het formaat vanin- en uitgang, en over de boodschappen die meegedeeld worden over de seriele bus.Op de figuur is duidelijk zichtbaar dat alle modules expliciet verbonden zijn metmekaar langs de parallelle bus. Uit de uiteenzetting over doeladressen, begrijpenwe hoe elke module impliciet slechts met juist een module verbonden is, door hetgebruik van deze adressen op de parallelle bus. Nu zetten we uiteen hoe de modulescommuniceren, en wat ze mekaar doorgeven over de parallelle bus.

Om precies te zijn is het aan de gebruiker om te vertellen hoe hij de modulesverbonden wil zien. Hij doet dit door een patch vast te leggen. Een patch is eengroep van verbindingen, die de modules vertellen hoe ze moeten verbonden worden.Zodra een gebruiker zijn patch samengesteld heeft, kan hij de Fynth ermee configur-eren; wanneer ook dat gebeurd is kan hij de Fynth bespelen.

5Voor 32kHz geldt als supremum de helft, 16kHz, zoals Nyquist en Shannon betoogden.

48

Figuur 4.2: Conceptuele voorstelling van een eenvoudige patch

Om meer inzicht te verwerven in dit mechanisme, bekijken we om de gedachten tevestigen een eenvoudige patch. Ze wordt geıllustreerd in Figuur 4.2. Een eenvoudigscenario is een square module, die als doeladres een ADSR heeft, die op zijn beurtals doeladres het linkerkanaal van de mixer heeft (De mixer heeft twee kanalen, enis als dusdanig een stereo-module. Meer hierover in Subsectie 4.1.7).Onderstellen we dat de patch-boodschappen alle toegekomen zijn, en de modu-les succesvol geınitialiseerd zijn. Dit betekent o.a. dat alle modules die we nodighebben, als doeladres het juiste doeladres meekregen: de square kreeg het doeladresvan de ADSR (0x8)6, de ADSR het doeladres van de mixer (0xD), en de mixer geen.(Een exhaustieve opsomming van de verschillende commando’s volgt verderop.) Alleniet gebruikte modules, die aanwezig zijn in de hardware, luisteren op elk momentmee naar nootboodschappen. Ze draaien dus op elk moment even actief als de mo-dules die wel gebruikt worden; het verschil is dat ze hun doeladres op nul hebbenstaan7. Alle modules die capabel zijn om te reageren op nootboodschappen, doenhet, en produceren het nootgeluid aan hun uitgang, zelf indien de gebruiker nietgeınteresseerd is in hun werking. De gebruiker heeft evenwel de vrijheid om de doel-adressen van de modules te wijzigen: het volstaat om alle niet betrokken moduleshet doeladres (0x0) mee te geven, opdat hun geluid nooit doorgang zou vinden naarde uitgang. Het doeladres (0x0) noemen we het drain address, het adres waarheenalle overtollige boodschappen wegvloeien8. Na een harde reset (het drukken op de“user reset” knop op het Stratix kaartje) staan alle doeladressen op nul, evenals alleinstelwaarden.Keren we nu terug naar het voorbeeld, en beelden we ons in dat de gebruiker eennoot indrukt. Twee modules zullen hierop een reactie vertonen: de square, en deADSR. De square reageert door het produceren van de passende eerste 18 bit bredegeluidsmonster van een oscillatie met de frequentie van de noot. De ADSR reageertdoor klaar te staan in de attack fase (eerste fase van de vier-fasen ADSR envelope).

6Het prefix 0x duidt op hexadecimale notatie, zo is 0xD het decimaal getal 13.7Dit was een ontwerpsbeslissing met veel voeten in de aarde. De oplossing waarin alle modules

draaien op elk moment (en dus niet geactiveerd worden op een bepaald moment) is volgens de ont-werpers de elegantste, met het oog op partiele herconfigureerbaarheid, een concept waar verderopeen ganse paragraaf aan gewijd wordt.

8In feite is het enige dat gebeurt is dat deze drain boodschappen wel op de parallelle bus komen,maar dat geen enkele module er naar luistert.

49

Zodra de square gereed is en permissie heeft, schrijft hij een boodschap op de paral-lelle bus. Deze boodschap bevat de 18 bit brede sound-sample, of het geluidsmonster.Ernaast bevat de boodschap ook het doeladres, zodat de ADSR weet dat de bood-schap voor hem bestemd is, en als enige module het geluidsmonster binnenneemt.Zodra ook de ADSR gereed is, vertrekt het herbewerkte geluidsmonster naar demixer. Dit gebeurt opnieuw door een boodschap op de parallelle bus te zetten, ditkeer met als doeladres de linker-mixer.De mixer neemt het geluidsmonster binnen, en telt hem bij bij de huidige accumu-latorwaarde. In het geval van ons voorbeeld is die nul, omdat geen andere bronnenvan geluid in het spel zijn.Met het traject van de geluidsmonsters geschetst, zijn we klaar om de rol van deklokken toe te lichten.

4.1.5 Klokken

Nu gaan we in op de aanwezigheid van twee klokken. De eerste klok draait aan33MHz, en wordt in dit document systematisch betiteld als de snelle klok. De snelleklok geeft het werktempo aan van alle modules.Op systeemniveau kunnen alle modules betiteld als groeperingen van toestandsma-chines. Toestandsmachines vergen een klok, die hun werktempo, en de timing vanhun in- en uitgangen regelt. De modules in de Fynth zijn opgebouwd uit verschil-lende processen, die afzonderlijk beschouwd alle eindige toestandsmachines zijn.Meer bepaald zijn alle processen van het type Moore Machine, en werd het gebruikvan Mealy Machines vermeden9.De snelle klok is de klok voor alle toestandsmachines, en is in alle operaties be-trokken. De tweede klok speelt een geheel andere rol.De tweede klok in ons systeem wordt consequent betiteld als de trage klok. De trageklok draait aan 32kHz10. Een alternatieve benaming ware “de audioklok”, aangezienhaar frequentie gelijk is aan de bemonsteringsfrequentie van het gesynthetizeerde au-diosignaal.De trage klok speelt binnen de chip een relatief beperkte rol. Zij dicteert haar waar-den slechts aan een module, de mixer. Impliciet speelt zij echter een heel dominanterol, daar haar tempo indirect het aantal modules bepaalt, dat binnen de Fynth actiefkan zijn.Hoe stuurt de trage klok nu de bemonsteringsfrequentie? Het antwoord vergt eersteen beeld van de taak van de mixer. De mixer treedt op als eindpunt van de geluids-

9Een Moore machine is een automaat waarvan de uitgang alleen afhangt van de huidige toestand.Vanuit het oogpunt van robuustheid van gedrag, is de Moore Machine superieur aan de MealyMachine.

10Om precies te zijn draait de trage klok aan 31.990kHz, wat exact 1/1042 keer de snelle klokis. De ontwerpers opteerden voor deze oplossing. Op die manier bekomen ze een eenvoudigerdenkkader: de snelle klokcycli volgen mekaar op, zijn alle exact even lang, en exact om de 1042snelle klokcycli, begint er een trage klokcyclus.

50

monsters, als de plaats waar alle in de Fynth nuttig verwerkte data naartoe stroomt.De enige daad die de mixer stelt, is het binnennemen van de toekomende waarden,en ze optellen bij zijn huidige accumulatorwaarde.Zoals men kan vermoeden laat men deze accumulatorwaarde niet oneindig oplopen;ze wordt integendeel periodiek op nul gezet, en de aangetroffen waarde voor de resetwordt naar de uitgang gebracht. De periode van dit gebeuren is de periode van detrage klok, en het uitgaand signaal is een digitaal audiosignaal, met als bemonste-ringsfrequentie de trage klok.Refereren we terug aan het voorbeeld van Figuur 4.2, dan zien we hoe de mixerslechts een bron van inkomsten heeft: de square. Square, ADSR en mixer fungerenals toestandsmachines, en zijn gedreven door de snelle klok. Het aantal snelle klok-cycli dat nodig is om het afgebeelde pad geheel af te leggen, is echter niet geweten.Dankzij de chronos time scheduling zijn er echter twee garanties.

1. De pad-duur, of het aantal snelle klokcycli dat nodig is om het gehele pad afte leggen, is constant.

2. De modules ontvangen van buitenaf een stimulus per trage klokcyclus.

Deze twee garanties stellen de Fynth in staat om, zonder de pad-duur te kennen, decorrecte bemonsteringsfrequentie te realiseren.De eerste garantie verzekert dat er per geluidsbron (in het geval van Figuur 4.2,alleen de ene square) een constant debiet van geluidsmonsters per trage klokcyclusbinnengaat in de mixer. De tweede garantie zorgt dat dit debiet juist een is.De eerste garantie vertoont een zekere soepelheid. Er wordt immers geenszins ge-vergd dat de pad-duur onder de duur van een trage klokcyclus blijft, integendeelmag het willekeurig lang zijn. Het enige gevolg van een lange pad-duur is een kleinevertraging van de weergave11.Een varierende pad-duur daarentegen zou resulteren in een hoogst ongewenst effect,zelf indien garantie 2 nog voldaan is. Denken we aan het voorbeeld uit Figuur 4.2,dan zie we in hoe per trage-klokcyclus juist een bijdrage van de oscillator de mixerbinnensijpelt. Vermindert echter opeens de pad-duur, dan krijgen we te makenmet de mogelijkheid van ineens twee bijdragen; vermeerdert de duur opnieuw, danhebben we mogelijks ineens nul bijdragen tijdens een andere periode van de trageklok.Het belang van deze twee garanties moet gezien worden in het licht van de keuzevan de time scheduling strategy, de strategie van de tijdsplanning. Wij kozen vooreen afdoende doch stringente oplossing, chronos time scheduling, die in de volgendeparagraaf besproken wordt.

11Om precies te zijn veroorzaakt de pad-duur, per toename van 1042 snelle klokcycli, een extravertraging van 31.3µs, de bemonsteringsperiode.

51

4.1.6 Time Scheduling

Onder time scheduling verstaan we in nauwe zin de regeling van de toegangen opde parallelle bus. In brede, impliciete zin betekent het ook de regeling van debemonsteringsfrequentie.Uit Figuur 4.1 treedt nu een cruciale controlemodule naar voor: chronos. Chronosheeft uitgaande lijnen naar het merendeel van de modules, m.n. dat deel dat in staatis te spreken op de parallelle bus – het gaat hier om alle muziek-modules behalvede mixer. Chronos geeft busenables : beurtelings zet hij precies een signaal hoog, enhoudt alle andere laag, en geeft op die manier groen licht aan juist een module omte schrijven op de parallelle bus. De op die manier aangespoorde module reageerthierop, door zijn (reeds in een buffer gereed zittende) boodschap naar de parallellebus te schrijven.

Chronos regelt het busverkeer. Hij hanteert een streng “een spreekt, alle luisteren”-patroon. Hij maakt het busverkeer heel overzichtelijk, en volgt in het toekennen vanzijn buspermissies een periodiek schema. In dit schema komt elke module juist eenkeer aan bod, en de periode is dezelfde periode als die van de trage klok.Chronos hanteert een eenvoudig denkschema: elke noot krijgt een keer spreekrechtper trage klokcyclus. Hoewel het hanteren van verschillende noten pas verderopbesproken wordt, kan de lezer denken aan het voorbeeld van Figuur 4.2, en zichinbeelden dat de modules slechts een noot tegelijk kunnen weergeven. In dat gevalkrijgt elke module een busenable van chronos per trage klokcyclus.De geschetste strategie heeft een eenvoudig resultaat: elke trage klokcyclus mageen geluidsmonster een stapje, een module verder, dichter naderend naar de mixer.De patch treedt op als de verbinding tussen de verschillende stapjes van een pij-plijn, waarin het monster, a rato van een stap per trage klok, doorheen sijpelt. Hetmoment waarop hij dat mag doen blijft gelijk voor alle geluidsmonsters die hemvolgen, daar chronos dezelfde tijdsplanning periodiek herhaalt. Dit geldt bovendienvoor alle modules, daar elk van hen een busenable krijgt12.Door deze democratische regelgeving worden de garanties, aangehaald in subsec-tie 4.1.5, gerealiseerd. We mogen m.a.w. op beide oren slapen: de pad-duur isconstant, en de modules worden eens per trage klokcyclus gestimuleerd.

4.1.7 Integratie

In Figuur 4.1 gaven we de inhoud weer van de Fynth. We beeldden er elke moduleprecies een keer af, en hielden in bovenstaande de lezer in de waan dat er van

12Men notere dat alle modules een busenable krijgen, inclusief de niet door de gebruiker ge-activeerde. Parametrisering van het gedrag van chronos is zeker denkbaar, en zou bijvoorbeeldde weergave van 16 noten of meer kunnen mogelijk maken, afhankelijk van de (eenvoud van de)patchkeuze.

52

elke module slechts een implementatie in hardware aanwezig is. Bovendien werd ertotnogtoe gezwegen over hoe deze modules niet een, maar acht noten tegelijk kunnenspelen. Beide aspecten worden in dit onderdeel besproken.

Ontdubbeling

Een modulaire synthesizer moet goed klinken. Kunnen we nog tevreden zijn methet vijftal oscillatoren uit Figuur 4.1, met een ADSR vindt de gevorderde gebruikergeen muzikale bevrediging. Daarom gaan we ontdubbelen: we verhogen het aantalmodules.

Om spraakverwarring te vermijden, stellen we hier enkele duidelijke definities.

• De entiteit module is een hardwareblok. Ze heeft een geheugen, en is verbondenmet de parallelle bus door juist een verbinding. Ze herbergt in haar binnenstemeerdere implementaties. Nemen we het voorbeeld van de square, dan mogenwe zeggen dat de module square exact twee implementaties van de squareherbergt.

• De entiteit implementatie is geen hardwareblok. Ze is, samen met andere,volledig gelijkaardige collega’s, aanwezig binnenin een module. Ze is een deelverza-meling van de module, en mag gedurende een beperkt deel van de tijd gebruikmaken van de fysische toegang tot de parallelle bus. Ze fungeert volledig zelf-standig, en correspondeert met de modules die we kennen van bij de analogesynthesizers. De verschillende implementaties, aanwezig in een module, delenzo goed als alle logica en fysische kanalen; hun onderscheid zit eigenlijk alleenin bepaalde instelwaarden: elke implementatie heeft in het modulegeheugeneen volledig eigen, ongedeeld gebied.

Eerst en vooral melden we dat het betoog in dit hoofdstuk tot hier louter kwalitatiefwas, en we met het woord module totnogtoe heel slordig omsprongen. Tot hier be-doelden we met module “hetgeen correspondeert met een module van een analogemodulaire synthesizer”. Met bovenstaande definities wordt deze betekenis ronduitomgegooid : voortaan worden de modules uit de analoge synthesizerwereld imple-mentaties genaamd. De hardwareblokken, waarin de implementaties gegroepeerdzitten, heten we in het geval van de Fynthmodules ; zij kennen evenwel geen analogonin de analoge wereld13!

13De wijze van formulering verraadt al dat de ontwerpers zich bewust zijn van het onlogische vande benaming. De namen zijn historisch gegroeid, en nu de hele Fynth in die benaming geformuleerdis, ware het maar een verwarrende operatie om de namen post factum nogmaals om te draaien.

53

modulenaam aantalonder woorden implementaties

sencoder 1chronos 1square 2

sawtooth 2triangle 2

sine 2noise 2

custom 0ADSR 6filter 6

delayline 1delayline (p.o.) 5

middleman 12mixer 1

Tabel 4.1: Opsomming van de modules, en hun aantal implementaties

In Tabel 4.1 wordt het aantal implementaties van de modules weergegeven. Wemerken op hoe de sencoder en chronos uniek zijn, omwille van hun taak van con-troller.De muziek-modules kunnen we ons conceptueel voorstellen als alle 41 aangesloten opde parallelle bus. Door hun aantal moet hun adres op de parallelle bus uitgebreid:volstonden zonder ontdubbeling nog vier bits, nu hebben we nood aan een 8 bitdoeladres. De eerste vier bit duiden het soort module aan, de volgende vier duidenhet implementatienummer aan.

Integratie

Ontdubbeling is eenvoudig. We maken van een ADSR zes ADSR’s, door gewoon zesverschillende implementaties in hardware te maken, elk met een verschillend doel-adres14 – en klaar is kees.Hoewel afdoend, ware deze oplossing weinig efficient. Aangezien de verschillendeimplementaties van eenzelfde module fundamenteel hetzelfde doen, ware het beterhen in een blok te verenigen, zodat de gelijklopende processen dezelfde hardwaredelen. Dit is dan ook gedaan.Alle implementaties zijn steeds verenigd in een blok. Dit reduceert het aantalmuziekmodules uit Tabel 4.1 terug van 41 tot 10.De groepering van de implementaties gebeurt inwendig door het bijhouden van eentabel met implementatie-specifieke parameters: een groep parameters per imple-mentatie. De chronos time scheduling wordt als volgt aangepast:

14dit dankzij hun verschil in implementatienummer

54

1. De pad-duur is constant.

2. Elke implementatie ontvangt van buitenaf een stimulus per trage klokcyclus.

De eerste garantie is ongewijzigd, de tweede geldt nu per implementatie: voorchronos zijn er te bedienen implementaties, veeleer dan te bedienen modules.Hetzelfde kan gezegd voor de gebruiker: conceptueel zijn de verschillende implemen-taties geheel gescheiden, en de gebruiker kan ze in die hoedanigheid programmerenmet een patch. De hardware-optimalisatie van integratie is een onzichtbare over-winning voor de ontwerpers, niet te ontwaren voor de gebruiker.

Figuur 4.3: Hardware-voorstelling van de eenvoudige patch

Om de ontdubbeling te illustreren, hernemen we het eenvoudige voorbeeld vanFiguur 4.2, en vertalen het naar het hardware-schema van Figuur 4.3.We merken op dat de gebruiker veeleer het schema van Figuur 4.2 blijft zien, met hetverschil dat de verschillende implementaties een volgnummer krijgen. We sprekendus van “square 0”, “ADSR 0” en “mixer” – de laatste zonder nummer, daar demodule slechts een implementatie kent.Deze conceptuele benadering is geıllustreerd in Figuur 4.4. Ze is zonder twijfel dehandigste naar de gebruiker toe; om die reden blijven we ze verderop in dit documenthanteren. Elke blok in deze voorstelling heet implementatie; e.g. “square 0” is denaam van een implementatie. Alternatief kunnen we e.g. “square 0” ook betitelenals implementatie 0 van de module square.

We besluiten met de voornaamste boodschap omtrent integratie:

Implementaties zijn conceptuele blokken, voelbaar voor de gebruiker. Mo-dules zijn hardwareblokken, voelbaar voor de ontwerper.

Polyfonie

Nu we het ware aantal modules kennen, zijn we toe aan de vraag van polyfonie: hoehanteert de Fynth acht noten? Het antwoord ligt besloten in een analoge redenering

55

Figuur 4.4: conceptuele voorstelling van de eenvoudige patch

als die van de ontdubbeling.Vooreerst een kleine schets van de nootstrategie van de Fynth. Zoals vermeld in Sub-sectie 4.1.3, zorgt de sencoder voor abstractie van de nootinformatie. De sencoderhoudt de noten met een volgnummer van 0 tot 7 bij. Wanneer hij de implementatiesvraagt een noot te beginnen spelen, bedient hij zich van broadcast boodschappen,onderdeel van het seriele busprotocol. Daarin deelt hij de frequentie mee, en het bij-horende nootnummer. Implementaties spelen dus geen bepaalde frequenties, veeleerspelen ze bepaalde noten, gekenmerkt door een bepaalde frequentie.Deze abstractie resulteert in een eenvoudige eis aan elke implementatie: “wees instaat acht noten te verwerken”.De stategie om dit te bekomen loopt gelijk aan die van de ontdubbeling: i.p.v. lomp-weg acht verschillende hardware-blokken elk naar een noot te luisteren, integrerenwe alles in een implementatie.Elke implementatie houdt een tabel bij, met nootinformatie voor acht verschillendeweer te geven noten. De chronos timing strategie wordt opnieuw uitgebreid:

1. De pad-duur is constant.

2. Elke implementatie ontvangt van buitenaf acht stimuli per trage klokcyclus.

Het volstaat nu dat chronos elke implementatie acht keer van busenables voorziet,opdat het geheel zou fungeren. Ten opzichte van de situatie met een noot moetchronos het patroon dat hij volgt per trage klokperiode acht keer herhalen. Op diemanier is de polyfonie geımplementeerd.

Ter illustratie van de geschetste time scheduling, geeft Figuur 4.5 de busenablesschematisch weer. Er dient opgemerkt dat het weergegeven schema zestien keerherhaald wordt per trage klok. In de snelle klokcycli die dan nog overblijven binneneen trage klokperiode, zwijgt chronos, en gebeurt er niets op de parallelle bus. Verdermerken we nog op dat er busenables voorzien zijn voor zes oscillatormodules, dat iseen meer dan er in hardware aanwezig zijn. Reden is dat deze voorziening er reedsis voor de custom module, die, zoals betoogd wordt in Hoofdstuk 5, een welkomeuitbreiding vormt.Besluitend stellen we dat de hierarchie drielagig is geworden. De 14 modules uit

56

Figuur 4.5: Schema van de door chronos uitgedeelde busenables

Tabel 4.1 herbergen in het totaal 43 implementaties; elke implementatie kan achtverschillende noten weergeven.

4.1.8 Partiele Herconfiguratie

Ofschoon de uitleg rond de functionaliteit van de afzonderlijke blokken totnogtoeheel summier was, kreeg de patch-filosofie in bovenstaande een breed betoog. Omdie reden achten de auteurs de tijd reeds rijp voor een blik op partiele herconfigu-reerbaarheid.Partiele herconfigureerbaarheid kan men in twee contexten benaderen: de eerste incontext van de hardware, de tweede in de context van patchen.

• In de context van hardware betekent partiele herconfiguratie het toestaan vande gebruiker om, tijdens het spelen, implementaties of ganse modules in- enuit de hardware te laden, zonder dat het spel onderbroken moet worden. Dit,gelinkt aan een eventuele schaalbaarheid, biedt voordelen. Het ware een tege-moetkoming naar de gebruiker toe, om de eindige grootte van de chip te com-penseren met “chip-overstijgende” speelmogelijkheden. De ontwerpers hebbenzich hier niet in verdiept; voor een verdere discussie verwijzen we naar Hoofd-stuk 5, Subsectie 5.2.1.

• In de context van patchen betekent partiele herconfiguratie het toestaan vande gebruiker om, tijdens het spelen, de patch aan te passen.De gebruiker is e.g. in staat om, tijdens het spelen, een extra oscillator-implementatie aan een extra ADSR-implementatie te hangen, en deze naar demixer te leiden. Dit is de gebruiker mogelijk door de gewenste extra moduleseen voor een van het juiste doeladres te voorzien.

57

Eenmaal dit gedaan is kan de gebruiker spelen. Om precies te zijn zal de uit-breiding beginnen meespelen, zodra de extra ADSR-implementatie als doel-adres het adres van de mixer ontvangen heeft. Naadloos zal het instrumentweerklinken met, bovenop de klanken van de reeds aanwezige implementaties,ook de klanken van de extra oscillator met ADSR-omhullende.Omgekeerd kan de gebruiker ook “at runtime” ganse takken in de patch af-schakelen. Hij doet dit door het doeladres van de betrokken implementatiesop nul te zetten, te beginnen bij de module die naar de mixer schrijft, en danverder terugkerend naar de oscillator, bron van het geluid15.Deze vrijheid heeft de Fynth te danken aan het feit dat alle implementatiesop elk moment werken16. Dankzij deze ontwerpskeuze houden alle modules deactieve noten bij, en schrijven ook op elk moment hun gepaste uitgangen opde parallelle bus. Zolang hun doeladres op nul staat, gaan de boodschappenverloren; zodra hun doeladres naar een echte module geschreven wordt, wor-den de berekende waarden benut.

4.2 The Big Picture

Teneinde de blik breed te houden, nemen we even afstand van de organisatie binneninde chip, en kijken naar de grotere omgeving. We beschouwen de “randapparatuur”van de chip, de context die noodzakelijk is om de Fynth als toetsenman te bespelen.

4.2.1 De Opstelling

We willen de Fynth bespelen. Wat hebben we nodig? Sommen we vooreerst debenodigde hardware op.

Een ontvangende computer We hebben nood aan een PC die onze PCI-kaartenbehuist, en hen van elektrische voeding voorziet. Bovendien moet het eenLINUX-machine zijn, daar de besturings-software een LINUX-programma is.Het toetsenbord (bij voorkeur QWERTY, door het software-ontwerp). Verdermoet er een “MIDI in” voorzien zijn.

15Het staat de gebruiker vrij eender welke volgorde te hanteren bij het afkoppelen. De geschetsteis de enige die in alle situaties verzekert dat er geen ongewenst, ander geluid uit de Fynth vloeittijdens het afkoppelen

16Zoals reeds vermeld in een voetnoot in Subsectie 4.1.4, was dit in vroegere ontwerpsversies nietmogelijk. De hier genoemde vrijheid vergde het volledig wegwerken van elke vorm van obligateinitialisatie in de Fynth. Het enige wat aan initialisatie rest is de soft reset operatie, die hetnootgeheugen ledigt.

58

ALTERA c© PCI Development Kit, Stratix Edition Deze kit omvat het StratixPCI Development Board (waar de Fynth huist), Quartus II c© software (ziesoftware) en een Download Cable (om het kaartje met Quartus II c© te kunnenprogrammeren).

Twee RC laagdoorlaatfilters Deze halen de storende harmonischen van de delta-sigma-modulatie uit het uitgaande signaal van het kaartje. Bij dit ontwerpzitten beide filters met plakband aan een dun audiokabeltje geplakt.

Een geluidskaart en boxen Deze, of elk ander analoog audiosysteem, geven deanaloge audiosignalen weer via boxen.

Een MIDI Keyboard en MIDI kabel Het keyboard wordt aan de PC verbon-den met een MIDI kabel, via de “MIDI in”.

Bekijken we nu de benodigde software.

Linux De Fynth wordt bestuurd vanuit Linux.

Hermes Hermes is de besturings-software van de Fynth. Zij is van de hand vande ontwerpers, en is geschreven in C. Bij het programma worden enkele voor-beeldpatches en demo’s meegeleverd. De code is gebaseerd op het programmapcicp [1].

Quartus II c©, en een geldige sof-file Met behulp van het programma QuartusII c© en de download Cable is de gebruiker in staat te herprogrammeren, zodatde Fynth in de chip belandt. Om te programmeren is er nood aan een “sof-file”,een bestand met extensie “.sof”, die de verbindingsinformatie bevat, nodig omde chip om te trimmen tot de Fynth.

Met deze opstelling zijn we klaar om de Fynth te laten draaien.

4.2.2 Van Keyboard tot Boxen

Bekijken we opnieuw de eenvoudige patch van Figuur 4.4. Stel dat het onze wens isdeze patch als instrument te bespelen. Hoe gaan we daartoe te werk?

Vooreerst verzekeren we dat de Fynth in de chip aanwezig is. Dit doen we doormet Quartus II c© de sof-file van de Fynth in de chip te laden.Na de herprogrammering drukken we op de “user reset” knop op het kaartje, teneindealle registers op nul te initialiseren.Vervolgens verzekeren we dat, op de ontvangende Linux PC, de connectie over de

59

PCI bus functioneert17. We sluiten ook het MIDI keyboard aan op deze PC, enstarten Hermes.We volgen de aanwijzigingen op het scherm, die ons toestaan patchen in te laden,demo’s af te spelen,... Om de patch van Figuur 4.4 te bekomen volstaat het devanuit software beschikbare patchlist “pioneersquare.txt”, beschikbaar onder hetPatch Menu, te versturen. Zodra de patch ingeladen is kan het spelen beginnen.Na afsluiten van Hermes is de Fynth niet meer bereikbaar via PC klavier of MIDIklavier. Evenwel blijven alle nog actieve noten klinken, daar de hardware onafhanke-lijk van het programma verder werkt.

4.2.3 De Software

Over de software moet in dit document niet te veel uitgewijd. De software is duidelijkniet het hoofddoel van een hardware-ontwerp; om die reden houden we dit onderdeelheel kort, en bekijken alles vanuit het gezichtspunt van de hardware.

Een MIDI-Kanaal

De software is in staat om in MIDI Mode te gaan. Op dat moment legt ze eenkanaal tussen het MIDI keyboard en de Stratix kaart. De rol van de software inMIDI Mode is beperkt tot het omzetten van note on en note off boodschappen, enhet verzenden van de vertaalde boodschappen over de PCI bus.De input van de conversie zijn nootboodschappen in MIDI protocol, de output zijnnootboodschappen in PCI Bus Protocol (Dit protocol is een Fynth-eigen protocol,en wordt nader toegelicht in Sectie 4.5.). Na de conversie verstuurt de software denootboodschap over de PCI bus, naar de Fynth.Noteer dat deze bewerking een real-time actie is, waarop het oor weinig vertragingduldt. De vertraging t.g.v. het gebruik van MIDI, inherent aan het MIDI-protocol, isal van de grootte-orde ms; gelukkig blijken de andere tussenstappen snel te verlopen:verzending over PCI neemt een, ofschoon niet constante, toch heel korte tijdspannein beslag; de verwerking in hardware neemt zoals vermeld slechts een 100 µs in. Zoblijft de totale vertraging aanvaardbaar.

Een Actieve Patcher

De software kan, vertrekkend van een tekstuele patchlijst, de Fynth configureren metde in tekst genoteerde patch.Om dit te bekomen maakt Hermes gebruik van het Patch Protocol. Meer details

17Na herprogrammering van de kaart verliest de kaart zijn PCI-identiteit op de PCI bus. Eenafdoende oplossing is Linux heropstarten.

60

hierover zijn te vinden in Sectie 4.5. Hier volstaan het ons te zeggen dat de ge-bruiker een comfortabel protocol ter beschikking staat, dat hem toelaat patchlijstente creeren in tekstformaat. Op die manier ontsnapt hij aan de kwelling patchlijstente schrijven in getallen, of – erger nog – hexadecimale code.

Een Bestuurder

Over de rol van de software moet, tot slot, benadrukt worden dat zij een crucialerol speelt in de totstandkoming van de noten.In de bovenvermelde conversie van MIDI protocol naar PCI protocol voert zij im-mers een niet triviale vertaling door: ze vertaalt de toetsnummers (afkomstig vanhet MIDI klavier) naar frequenties18. De frequenties zijn genoteerd in Fynth fre-quentievoorstelling, zoals toegelicht in Hoofdstuk 2.

4.3 Look Closer

In deze sectie willen we terug focussen op de hardware zelf. We bekijken eerstenkele bijzonderheden nader, die in Sectie 4.1 nog onbesproken waren: de notie vancontrole- en geluidssignalen.In de sectie, volgend op deze, geven we per module een exhaustieve opsomming vande mogelijke commando’s. In deze sectie willen we al een aanloop naar die volgendenemen, door enkele operaties te bespreken die bij meerdere modules voorkomen.

4.3.1 Geluidssignalen en controlesignalen

Geluidssignalen

Geluidssignalen worden in de Fynth voorgesteld door 18 bit brede fixed point data,die geluidsmonster per geluidsmonster aangemaakt wordt door oscilatormodules.Eenmaal geproduceerd, ondernemen de geluidsmonsters volledig individueel huntocht op de parallelle bus, verpakt in een parallelle bus-boodschap.Afhankelijk van het doeladres waarvan de boodschap voorzien is, gaat de geluids-monster onherroepelijk verloren (als de eerste 4 bit van de doeladres 0 zijn, dit is

18Binnen de ontwerpsfilosofie gezien is dit veeleer een inconsequentie; er zijn eleganter oplossingendenkbaar, waarbij een conversietabel van nootnummer naar frequentie in hardware bijgehoudenwordt. De software houdt dan op noodzakelijke bestuurder te zijn. Dit is trouwens een conditiosine quae non voor de uitbreiding, vermeld in Sectie 5.2.2 van Hoofdstuk 5.

61

de drain), of wordt binnengenomen in een andere implementatie19. In de andereimplementatie ondergaat het geluidsmonster een verwerking, tot hij weer in eenparallelle bus-boodschap de bus opgegooid wordt.Als het lot hem gunstig gezind is, bereikt het geluidsmonster na verloop van tijd eenmixerkanaal; daar vloeit hij in de figuurlijke zee van de accumulator, wiens inhoudbij de aanvang van de volgende trage klokcyclus naar de deltasigma modulator gaat.Het geschetste verhaal is het lot van een geluidsmonster.

Controlesignalen

Een heel ander lot vergaat het de controlesignalen, en hun controlemonsters. Allegeluidsmonsters en controlemonsters zijn gecreeerd door oscillatoren. Bij controle-monsters is het evenwel nooit de bedoeling dat ze de uitgang bereiken. Geluidssig-nalen dienen om geluid te maken, controlesignalen om de parameters van andereimplementaties te controleren.Het totaal verschillende doel uit zich conceptueel in een bijzonder onderscheid: defrequentie-representatie verschilt. De maximaal weergeefbare frequentie van eensound oscillator is de helft van de bemonsteringsfrequentie, of 16kHz. De maximaalweergeefbare frequentie van een control oscillator is een 1/256e van de bemonste-ringsfrequentie, of 125Hz20. Reden van dit verschil is louter conceptueel: een con-trole-oscillator werkt gewoonlijk aan relatief lage frequenties, in de grootte-orde 1Hz.Het verschil tussen geluidssignalen en controlesignalen is ook op de parallelle busaanwezig. In het parallelle bus-protocol is een veld van een bit voorzien, een taggenaamd “control/sound”, om aan te duiden of de verzonden waarde een controle-of geluidsmonster is, respectievelijk de waarde 1 en 0.Over de productie van controlesignalen: alle modules, behalve de mixer, kunnen zoingesteld worden dat de waarden aan hun uitgang controlesignalen zijn. Zij doendit ongeacht de origine van het gecreeerde monster: of het monster nu binnenkwamals geluidsmonster, of het integendeel gaat om een zelf gegenereerde monster, steedszal de uitgaande monster de markering van controlemonster dragen.Samenvattend betekent controle-implementatie zijn:

• dat de module het veld “control/sound” in de uitgaande parallelle bus-bood-schappen hoog zet

• dat de module werkt met de controle-frequentie-representatie

19Men notere hier het gebruik van het woord implementatie. Het is namelijk mogelijk dat eenimplementatie naar een andere implementatie van dezelfde module schrijft. Dit is in overeenstem-ming met de stelling dat de verschillende implementaties kunnen gezien worden als conceptueelgescheiden blokjes, elk met eigen toegang tot de parallelle bus. De implementaties werken volledigapart, niets houdt hen tegen om onbeperkt (ongeacht hun fysische locatie, mogelijks in dezelfdemodule) naar mekaar te schrijven.

20Een geluidsoscillator is een oscillator die geluidsmonsters produceert; een controle-oscillatorproduceert controlemonsters.

62

Een typische situatie is een geluidsoscillator, die door een controle-oscillator infrequentie gemoduleerd wordt. In het geval van een controlefrequentie van 1 Hz,betekent dit dat de geluidsoscillator geluid zal produceren, waarvan de frequentieniet constant is, maar schommelt rond de nootfrequentie met een periode 1 Hz, eneen variatie-grootte evenredig aan het volume van het controlesignaal. Het mag delezer duidelijk zijn dat het wenselijk is dat de precisie van frequentieregeling rondwaarden van 1 Hz zo hoog mogelijk moet zijn; alleen om die reden heeft de controle-oscillator een andere representatie.De andere typische situatie is de sync van een geluidsoscillator door een controle-oscillator. De geluidsoscillator wordt in dat geval gereset in fase, telkens de controle--oscillator een nuldoorgang met positieve afgeleide heeft. In dit geval speelt alleende frequentie van de controle-oscillator een rol, niet het volume.

modulenaam gemoduleerdeonder woorden parameter

square frequentie of syncsawtooth frequentie of synctriangle frequentie of sync

sine frequentie of syncnoise x

ADSR sustainfilter cut-off frequentie

delayline panningdelayline (p.o.) panning

middleman x

mixer x

Tabel 4.2: Overzicht van de door controlesignalen gemoduleerde parameter, per module

Zo gaat het ook voor de andere modules. We verwijzen naar Tabel ?? waarinvan alle modules weergegeven is welke parameter door inkomende controlesignalengemoduleerd wordt. De modules met een x negeren controlesignalen. Verder dientopgemerkt dat alleen de oscillatoren een keuze hebben wat betreft de gemoduleerdeparameter. Standaard staan ze ingesteld op modulatie van de frequentie, met hetoscillatorcommando “sync/mod and control/sound” kan daar evenwel veranderingin gebracht worden.

4.3.2 Enkele verbreide Operaties

Boodschappen stromen in de Fynth binnen via de PCI input. Alle boodschappen zijngeformuleerd in het PCI protocol. Ze hebben een veld waarin de operatie aangeduidwordt, die met de in de boodschap meegegeven waarde dient uitgevoerd te worden.

63

Ze gaan eerst naar de sencoder.De sencoder maakt, zoals vermeld in Subsectie 4.1.3, onderscheid tussen patchbood-schappen en nootboodschappen. Hij zet beide types op de seriele bus; de eersteongewijzigd, de tweede door hem gewijzigd. Het protocol dat nu heerst is het serieleprotocol, ook deze boodschappen hebben een veld “operatie”. Het parallel protocolheeft geen veld operatie meer; alle boodschappen zijn monsters.Het doel van deze subsectie is reeds enkele operaties toelichten, die bij meerdere mo-dules voorkomen. Een integrale lijst per module wordt pas gemaakt in de volgendesectie.

Soft Reset

Soft reset heeft tot doel het nootgeheugen van een module te ledigen. Op diemanier “vergeet” de module met welke noten hij bezig was. Soft reset treedt opals initialisatie-commando, en grijpt om die reden niet in op implementaties (zoalsbij de meeste operaties het geval is) maar op ganse modules. De operatie is vankracht voor alle muziek-modules, en de sencoder.Na een soft reset blijft alle patch informatie behouden. Dit betekent dat, wanneerde Fynth juist een nieuwe patch kreeg ingeladen en er nog niet gespeeld is, de softreset een nuloperatie is, en niets wijzigt.Toegepast op alle modules tegelijk, levert de soft reset een mute, een verstommingvan de Fynth op. Op een module toegepast, hangt het effect sterk af van de module,en de concrete patch.

Doeladres

Deze operatie kan aan alle muziek-modules meegegeven worden, met uitzonderingvan de mixer. Ze stelt het doeladres in, of voluit “het doeladres op de parallellebus”.Het doeladres op de parallelle bus, een deel van de hoofding van elke parallelle bus-boodschap, heeft een vaste lengte van 8 bit: 4 bit om de module aan te duiden, 4bit om het implementatienummer aan te duiden. Toch heeft de operatie target nietsteeds een lengte 8 voor zijn argument. De oorzaak is tweeledig:

• De implementatie heeft een kanaal als ingang, maar twee kanalen als uitgang.De implementaties van de module delay line zijn in dat geval.

• De operatie target wordt benut om, naast het doeladres, ook andere parametersmee te geven, zoals de control/sound-status.

Om deze redenen varieert de syntax van het target commando over de modules heen.Voor details refereren we aan de uitleg per module, zoals uiteengezet in de volgendesectie.

64

4.3.3 Een Verbreid Proces – Noise Generator

Dit proces dankt zijn bestaan aan audio-technische overwegingen, en komt voor inbijna alle modules die de Fynth rijk is. Het produceert quasi-witte ruis.

Figuur 4.6: De acht mogelijke overgangen van regel 30

De ontwerpers implementeerden de ruisbron met een cellulaire automaat. Erwordt gewerkt met een 32 bit breed register, en met een heel simpele regel, regel 30.Het register evolueert elke snelle klokcyclus naar een volgende toestand; de nieuwetoestand wordt direct ingeschreven in hetzelfde, enige 32 bit register. Om de over-gang te bepalen, vertalen we, per drie aanwezige bits in het originele register, naareen nieuwe bit. We doen deze vertaling conform regel 30. Deze regel is geıllustreerdin Figuur 4.6. De zwarte vakjes stellen waarde 1 voor, de witte waarde nul. Debovenste regel stelt de oude toestand voor, de onderste de nieuwe. Om randcon-dities te mijden (die de willekeur in de weg staan) werken we cyclisch, m.a.w. denieuwe bit 31 wordt bepaald uit oude bit 0, bit 31 en bit 30. Ter illustratie staat deevolutie ook in de tijd aangegeven in Figuur 4.7.Het algoritme vergt slechts dit ene register als geheugen, en vergt vermenigvul-digingen noch delingen. Om die reden is het heel aantrekkelijk voor hardware-implementatie.

Figuur 4.7: De evolutie van regel 30 in de tijd

Men notere dat de keuze voor cellulaire automaten eerder een “dissidente” is

65

binnen de audiowereld. Gewoonlijk wordt er met de methode van lineaire congru-entie gewerkt. Deze methode werkt op basis van een recursieve betrekking:

Xi+1 = (a.Xi + c)mod(m); met i = 0, 1, ...

X0 is de seed, a is de constante vermenigvuldiger, c is het increment, m de modulus.Deze methode levert tevens een eenvoudige implementatie, daar de modulo-operatie,in het geval dat a en m machten van 2 zijn, geen delingen vergt.De uitgang van beide processen is met goede benadering witte ruis. Eventuele“minder witte karakteristieken” brengen geen schade aan de globale werking van deFynth, en in zekere zin was de keuze voor een specifieke implementatie arbitrair, daarbeide “voldoend witte karakteristieken” hebben. Evenwel vergt de eerstgenoemdezelfs geen optelling, om die reden genoot het de voorkeur.

4.4 De Modules

Na de schets van de chipinhoud (de Fynth), het grote beeld (de opstelling), en derol van de diverse soorten boodschappen, is de tijd rijp om tot het bot te gaan:we bespreken de module-opbouw in dit onderdeel, en de boodschap-opbouw in devolgende.In deze sectie leggen we ons toe op de fijnstructuur van de modules. We analyserenze een voor een en we wijzen op anatomische gelijkenissen en verschillen tussenmodules onderling. Met deze sectie zal het skelet van de Fynth tot op het laagsteniveau blootgelegd worden.

4.4.1 Chronos

Over de module chronos werd al breedvoerig uitgewijd in Subsectie 4.1.7, in hetbijzonder in het onderdeel “Polyfonie”. Chronos is met gescheiden lijnen verbondenmet alle muziek-modules, behalve de mixer. Chronos is op geen enkele manierbereikbaar voor de gebruiker, en is een eenvoudige Moore machine.De taak van deze module bestaat erin de toegangen tot de parallelle bus te regelen.Hij doet dit door beurtelings busenables te versturen over de verschillende lijnen.Het schema van de busenables is te zien op Figuur 4.5.

4.4.2 Deltasigma

De deltasigma modulator is de eindtrap van de Fynth. Deze module zit niet op deparallelle bus, is niet toegankelijk voor de gebruiker. Ze heeft twee ingaande en uit-

66

Figuur 4.8: Schema van de deltasigma modulator

gaande, volledig gescheiden kanalen (een linker- en rechterkanaal). Haar ingangenzijn verbonden met de uitgangen van de mixer; haar uitgangen vormen de uitgan-gen van de Fynth zelf, en zijn doorverbonden met de pinnetjes op het Stratix kaartje.

Op Figuur 4.8 is een schema van de module weergegeven. We houden in gedachtendat dit slechts een van beide kanalen is, laat ons zeggen links; het rechterkanaal isvolstrekt gelijk qua opbouw.De weergegeven input is 18 bit, en is de uitgang van het rechter mixerkanaal, ver-meerderd met twee bits. De output is een 0 of 1, en wordt rechtstreeks afgeleid uitde 18 bit brede value, als zijnde de tekenbit.

Hoe gaat dit fenomeen te werk? Op hoger abstract niveau volstaat het te zeggendat de deltasigma modulator streeft naar “goede gemiddeldes”. De modulatorcreeert aan zijn uitgang nullen en enen aan een tempo van 33Mhz, terwijl zijninput slechts varieert aan 32kHz. Op die manier heeft hij 1042 cycli lang dezelfde,18 bit brede waarde aan zijn ingang. Hij streeft er nu naar om, als we de gemiddeldewaarde maken over de 1042 nullen en eentjes aan zijn uitgang, zo goed mogelijk defixed point waarde van de ingang te benaderen in numerieke grootte. Dit herhaalthij voor elke nieuwe waarde, beschikbaar gesteld aan zijn input, 1042 klokcycli lang.Het volstaat het uitgaand signaal naar een laagdoorlaatfilter te sturen, om het laag-frequent signaal terug ten gehore te brengen.

Hoe werkt de schakeling? Ter illustratie staat een voorbeeld op Figuur 4.9.Zeggen we ook eerst waarom de input uitgebreid werd met twee bit: om overflowte voorkomen. Er zijn twee optellingen in het spel, die per optelling een extra bitplaats vereisen21.

21Door de aard van negatieve feedback zijn er slechts deze twee nodig, en kan er geen overflowoptreden door resonanties in de feedbacklus.

67

Figuur 4.9: Voorbeeld van de deltasigma modulatie van de waarde -1/4

De input, in het voorbeeld de waarde -1/4 wordt aangelegd. De value resulteerteruit. Deze value wordt enerzijds teruggekoppeld, anderzijds geeft ze aanleiding toteen uitgang middels haar tekenbit. De tekenbit zelf vormt bovendien de beslissings-regel om hetzij de feedback te verminderen met 1/2 (in het geval de value groterdan 0), hetzij te verminderen met 1/2 (value kleiner dan 0). Resulterend is heterror-signaal, dat op zijn beurt value beınvloedt.Kijken we naar het voorbeeld, dan zien we hoe de terugkoppellus, na een kortetransient, reeds voldoet met een periode vier. Dit resultaat is tevens vatbaar voorintuıtieve interpretatie: vier keer een of nul volstaat inderdaad om −2−2, of -1/4als exact gemiddelde te bekomen. We begrijpen ook hoe de volstrekt audiovreemdeperiode van 4 snelle klokcycli gemakkelijk met een laagdoorlaatfilter kan gestoptworden. Langere terugkoppelperiodes kunnen zich voordoen, maar blijven keurigboven de 16kHz, het grootst voorstelbare audio-signaal. Zij interferen dus niet methet eindresultaat, het audiosignaal.

4.4.3 Een Algemene Muziekmodule

Gaan we nu dieper in op de opbouw van een algemene muziek-module. In principehebben alle muziek-modules een eigen unieke anatomie. Vaak blijkt er echter sprakevan verschillende rassen, veeleer dan echt verschillende soorten. Om die reden is hetheel zinvol van een algemeen schema te vertrekken, die het meest aanleunt bij deopbouw van de oscillatoren.

68

Figuur 4.10: Algemene Opbouw van een Muziek-Module

De Module

Op Figuur 4.10 wordt de opbouw van een module weergegeven. Om ons niet telaten overrompelen door de complexiteit van de figuur, geven we het commentaareerst op macro-niveau, en wijden ons gaandeweg aan de kleinere schaal.De blok in stippelijn is de module zelf. Ze is geconnecteerd met parallelle en serielebus, zoals ook aangegeven op Figuur 4.1. Ze heeft als ingaande signalen de 33MHzsnelle klok, die het tempo opgeeft aan alle FSM. Ze heeft het signaal busenableals ingang, dat komt van chronos en het parallelle bus-verkeer regelt. Ze heeft eeningaande resetlijn, deze is verbonden met de “User Reset Pushbutton”, en dient omalle registers op nul te zetten.Ze heeft ook een multiplying clock als ingaand signaal, we noemen dit de vermenig-vuldigingsklok. Deze is niet te verwarren met de snelle klok; de vermenigvuldigings-klok draait vier keer zo snel als de rappe klok (dat maakt 133Mhz), vereist PLL’s, endient om de snelheid van de vermenigvuldiging op te drijven. Hierop wordt dieperingegaan in Appendix C.

69

Processen en Geheugen

De zes blokken binnenin zijn vijf processen, en in het midden een geheugenblok.De geheugenblok dient voor de stockering van informatie van alle implementaties,en van de noten. Twee processen dienen louter om de communicatie met serieleen parallelle bus tot stand te brengen: de seriele decoder en de parallel decoder.Een proces dient om de wijzigingsinformatie, binnenkomend van de seriele bus, inhet geheugen weg te schrijven. Een ander proces dient om de specifieke functievan het blok te effectueren, e.g. voor een ADSR is dit het aanbrengen van eenvolume-envelope. Een laatste proces is de noise generator.

Geheugen

De geheugenblok heeft, behalve conceptueel, ook fysisch deze rechthoekige vorm:het gaat om een M4K blok. Het is tweepoort-RAM, die in de chip geıntegreerd zit.Het doel van het geheugen is het bijhouden van implementatie- en noot-informatie.De implementatie-informatie geeft aan hoe een bepaalde implementatie22 function-eert. Zij wordt bijgehouden in de implementatie-sectie van het geheugen.De noot-informatie is eigen aan een implementatie, en bevat de ogenblikkelijke fase-waarden voor elke noot23. De fasewaarden geven e.g. aan hoe ver de noot zat in deweer te geven periode, in het geval van de oscillator. Zij wordt bijgehouden in denoot-sectie van het modulegeheugen.

De Seriele Decoder

De seriele decoder decodeert de boodschappen van de seriele bus. Ze doet op geenenkele manier aan adresherkenning, en wordt enkel geactiveerd door een nieuwebinnenstromende waarde. Zodra de 32 bit brede boodschap in een register zit, geeftde seriele decoder aan de settings changer te kennen dat de nieuwe boodschap gereedzit. De settings changer neemt de boodschap in en zet, zodra de boodschap verwerktis, het signaal changer ready op hoog. De processen doen aan hand-shaking24.

22We herinneren eraan hoe elke module verscheidene implementaties kan herbergen. Deze moetenvolledig onafhankelijk draaien, om die reden omvat implementatieinformatie steeds een waarde voorhet doeladres, en de huidige instelwaarden van de door de gebruiker modifieerbare parameters.

23Het betreft informatie van alle 8 noten, een keer voor elke implementatie apart. Voor 6implementaties betekent dit 48 noten.

24Deze vorm van inter-proces communicatie werd veelvuldig toegepast. De ontwerpers ervarenhem als robuust en betrouwbaar.

70

Parallel Encoder/Decoder

De werking van de parallelle encoder/decoder is zeer gelijklopend. Het proces heefttwee modi om te opereren.

• Ze haalt binnenkomende boodchappen in een keer binnen en stockeert het inhaar buffer-register. Op dezelfde manier als geschetst voor het serieel geval,doet ze aan handshaking met haar collega settings changer.

• Ze reageert op impulsen (het kortstondig op een gaan) van het function readysignaal, komend van het proces “the function”. Ze neemt op dat moment defunction output binnen in haar uitgaande buffer, en gooit het op de parallellebus na groen licht van chronos (busenable signaal).

Men notere dat de modi nooit kunnen interfereren, daar de chronos time schedulinghun werking orthogonaliseert in de tijd.

Settings Changer

Settings changer is een luisteraar. Hij verwerkt boodschappen van twee inkomendebronnen, en vertaalt ze in wijzigingen, aan te brengen in het geheugen.Zodra hij een boodschap binnenkrijgt van een van beide encoders, genereert hij zijnvertaling:

• Hij determineert of het om een patch-boodschap of een noot-boodschap gaat.In het eerste geval zal hij het geheugen in de implementatie-sectie wijzigen; inhet tweede geval in de noten-sectie.

• Hij bepaalt het bij de operatie horende geheugenadres, en schrijft de met deboodschap meegegeven waarde ernaartoe.

We merken op hoe de beide inputs geenszins georthogonaliseerd zijn – het is goedmogelijk dat de inputs tegelijk de settings changer trachten op te eisen. Om die re-den zorgden de ontwerpers voor een prioriteitsvolgorde: parallel gaat voor op serieel.

“The Function”

“The Function” implementeert de door de module uit te voeren bewerkingen. Hierzit het ware karakter van de module, hier huizen alle structuren die de modulezijn algemeenheid ontnemen, die ingebakken zijn. Voor e.g. de square bouwt “TheFunction” de blokgolf op, voor de ADSR vermenigvuldigt zij de geluidsmonsters methet gepaste volume.

71

Wie “The Function” beter wil begrijpen, ziet het best als een rigide, onverstoorbareautomaat. Ze pakt in elke trage klokcyclus elke noot van elke implementatie aan25.Dit simpele, statische gedrag maakt dat gewoon weergeven van actieve noten demeest “reguliere” situatie is in hardware, zoals het hoort; het veranderen van noten ofpatch info daarentegen (de settings changer) wordt gezien als exeptionele handeling.“The Function” voert klakkeloos uit wat in het geheugen te lezen staat. Hij haaltdaarvoor, voor elke noot opnieuw, alle nodige parameters op uit het geheugen. Dezeinformatie omvat:

• Nootinformatie die niet gewijzigd wordt door “The Function”; dit zijn defrequentie en de offset.

• Nootinformatie die gewijzigd wordt door “The Function”, zoals de fase.

• Patch Informatie, eigen aan de implementatie. Deze informatie omvat alleparameters, die niet ingebakken zitten in “The Function”, en de gebruikertoestaan de werking te tunen. “The Function” wijzigt deze nooit.

Met deze informatie concipieert “The Function” het monster voor de uitgang. Hijgeeft deze na afwerking door aan de parallelle bus, enige uitgang van de module.“The Function” krijgt nooit rechtstreeks te maken met seriele of parallelle bus. Allevia deze kanalen aangebrachte wijzigingen hebben hun repercussies op de uitgangvia het geheugen om.We noteren nog hoe weer twee processen in een geheugen bewegen. De meerderheidvan de geheugenwaarden is veilig georthogonaliseerd (het ene proces schrijft, hetandere leest). In een deel van de modules26 zijn er echter adressen die beschrevenworden door beide processen. De ontwerpers vingen dit op door ook hier handshakingte implementeren, nu tussen Settings Changer en “The Function”.

Noise Generator

Dit proces dankt zijn bestaan aan audio-technische overwegingen. Het produceertquasi-witte ruis, zoals vermeld in Subsectie 4.3.3. Het doel van de bron is hetaanbrengen van dither in het uitgaande monster. Voor de betekenis van ditherverwijzen de auteurs naar Hoofdstuk 2.Het Noise Generator Proces produceert elke rappe klokcyclus een nieuwe ruiswaardeaan zijn output, deze is 17 bit breed27. “The Function” neemt van al deze waarden

25“The Function” doet dit sowieso, ongeacht of bepaalde noten werkelijk actief zijn. Passievenoten leveren een nulboodschap, wel degelijk een boodschap dus.

26meer bepaald alle oscillatoren, en de ADSR27De dither dient toegevoegd aan het 36 brede register, dat bekomen wordt na vermenigvuldiging

van het monster met, e.g. in het geval van de oscillatoren, het volume. We wensen neer te stappennaar woordbreedtes van 18 bit. Hiertoe moeten we, van de 34 niet-tekenbits van het brede register,17 bit wegsnijden. Dit doen we door dithering met een breedte, een bit minder dan de weg te snijdenstring.

72

slechts af en toe een binnen, m.n. op het moment dat hij ruis nodig heeft om zijnmonster af te werken, overeenkomstig de dither theorie.

Algemeenheid

De meeste modules, in het bijzonder de oscillatoren, zijn rechtstreeks geent op deuiteengezette structuur. Modules als ADSR, filter en delay line vertonen tevenssterke verwantschap. Het raamwerk van de mixer is anders, omdat zijn doelstellingfundamenteel verschilt (e.g. hij verstuurt zelf geen boodschappen op de parallellebus). De module middleman heeft een eenvoudiger opbouw, omdat hij een veeleenvoudiger taak vervult.

4.4.4 Sencoder

De seriele encoder vervult een tweeledige taak in de Fynth: hij encodeert serieleboodschappen, en bemeestert de 8-notige polyfonie. Hij speelt de rol van de con-troller. Daar zijn werking volledig georienteerd is op het “correct regeren” over demuziek-modules, schiepen de auteurs eerst een beeld van de “onderdanen”28.

De Vertaler

Vertrekken we van Figuur 4.1. Sencoder is de bemiddelaar tussen input en modules.In formele zin treedt hij op als vertaler: van het PCI protocol naar het SerieelProtocol. Zijn optreden als vertaler staat reeds uitgelegd in Subsectie 4.1.3; in dezesectie gaan we dieper in op zijn rol in de polyfonie, als “Note Handler”.

De Notenkraker

Om 8 noten tegelijk te verwerken, heeft de Fynth nood aan bepaalde logica. Hoewelschijnbaar een verbreid, typisch synth-probleem, vonden de ontwerpers geen enkelvoorbeeld in de literatuur, vatbaar voor implementatie in de Fynth. De enige oplos-sing bestond in het zelf uitdenken van deze structuur29.

28Net als in de ideale democratie bepalen de onderdanen de inhoud van de controle, en nietomgekeerd.

29In den beginne waren de ontwerpers de mening toegedaan dat “note handling” een eenvoudigprobleem is. Niets bleek minder waar, en het debuggen van de sencoder-code is wekenlang eenhoofdbezigheid geweest.

73

Boodschappen

De sencoder verwerkt nootboodschappen, ook wel broadcast boodschappen, en reageertdus op deze. Bovendien reageert hij nog op twee patch-boodschappen, die alleenvoor hem bestemd zijn.

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties, in PCI protocol geschreven naar de module zelf0 soft reset x x

1 unitone 1 Boolean

ingaande operaties, geschreven in PCI protocol als broadcast boodschap1 glissando 18 unsigned int2 note off 18 unsigned int3 note on 18 unsigned int

uitgaande operaties, geschreven in serieel protocol als broadcast boodschap1 glissando 18 unsigned int2 note off 3 unsigned int3 note on 18 + 3 2x unsigned int

Tabel 4.3: Operaties van de sencoder

In Tabel 4.3 worden alle in het spel zijnde boodschappen vermeld. Men noteredat alle niet vermelde patch-boodschappen, en alle niet herkende boodschappen,ongewijzigd op de seriele bus worden gezet.

Patchboodschappen

Wat betreft de patch-boodschappen onderkennen we in Tabel 4.3 twee operaties.

Unitone stelt de sencoder met een boolese variabele in een van zijn beide modi. Demodes zijn acht-tonig (waarde 0) en een-tonig (waarde 1). In het eerste gevalwerkt de Fynth volwaardig, en verwerkt acht noten tegelijk. In het laatste gevalgeeft de Fynth slechts een noot weer. Deze functie is in het bijzonder nuttigvoor glissando, een functionaliteit die alleen in unitone-modus ondersteundwordt.

Soft Reset ledigt het geheugen van de sencoder.

74

Nootboodschappen

Kijken we nu naar de noot-boodschappen. Tabel 4.3 getuigt van de omzetting diede sencoder doorvoert: hij vertaalt inkomende noot-boodschappen naar het serieelprotocol. Hij zorgt voor het “bestempelen” van frequenties: de ene frequentie wordtverwerkt als noot 7, een andere als noot 2,... Het linken van een bepaalde frequentieaan een bepaalde noot-nummer gebeurt bij de aankomst van een note-on boodschap;het verband tussen nootnummer en frequentie blijft bewaard tot een note-off voordie frequentie aankomt.

Wat is het nut van een dergelijk verband? Keren we terug naar het beeld vande algemene muziek-module. Zoals gezegd is de interne structuur ontdubbeld metverschillende implementaties, en verschillende noten. Het weze echter duidelijk datde module slechts een bescheiden FSM is, die serieel de noten afloopt binnen eentrage klokcyclus, en intelligentieloos een cyclus doorloopt, gestuurd door zijn noot-geheugen. Modules denken in noten; het is echter aan een externe module om tebeslissen welke frequentie zal weergegeven worden door welk nootnummer: de sen-coder.Het MIDI-keyboard vertelt de sencoder welke frequenties moeten beginnen of eindi-gen. De sencoder vertelt aan de modules welke noot moet beginnen of eindigen, enbegroot op die manier de commando’s op maat van eenvoudige FSM. Om die redenbevatten zowel note-on als note-off boodschappen een nootnummer. Teneinde demodules mee te delen welke frequentie voor de startende noot moet gespeeld, wordt,behalve het noodzakelijke noot-nummer, ook de frequentie meegegeven. Voor eennote-off boodschap is zulks niet meer nodig: de modules weten reeds wat ze aan hetafspelen zijn, en zo komt het dat alleen het nootnummer volstaat.

Wat zijn nu de verantwoordelijkheden van een note handler, voor de opbouw enversturing van de boodschap over de seriele bus ? We sommen op.

• Het labelen van inkomende note-on frequenties met een nootnummer.

• Het opzoeken van het nootnummer van binnenkomende note-off frequenties.

• Het bijhouden van de noten die het langst geleden gede-activeerd zijn, om opverstandige manier oude noten met nieuwe te vervangen. Men merke op datdit verschilt van de langst geleden geactiveerde noten30.

• Het limiteren van het aantal actieve noten (noten die in note-on staan, en nogniet gedesactiveerd zijn door een note-off boodschap) op acht. Komen er meer

30Men kan zich voorstellen dat de muzikant een basnoot ingedrukt houdt, en tegelijk een hogemelodie speelt met de andere hand. Er dient over gewaakt dat de nog steeds actieve basnoot nietvervangen wordt door de noten van de hoge melodie; dit gebeurt met de geschetste strategie.

75

note-on boodschappen door (de gebruiker drukt meer dan acht noten tegelijk)dan worden die genegeerd.

• Het negeren van overbodige note-off boodschappen. Soms stuurt een MIDIkeyboard meer dan een note off; het is de taak van de sencoder de overbodig-heid te detecteren, en te zorgen dat deze overbodige boodschap niet tot bij demodules raakt.

• Het detecteren van meerdere note-on boodschappen op dezelfde frequentie. Ermoet over gewaakt dat een bepaalde frequentie maximaal op een enkele nootactief is. Men mag een zelfde frequentie slechts weer in note on brengen, alsze eerst in note off gebracht is.

Figuur 4.11: Conceptueel Schema van de Note Handling

De geschetste verantwoordelijkheden lieten reeds vermoeden dat de implemen-tatie niet triviaal is. Bekijken we nu het conceptueel31 schema van Figuur 4.11.De afgebeelde tabellen beslaan elk acht posities in het sencoder geheugen, elkeenachttien bit breed.

31Het schema is geenszins een hardware-schema, om redenen van beknoptheid bepreken de au-teurs het betoog tot de filosofie van de implementatie.

76

De Note Off Tabel geldt als FIFO32. Ze stockeert een nootnummer in haarwachtrij, telkens de desbetreffende noot met een note-off boodschap gede-activeerdwordt. Anderzijds neemt ze een noot uit haar rij, telkens een note-on boodschapaankomt; de sencoder benut dit nummer om er de nieuw aangekomen frequentieop te activeren. In de extrema bevat de tabel acht noten als er geen enkele toetsingedrukt is (dit is ook de situatie na soft reset van de sencoder), nul noten als eracht of meer toetsen ingedrukt zijn. In het geval van enkele actieve noten bevat deFIFO de resterende vrije noten.

De Note On Tabel is een opzoek-tabel. Ze verbindt aan elke noot (adres 0 tot7) een welbepaalde frequentie (telkens 18 bit), en doet dit op elk moment. Na eensoft reset van de sencoder staan alle frequenties op nul; dit betekent de facto datde noten niet actief zijn. Telkens een note on arriveert, haalt de sencoder het te ac-tiveren nootnummer uit de note off FIFO, en schrijft op het door het nootnummeraangegeven adres de nieuw gearriveerde frequentie. Telkens een note off aankomt,zoekt de sencoder in de note on tabel op om welk nootnummer gaat, en zet er ver-volgens de frequentie op nul. Hij zet het aangetroffen nummer op de note off FIFO,en zet het nootnummer ook op de seriele bus met een note off boodschap.

Een laatste taak van de note handler is het behandelen van glissando. De glis-sando-boodschappen leveren een noot-glijding op. De glissando wordt getriggerddoor de aanslag van een nieuwe noot. Glissando bestaat erin om de overgang temaken van de oude naar de nieuwe noot op “een vloeiende manier”. In fysischetermen betekent dit in een korte doch waarneembare tijdspanne de frequentie telaten “glijden” van de oude naar de nieuwe. Er wordt verondersteld dat sencoder inunitone staat. Dit betekent dat er slechts exact een noot gespeeld kan worden33. Inde verwerking verschillen glissando’s van note on en note off boodschappen. Daardeze optie alleen in unitone werkt, is het meegeven van een nootnummer overbodig– alleen noot 0 wordt gebruikt. Het commando doet in noot-opzicht een nuloperatie:er worden geen noten geactiveerd of gede-activeerd. De enige invloed is de aanpas-sing van de frequentie van de actieve noot. Een glissando wordt bovendien vollediggestuurd van buitenuit: het is de taak van de software om, in geval van glissando,tussenliggende, “interpolerende” frequenties te berekenen en door te sturen via deglissando-boodschap.

Hiermee is de rol van de sencoder als note handler aangeduid; de auteurs beperkener zich verder toe te vermelden dat alle boven vermelde vereisten ook gehaald zijndankzij enkele kunstgrepen in de code.

32First In First Out, een wachtlijnstructuur33Deze beperking heeft vooral te maken met muziektechnische overwegingen: indien drie stem-

men gelijktijdig aan het glijden gaan, valt het resultaat bezwaarlijk nog esthetisch te noemen.

77

4.4.5 De Square

Het Prototype

De square voldoet aan het schema van Figuur 4.10, en volgt ook de algemene wer-king zoals uiteengezet in Subsectie 4.4.3. Drie signalen dienen voor alle oscillatorentoegevoegd aan het schema, en lopen van Settings Changer naar “The Function”.Het gaat om “notechanger”, “noteinfo” en “noticed”. Het dient om het geval vannote on boodschap te regelen: zodra deze arriveert wil de settings changer de fasevan de oscillatie op nul zetten34. Dit mag evenwel niet zonder permissie van “thefunction”, die in het algemeen de fase beheert. De oplossing is weer hand-shaking.Notechanger en Noteinfo geven te kennen aan “the function” dat er een note on is,en geven het nootnummer mee. “The function” zet zelf de fase op nul, en bevestigtaan settings changer door het signaal noticed hoog te zetten.

Signaalproductie

Oscillatoren produceren signalen: ze berekenen 18 bit brede monsters en zetten zeop de bus. Oscillatoren doorlopen permanent hun acht noten, van de eerste totde achtste, ongeacht of de frequentie verschilt van nul. Binnenkomende nootbood-schappen kennen aan welbepaalde noten welbepaalde frequenties toe, en brengen deoscillator tot het resetten van de fase, telkens een nieuwe frequentie aan een nootwordt toegekend.De verschillende manieren om te reageren op nootboodschappen zijn evenwel divers.Fundamenteel zijn er drie modi waarin de oscillator kan functioneren, en waartussende gebruiker met een patch-boodschap (sync/mod en control/sound) kan schakelen.De verschillende modi zijn gekenmerkt door de toestand van twee boolese waarden(sync/mod en control/sound), die in de hardware bepalen hoe het proces “The Func-tion” omspringt met een groep van drie noot-variabelen. De drie noot-variabelenzijn de fase, de frequentie en de offset.

• De frequentie is 18 bit breed en komt binnen in de oscillator via nootbood-schappen.

• De offset is tevens 18 bit breed en komt binnen via de parallelle bus.

• De fase is 26 bit en wordt binnen het “The Function” proces aangepast. Uit defase wordt, rekening houdend met de aan de oscillator specifieke golfvorm, hetmonster aangemaakt. De fase wordt gereset, telkens een nieuwe noot begint.

34Dit om audio-technische redenen: het oor is niet fase-gevoelig, tenzij het om een start- ofeind-punt gaat.

78

Met hun drieen bepalen zij volledig het gedrag van individuele noten, of beter, zijnzij het enige onderscheid in hardware tussen twee verschillende noten binnen dezelfdeimplementatie.Bekijken we nu nader de drie modi, alle als afzonderlijke implementaties binnen eenmodule.

Een GeluidsOscillator met frequentie-modulerende ingang heeft sync/modop nul (modulerend) en control/sound op nul. Elke trage klokcyclus leest hij,voor elke noot apart, de huidige fase uit. Hij telt er een increment bij, enbepaalt daaruit de geluidsmonster. Het increment zelf wordt bepaald door desom van de frequentiewaarde, en de offset35.

Een GeluidsOscillator met sync-ingang heeft sync/mod op een (sync) en con-trol/sound op nul. Hij werkt tevens met increment op de fase, doch nu bepaaltalleen de frequentie die. De offset treedt geheel anders op: ze doet de fase re-setten, zodra haar teken van negatief naar positief gaat36.

Een controle-oscillator heeft control/sound op een. De optie sync/mod wordtgenegeerd. Het increment op de fase wordt nu alleen bepaald door de offset;de frequentie wordt dus niet gebruikt. De offset kan ingegeven worden door degebruiker tijdens het patchen, maar kan ook keer op keer binnenkomen via deparallelle bus. Deze werkwijze is ingegeven door de typische situatie, waarineen controle-oscillator een sound-oscillator in frequentie moduleert, en het nietgewenst is dat de variatiefrequentie afhangt van de toonhoogte van de noot.De aansturing van de controle-oscillator verloopt op een particuliere manier:telkens een nieuwe note-on boodschap aankomt, begint de controle-oscillatorte “wachten”: hij wacht op een patch-boodschap, meer bepaald een offset--boodschap. Deze vertelt hem welke hij frequentie hij moet weergeven. Mennotere dat deze boodschap in de software moet gebeuren, daar er geen patch-intelligentie in de Fynth zelf aanwezig is; alleen de software weet wie controle-oscillator is, en wie sound-oscillator.

De Operaties

De square wordt net als alle modules gecommandeerd vanuit de seriele bus. Deboodschappen zijn geformuleerd in het serieel protocol. Dit is een rechtstreeksevertaling van het PCI protocol, dat gehanteerd wordt door de gebruiker. Detailsover protocols staan uitvoerig beschreven in Subsectie 4.5. Hier beperken we onstot een analyse van de operaties. Bekijken we daartoe het schema van de operaties

35Het increment is letterlijk de som van frequentie en offset, er treedt dus geen multiplicator op.De oscillatie is dus gerealiseerd door twee simpele optellingen, een “comfort in hardware”.

36In hardware-termen betekent dit dat alleen de eerste bit bekeken wordt, en de overgang van 0naar 1 de fase-reset triggert.

79

waarop de square reageert, in Tabel 4.4. We merken direct op dat, behalve dutycycle, de operaties in voegen zijn bij alle oscillatoren.Een kolom is gewijd aan de codering van de operatie, deze is identiek in PCI enserieel protocol. De syntax van de boodschap daarentegen kan bij de twee protocolsverschillen; hier staat alleen het protocol waarmee de oscillator in contact komt, hetserieel protocol.

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

1 volume 18 signed int2 sync/mod and 2 2x Boolean

control/sound3 frequency 18 unsigned int4 offset 18 signed int5 target 8 adres6 duty cycle 8 unsigned int

operaties geschreven als broadcast boodschap1 glissando 18 unsigned int3 note on 18 + 3 2x unsigned int

Tabel 4.4: Operaties van de oscillatoren, met hun digitale codering in het serieel protocol.

Soft reset leegt de waarden in de geheugenblok. Deze actie verzekert dat de oscilla-tor geen activiteit vertoont; evenwel laat ze de de patch informatie ongeschon-den. Ze stopt wel alle noten.

Volume laat toe de uitzwaai aan de uitgang te regelen. Maximaal volume (0x1FFF)laat de 18 bit brede uitgaande monsters het volle bereik bestrijken; voor volume0 ziet men aan de uitgang alleen nullen.

Sync/Mod en Control/Sound staat toe twee boolese waarden mee te geven;beide boolese waarden zijn afzonderlijk te beschouwen, en hebben geen vastverband. Zij zetten een oscillator in een bepaalde modus, zoals toegelicht inhet onderdeel over signaalproductie.

Frequency dient om de frequentie mee te geven, die dient als noot-informatie. Derol hiervan wordt tevens toegelicht in het onderdeel over signaalproductie.

Offset geeft eveneens noot-informatie mee, en staat toegelicht in het deel signaal-productie.

Target geeft 8 bit target mee: 4 bit voor het module-adres, 4 bit voor het imple-mentatie-nummer.

80

Duty Cycle wordt uitsluitend toegepast voor de square. Het is een parameter metbereik tussen 0 en 1, die toestaat om de golfvorm te modifieren. Een squareis een golfvorm die (in het genormeerde geval) slechts 2 waarden aanneemt:+1 en -1. De duty cycle geeft de fractie aan van de periode, waarin de waardeaan de uitgang het maximum is; de rest van de periode wordt opgevuld metals waarde het minimum. Een duty cycle van 0x80 levert een symmetrischeblokgolf.

Note On activeert een nieuwe noot, met de meegegeven frequentie. De noot-fasewordt op nul in het geheugen, en de noot-frequentie wordt ingeschreven.

Note Off doet, merkwaardig genoeg, niets. We stellen het hier duidelijk en on-dubbelzinnig: oscillatoren reageren niet op note off boodschappen. De dy-namiek van volume-daling, wanneer de gebruiker de toets lost, wordt aan degebruiker mogelijk gemaakt door een ADSR te verbinden aan de uitgang vande oscillator.

Glissando heeft in de oscillator een heel eenvoudige uitwerking: de settings changervervangt de oude frequentie telkens met een nieuwe. Zo gaat de glijding,dankzij vele discrete stapjes, continu klinken.

Hiermee hebben we de werking van de square toegelicht; voor de andere oscillatorenblijft het merendeel van de voorgenoemde uitspraken gelden.

4.4.6 Sawtooth, Triangle, Sine en Noise

Omtrent de Sawtooth en de Triangle valt weinig nieuws te vertellen. Het zijn beideautonome modules met twee implementaties, die slechts verschillen van de squareop enkele punten.

• Het module-adres van de module sawtooth is 3, dat van de triangle is 4, sine5 en noise 6. Dit wordt ook vermeld in Tabel 4.15.

• Het proces “The Function” realiseert een andere golfvorm.

– Sawtooth en Triangle creeren het gekende stuksgewijze lineair verloop.

– Noise laat de frequentie onbenut, en maakt integendeel gebruik van eengealtereerd Noise Generator proces. Waar het proces in de algemenemuziekmodule een uitgang heeft van 17 bit, heeft het proces nu een uit-gang van 18 bit, nodig voor het genereren van het geluidsmonster, en deuitgang van 17 bit voor de dithering. Beide uitgangen blijven evenwelafgeleid uit hetzelfde 32 bit brede register.

81

– Sine maakt in het proces “The Function” gebruik van een M4K geheugen-blok, geprogrammeerd als ROM. Het bevat 4096 monsters van een periodevan een sinus. De tussenliggende waarden bekomt “The Function” doorinterpolatie. Hiertoe is een vermenigvuldiging nodig, wat maakt dat desine beslag legt op een deel van onze (kostbare) in de chip aanwezige DSPblokken.

• Sawtooth, Triangle, Sine noch Noise hebben een duty cycle; dit betekent datin Tabel 4.4, commando 6 vervalt.

Behalve de bovengenoemde verschillen, zien alle oscillatoren er intern identiek uit,en laten zich op dezelfde manier hanteren en commanderen.

4.4.7 ADSR

ADSR, een Muziekmodule

De ADSR is een muziekmodule met 6 implementaties, die de amplitude van mon-sters wijzigt. Hiertoe vermenigvuldigt zij de binnenkomende monsters met een op-portuun volume. Dit volume is noot-afhankelijk, en wijzigt elke trage klok. Het isafgeleid uit een ADSR envelope, concept dat reeds toegelicht werd in Subsectie 2.1.2.

Wat betreft haar interne werking, duiden we op de voornaamste verschillen inde context van Figuur 4.10, en de uiteengezette werking van de square.Wat opvalt ten opzichte van de square is o.a. de andere geheugeninhoud.

• In de implementatie-sectie bevinden zich, naast het doeladres: attack, decay,sustain en release waarden.

• In de nootsectie wordt, naast een volume, ook een “stage” gestockeerd. Ditis een twee bit brede waarde die, afhankelijk van de vordering van de ADSR--envelope, de waarde 0 (a), 1 (d), 2 (s) of 3 (r) bijhoudt. Bovendien wordtde te bewerken monster, na aankomst via de parallelle bus, gestockeerd in denootsectie.

De strategie van weergave is als volgt. De ADSR heeft na een soft reset de gansenootsectie op nul. Wanneer een note on arriveert, e.g. voor noot nul, start hetproces “The Function” in stage 0 (attack) met volume nul. Het volume ontvangtvan dan af een increment van de grootte “attack increment” per trage klokcyclus.Elke trage klokcyclus wordt de nieuw binnengekomen monster vermenigvuldigd methet nieuw berekend volume, en op de parallelle bus gezet.Dit verhaal gaat door tot of volume 1 bereikt is (over naar stage 1, decay), of een

82

note off arriveert. In het geval van note off gebeurt overigens steeds hetzelfde, on-afhankelijk van de huidige stage: de noot-stage springt naar 3 (release).In stage 1, 2 en 3 gebeuren vergelijkbare dingen. In stage 1 wordt het volumegedecrementeerd met “decay decrement”. Dit stopt wanneer het volume gezakt istot het niveau van de “sustain level” (naar stage 2), of tot de aankomst van eennote off (naar stage 3). In stage 2 wordt de sustain level als volume aangehouden,tot een note off doet springen naar stage 3. In stage 3 wordt gedecrementeerd met“release decrement”, tot het volume exact nul is.

De geschetste strategie volstaat om de ADSR als module te implementeren. Deverdere werking van de andere processen, van businterface tot en met dithering,blijft ongewijzigd die van algemene module en square.

De operaties

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

1 attack increment 18 unsigned int2 decay decrement 18 unsigned int3 sustain level 18 signed int4 release decrement 18 unsigned int5 target and 4+4 + 1 2x uint

control/sound boolean

operaties geschreven als broadcast boodschap2 note off 3 unsigned int3 note on 18 + 3 2x unsigned int

Tabel 4.5: Operaties van de ADSR, met hun digitale codering in het serieel protocol.

We geven nu een lijst van de operaties die op de ADSR kunnen afgevuurd wor-den, zie Tabel 4.5. Het ADSR adres op de seriele bus is 8, haar implementaties zijn0..5. In de tabel merken we op dat het target commando een aanhangsel kreeg: nade 8 bit van het doeladres, volgt een boolese variabele om aan te duiden of de ADSRals controle-ADSR (1) of sound-ADSR (0) optreedt. De betekenis van controle vs.geluid is vergelijkbaar met die bij de square; voor de ADSR betekent het gewoondat uitgaande monsters getagd worden als controlemonsters.De waarden voor attack, decay, sustain en release verdienen een opmerking. Dedefinitie van sustain is voor de hand liggend: net als volume is het een signed inte-ger met als maximum 1, minimum 037. Attack, decay en release zijn daarentegen

37De schrandere lezer merkt op dat het meegeven van een tekenbit volstrekt overbodig is, daar

83

gedefinieerd als “increments” en “decrements”. Het volstaat om volgende formulesin software te implementeren om de eenheid te veranderen naar de comfortabeleremilliseconde.

attack[ms] = Ts[ms]. 218−1attackinc

decay[ms] = Ts[ms]. (218−1)−sustain

decaydec

release[ms] = Ts[ms]. sustainreleasedec

met Ts[ms] = sampling rate (ca. 1/32), [attackinc] = unsigned int,[decaydec] = unsigned int, [sustain] = signed int, [releasedec] =unsigned int

Reden van deze andere eenheden is het vermijden van (in hardware-termen) durevermenigvuldigingen.

Tenslotte merken we ook op dat, van de note-on boodschappen, de ADSR alleenhet nootnummer bijhoudt, en zich niet interesseert voor de frequentie. Ook merkenwe op dat glissando genegeerd wordt door de ADSR.

4.4.8 Filter

Het filter is een module met 6 implementaties, en heeft tot doel de frequentie-inhoud van binnenkomende signalen te wijzigen. Zijn doeladres op de parallelle busis 9. Hij implementeert een IIR filter van vijfde orde, en is een laagdoorlaatfiltermet resonantie omheen de verschuifbare afsnijfrequentie. De werking werd reedsgeschetst in Subsectie 2.1.2, het gedrag in het frequentiedomein is er te zien opFiguur 2.11.

Ontwerpsstrategie

Voor op de hardware in te gaan, moeten we vooreerst ingaan op de gevolgde on-twerpsstrategie.In Figuur 4.12 wordt de C-code afgebeeld38, die in software een Moog filter imple-menteert. Ons doel is een soortgelijke filter creeren in hardware.

die verplicht nul is. De ontwerpers meenden evenwel dat dit de band tussen programmeur en teprogrammeren medium dichter zou aangetrokken houden; bovendien ware het pas op het niveauvan grafische interface (die niet geımplementeerd is) dat een gebruiker zich kan veroorloven niet teweten wat gebeurt in de hardware.

38Afkomstig van het web, musicdsp.org.

84

Figuur 4.12: C code voor een Moog VCF

Figuur 4.13: Blokschema van het filter

Onze eerste strategie leverde een dood spoor. Vertrekkend van het algemeenschema van Figuur 4.13, gecombineerd met de code uit Figuur 4.12, hoopten deontwerpers het filter te bekomen met poortextractie39. Vele uren Maple volgden.Helaas vergaten de ontwerpers het maximum van de door Figuur 4.12 gedefinieerdefilter te normeren op 1. Dit laatste, overtreding van een bindende wet in fixed point,leverde onaanvaardbare afwijkingen op de bekomen overdrachtsfunctie. De dagen

39Poortextractie is een techniek om, vertrekkend van een rationale overdrachtsfunctie, een ont-binding te bekomen in eerste- en tweede-orde filters. Het is een niet triviale techniek, toegelichtin [6].

85

zinloos werk noopten de ontwerpers geenszins tot een nieuwe poging aan mathema-tisch complexe poort-extractie te doen, veeleer bewandelden ze een andere weg.

Met in de achterhoofd de wetenschap dat het voorbeeld uit Figuur 4.12 vijfdeorde is, gingen de ontwerpers de heuristische toer op. Vooropstellend dat er van devijf polen vier complex, en een reeel moet zijn40, gingen ze aan de slag met Maple.

Figuur 4.14: Regalia Mitra Filter, en de klassieke implementatie van de All-Pass Filter

De strategie gaat als volgt. Hebben we 4 complex toegevoegde polen, en eenreele, dan kan het filter geımplimenteerd als de cascade van twee all-pass filters vantweede orde, en een van eerste orde.Gezien het om fixed point gaat, dient men enkele zaken zorgvuldig in het oog tehouden.

• Het uitsluiten van overflow door feedback. Fixed point betekent risico vooroverflow, en feedback is een evidente oorzaak.

• Robuustheid van de implementatie. Fixed point design wordt bedreigd doorinstabiliteit, perturbatie van afrondingsfouten, limited cycles,...

40Dit is een onderstelling, ingegeven door de simulatie van de functie; die leverde een snijpuntmet de reele as.

86

Figuur 4.15: Tralie-implementatie van eerste en tweede orde

Een betrouwbare oplossing levert de cascade van Regalia-Mitra met tralie-imple-mentatie. Zij sluiten problemen rond afronding en feedback uit, en hebben een lagekans op het optreden van limited cycles41. Er werd geopteerd voor Regalia-Mitra,omwille van de voordelen vermeld in Hoofdstuk 2. Figuur 4.14 toont bovenaan eenRegalia-Mitra filter. Een elementair deel hiervan is de All-Pass filter. De All-Passfilter kan van eerste, maar ook van tweede orde zijn. Een klassieke implementatiewordt getoond in Figuur 4.14 onderaan. De tralie-implementatie wordt getoond inFiguur 4.15, bovenaan in eerste orde, en onderaan in tweede orde (als cascade vaneerste ordes). De tralie-implementatie is om bovenvermelde redenen van stabiliteiten afronding te verkiezen boven de klassieke.

Met bovenstaande is het denkkader uitgebouwd. Met Maple simuleerden deontwerpers het gedrag van de overdrachtsfuncties van zowel eerste- als tweede-ordeRegalia-Mitra met tralie-implementatie. Inspectie (trial and error) leverde de meestopportune parameters voor de frequentie-karakteristiek van eerste orde (low pass)

41Meer over robuuste filterimplementaties is te vinden in [6].

87

Figuur 4.16: Simulatie van de overdrachtsfunctie van de module filter.

en tweede orde (band pass). Het volstond om twee tweede ordes met een eerste ordete vermenigvuldigen om de gegeerde karakteristiek van Figuur 4.16 te bekomen. Ditbetekende het eindpunt van de heuristische weg: de hardware implementatie vanhet filter was gevonden.

De Muziekmodule Filter

Gaan we nu in op de interne werking. We bouwen onze uitleg opnieuw uit in eenvergelijking met Figuur 4.10, en de square.De geheugeninhoud van het filter ziet er als volgt uit.

• In de implementatie-sectie bevinden de waarden voor afsnijfrequentie, reso-nantie en bandbreedte.

• De nootsectie is een monster-geheugen. Het te bewerken monster, na aankomstvia de parallelle bus, wordt er gestockeerd. Daarenboven bevinden zich hier,voor elke noot, de monsters van de laatste 5 trage klok-periodes.

88

De stockering van deze laatsten heeft alles te maken met de orde van het filter. Inhet Z-domein gerepresenteerd (Figuur 4.15), zien we in totaal 5 keer een z-1-blokje.Deze “oudere” waarden dienen bijgehouden te worden, willen ze bijdragen tot deuiteindelijke output.

Bovenstaande elementen volstaan voor een elementair begrip van het filter. Menmerke op dat de vele problemen, denkbaar in fixed point, veeleer voorkomen zijn(door een goede implementatie-keuze) dan genezen na ondervinding42.

De operaties

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

1 cut-off frequency 18 unsigned int2 resonance 18 signed int3 bandwidth 18 signed int5 target and 4+4 + 1 2x uint

control/sound boolean

operaties geschreven als broadcast boodschapx x x x

Tabel 4.6: Operaties van het filter, met hun digitale codering in het serieel protocol.

Het filter reageert op de operaties vermeld in Tabel 4.6. Hun betekenis is alsvolgt.

Soft Reset leegt de nootsectie van het geheugen, net als bij square.

Cut-Off Frequency stuurt de frequentie aan waarboven het filter afsnijdt; eentypische waarde is 0x03000.

Resonance bepaalt hoe sterk de resonantiepiek in het frequentiedomein mag zijn,en is uitgedrukt met een positieve, 18 bit brede signed int. Voor een waardevan 0x03000 bekomen we een stevige, doch nog steeds “genietbare” resonantie.

Bandwidth is een variabele wiens variatie resulteert in de evenredige variatie vande bandbreedte. Het is een 18 bit signed int, met een typische waarde rond0x18FF, kort onder het maximum 0x1FFF.

42Professor Uncini, veteraan in digitale audio, meende dat limited cycles ons ontwerp “mogelijksnog belagen”. Hij adviseerde de implementatie door te voeren, en dan op het oor af te gaan.

89

Target and control/sound : Target geeft het adres op de parallelle bus mee, enbestaat uit 4 bit doelmodule en 4 bit implementatienummer. Control/soundzegt of de implementatie controle(1)- of geluidssignalen(0) moet produceren.

Noteren we tenslotte hoe note on en note off boodschappen geen invloed hebben:er gebeurt hoegenaamd niets, en waarden van de vorige noot vloeien nog 5 trageklokcycli (5e orde) het filter uit.

Hiermee eindigt de uitleg over het filter. Merken we op dat het filter een echte sig-naalverwerkingsblok is, die een diepgaand onderzoek vergde voor zijn totstandkom-ing. De drie controlevariabelen zijn aanvaardbaar goed georthogonaliseerd, doch zijndat nooit helemaal. Lineaire systeemtheorie leert immers dat orthogonale controler-ing in het frequentiedomein zelden vertaalbaar is naar een rationale overdrachtsfunc-tie. Niettemin is Regalia-Mitra een aardige oplossing, die een bevredigend resultaatin het frequentiedomein levert.

4.4.9 Delay Line

Stereo Muziekmodule

De delay line, of vertragingslijn, is een module met 6 implementaties en creeertstereo. Zijn ingang is een monofoon kanaal, aan zijn uitgang staan twee kanalen:links en rechts. Naar de delay line wordt geschreven via slechts een module-adres(10), zijn twee uitgangen hebben echter elk nood aan een doeladres: een voor links,een voor rechts.De delay line kent twee fundamentele strategieen voor stereo, en een derde als effect.

• Panning depth: het creeren van een volumeverschil tussen linker- en rechter-kanaal. Dit geeft de luisteraar een gevoel van localisatie; het effect is geımple-menteerd op alle zes de implementaties.

• Delay Depth: het creeren van een tijdsverschil tussen linker- en rechterkanaal,of, in hardware, het aanbrengen van een tijdsvertraging op een van beidekanalen. Dit ervaart de luisteraar als een winst aan diepte, ruimte binnen hetgeluid. Dit effect is slechts aanwezig voor een implementatie (m.n. implemen-tatie 0), daar het een volledige MRAM-blok op de chip opeist.

• Echo: er wordt echo gecreeerd door een terugkoppeling. Deze terugkoppel-ing moet sowieso geattenueerd (vaste komma = overflow gevaar); de precieseattenuatie kan ingesteld met echo factor. Deze echo optie grijpt, net als de-lay depth, slechts op een implementatie in: implementatie 0. Bovendien is zemutueel exclusief met de delay depth: de eerste van de zes implementaties ver-toont of delay depth, of echo; de andere (implementaties 0 tot 5) zijn “p.o.”,“panning only”.

90

Figuur 4.17: Delay line in zijn werking als “panning only” (p.o.), en als “delay depth delayline”

Figuur 4.18: Delay line in zijn werking als “echo delay line”

Een schema van de delay line, met zijn drie mogelijke manieren van werking, isweergeven in Figuur 4.17 en Figuur 4.18. Als muziekmodule wijkt de delay line afvan het algemeen schema van Figuur 4.10 op enkele punten.

91

• Er is een MRAM blok bijgekomen. Deze is ter beschikking van “The Func-tion”, die hem gebruikt om vertraging te creeren. Het proces stockeert er van8 noten de gecreerde monsters, en haalt ze er, afhakelijk van de delay depth,direct (depth 0) terug uit, of, met een aangepaste pointer, pas later. De ma-ximale delay is 125ms, en hangt samen met de capaciteit van de MRAM blok:er is plaats voor 32000 waarden van 18 bit. Voor 8 noten, en sampling rate32kHz, betekent dat elke noot 1/8 seconde ter beschikking heeft.

• De geheugeninhoud: de implementatiesectie houdt volume left en right bij,delay depth of echofactor, en twee doeladressen en een control/sound bit perimplementatie. De nootsectie bewaart enkel de binnenkomende monsters.

De Operaties

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

1 volume left 18 unsigned int2 volume right 18 unsigned int3 delay depth 15 unsigned int4 echo factor 18 signed int5 target left, control/sound left 8+1+8+1 uint+boolean

target right, control/sound right uint+boolean6 echo/delay depth selector 1+1+1 3x Boolean

operaties geschreven als broadcast boodschapx x x x

Tabel 4.7: Operaties van de delay line, met hun digitale codering in het serieel protocol.

De delay line werkt met de commando’s vermeld in Tabel 4.7.

Soft Reset leegt de nootsectie van het geheugen, net als bij square.

Volume Left regelt het volume van het uitgaande linkerkanaal.

Volume Right doet hetzelfde voor het rechterkanaal.

Delay Depth geeft aan hoeveel delay gewenst is. Het beschikt over 15 bit, enstaat op die manier toe tot 215

8trage klokcycli te vertragen. Dit betekent dat

de bovenste 12 bit benut worden om het aantal trage klokcycli vertraging inte geven; de onderste drie bit worden niet benut 43.

43Reden voor deze particulariteit is het feit dat de ontwerpers eerst tot een seconde vertragingwilden gaan. Helaas vergt dit acht MRAM blokken, de chip heeft er slechts 2.

92

Echo Factor dient om de terugkoppeltak van de echo te attenueren. Op zijn ma-ximum staat zijn waarde gelijk aan een. Merk op dat waarden groter dan 0,5in sommige gevallen overflow kunnen veroorzaken; de ontwerpers opteerdenervoor om de gebruiker de vrijheid te laten vrij in te stellen.

target left, control/sound left, target right, control/sound right: Dit alle-gaartje geeft ineens doeladres en controlebit van linkerkanaal, en idem voorrechterkanaal, achter mekaar geschreven middels in het totaal 8+1+8+1 = 18bit.

Echo/delay depth selector bestaat uit drie bit, boolese variabelen.

• De eerste bit geeft aan of er effect gewenst is op het linker(0)- of rechter(1)-kanaal.

• De tweede bit geeft, indien 1, aan dat het effect echo gewenst is.

• De derde bit geeft, indien 1, aan dat het effect delay depth gewenst is.

Men merke op dat van alle implementaties 5 implementaties de tweede enderde bit op nul moeten houden (p.o.). Een implementatie mag of echo, ofdelay depth krijgen; evenwel niet allebei. Dit betekent dat de drie bits samende waarde 0, 1, 2 of 5 kunnen aannemen.

Ten opzichte van de algemene muziekmodule, heeft de delay line er een procesbij: de switch. Deze verzorgt de toegang tot de parallelle bus, en maakt dat tegelijktwee kanalen (links en rechts) naar de parallelle bus kunnen schrijven.Noteren we tenslotte hoe note on en note off boodschappen geen invloed hebben.

4.4.10 Middleman

Een Bescheiden Muziekmodule

De meest eenvoudige muziekmodule in de Fynth is zonder twijfel Middleman. Hijtelt twee inputsignalen op, en brengt de som naar zijn uitgang. Hij attenueert voorafbeide inputs met factor 1/2, de minimale waarde om overflow uit te schakelen. Alsmodule kent hij twaalf implementaties. Hij heeft twee adressen op de parallelle bus(11 en 12), daar hij toegang verstrekt aan twee verschillende signalen.

Als muziekmodule heeft hij alle processen, aangeduid in Figuur 4.10. Evenwelis de woordenschat van elk heel beperkt. In zijn geheugen stockeert hij doeladres inde implementatiesectie; recentelijk toegekomen waarden buffert hij in de nootsectie.

93

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

5 target, control/sound 8+1 uint+boolean

operaties geschreven als broadcast boodschapx x x x

Tabel 4.8: Operaties van de Middleman, met hun digitale codering in het serieel protocol.

De Operaties

Tabel 4.8 geeft de commando’s van Middleman weer.

Soft Reset leegt de nootsectie van het geheugen, net als bij square.

target and control/sound bepalen voor elke implementatie het doeladres, enbepalen de aard van het uitgaande signaal.

4.4.11 Mixer

De Monding

De mixer is het eindpunt van de monster-stroom; alle hoorbare signalen passerenhier, en worden door de mixer omgezet in een standaard stereo audio-signaal metbemonsteringsfrequentie 32kHz. Als module heeft hij slechts een enkele implemen-tatie, met twee kanalen44. Voor een keer is er sterke afwijking van het beeld van dealgemene muziekmodule:

• Er is geen geheugenblok.

• “The Function” wordt, i.p.v. vanuit het geheugenblok, gecommandeerd dooralleen de trage klok. Hij voert twee types bewerkingen uit:

– Ongebreideld accumuleren, gedicteerd door niets of niemand.

– Getriggerd door de trage klok, het legen van de accumulatoren, en hetverzorgen van de signaalconversie van de inhoud: van accumulatorsom,tot audiosignaal.

44Of, voor linguı: de module mixer heeft twee implementaties: een voor linkerkanaal, een voorrechterkanaal. Dit is strikt gezien een correctere betiteling, implementatie zijnde een deelverza-meling van een module.

94

Figuur 4.19: Schema van de mixer

De werking van de mixer is geıllustreerd in Figuur 4.19. We zien in hoe demonsters binnenstromen via twee doeladressen (13 en 14) en bij de accumulatoropgeteld worden.De trage klok verzorgt het tempo waarmee de accumulatoren geleegd worden, enhun waarden naar het deelproces “smart step down” vloeien. Na dit proces volgtnog een vergelijking met een door de gebruiker aangebrachte clipping waarde. (Dezevertelt wat de maximale uitzwaai van de output mag zijn.). Na deze stap bekomenwe left en right output, twee 16 bit 32kHz bemonsterde signalen.

Het deelproces “smart step down” is geıllustreerd in Figuur 4.20. De rol van dewindow-positie wordt er verduidelijkt. Een raam van 15 bit, dat de uitgaande datauit het 32 bit brede accumulatorregister moet lichten, schuift onder impuls van dewindow-position. Hiernaast resulteren de beide tekenbits uit de accumulator een-duidig in de ene tekenbit van de uitgaande data.De window position is een maat voor “het te verwachten volume, ingaand in demixer”. Hoe meer oscillatoren actief, en hoe hoger hun volume is, hoe groter de

95

Figuur 4.20: Smart step down

uitzwaai is van het signaal, dat in de accumulator gerepresenteerd wordt door 34bit. Gewenst aan de uitgang is echter een signaal van woordbreedte 16 bit.Berekenen we wat de maximaal mogelijke uitzwaai is van het in de mixer ingaandevolume, onderstellend dat alle 10 oscillatoren aan maximaal volume naar de uitgangschrijven, elk met acht noten actief, dan bekomen we de wetenschap dat de accu-mulator minimaal 25 bit breed moet zijn, om overflow uit te sluiten45.Kiezen we nu een vaste raampositie, en kiezen we de 15 hoogste bit uit de 32 waarde-bits, dan gaan we nooit in overflow, maar gooien al te veel significante bits weg. Inhet extreme geval van 1 oscillatoren, en slechts 1 klinkende noot, zou dit betekenendat van de 15 waardebits aan de uitgang, slechts de laatste 8 benut worden, en dehoogste 7 nul blijven; dit betekent een regelrechte drop van de SNR46.Kort gesteld: we hebben nood aan een variabele raampositie. De raampositie isgecodeerd in 4 bit, en de gebruiker dient deze lager dan het maximum (15) in te

45Dit getal wordt bekomen als de som van de woordbreedte van een monster, de 4 bit van devermenigvuldiging met tien (4 bit gevergd om het te kunnen representeren) en de 3 bit van devermenigvuldig met 8.

46Hanteren we de vuistregel SNR = 6.n, met n het aantal bits, dan bekomen we 96 dB voor16 bit (CD-kwaliteit), en 54 dB voor 9 bit (ca. audio-cassette kwaliteit, in het geval zonderruisonderdrukking)

96

stellen wanneer niet alle oscillatoren op maximum volume actief zijn. Met deze posi-tie wordt het monster gevensterd, en na vergelijking met de clipping value naar deuitgang gestuurd.

De Operaties

codering naam breedte waarde aardin PCI protocol van de operatie (in bit) waarde

operaties geschreven naar de module zelf0 soft reset x x

1 volume left 9 signed int2 volume right 9 signed int3 clip left 16 signed int4 clip right 16 signed int5 window position 4 unsigned int

operaties geschreven als broadcast boodschapx x x x

Tabel 4.9: Operaties van de Mixer, met hun digitale codering in het serieel protocol.

Tabel 4.9 somt de commando’s van de mixer op. Ook deze module is ongevoeligaan nootboodschappen. Verder is commando 5, bij alle andere modules het com-mando target, window position geworden.

4.5 Protocols

Deze sectie wil de boodschapstructuur tot op de bit tentoon spreiden. Niet min-der dan vijf protocols werden door de ontwerpers in het leven geroepen. Teneinde“spraakverwarring in bit-land” te vermijden dient dit onderdeel – veeleer dan alsonderhoudende lectuur – als een onontbeerlijk vademecum voor een actief ontwer-per47.Vooreerst is er de communicatie tussen de gebruiker en de software; deze wordt totstand gebracht met het patch protocol, het demo protocol en het MIDI protocol48.

47De auteurs hebben bij het schrijven van deze sectie een andere methodologie van compositiegehandhaafd. Waar andere secties trachtten een gevoel van continuıteit met vorige en volgendeonderdelen te creeren, wil deze sectie een op zich staand referentie-formulier zijn. Omwille van hetbelang van de protocols voor het ontwerp, hebben we de sectie in het corpus, en niet in appendixopgenomen.

48Het MIDI protocol werd hier niet opgenomen (daar de ontwerpers het in hun originele vormhandhaafden), doch wordt vermeld in Hoofdstuk 2, Sectie 2.2.

97

Vervolgens is er de communicatie tussen software en hardware, deze wordt verzorgddoor het PCI protocol. Intern hanteert de Fynth het serieel en het parallel protocol.

4.5.1 Patch Protocol

Het patch protocol stelt de gebruiker in staat om in relatief leesbare tekstuele vormparameters van de Fynth af te stellen. In strikt formele zin is het een overbodig pro-tocol, daar er een injectief verband bestaat tussen de commando’s in dit protocolen die van het PCI protocol. Zijn bestaansreden is dus alleen gebruiksgemak.Typisch worden in patchprotocol geschreven commando’s opgeslagen in een patchlist, een bestand in tekstformaat (e.g. patchlist.txt), dat in een keer ingelezen wordtdoor Hermes en integraal naar de hardware verzonden wordt. Een patch list legt deverbindingen tussen de verschillende modules vast, en geeft initialisatiewaarden meeaan elke module afzonderlijk. In muzikale zin definieert een patch list een instru-ment, dat speelklaar is. Door stockeren van patches in autonome bestanden wordtde gebruiker de mogelijkheid geboden een database van patch lists bij te houden ende Fynth naar eigen smaak te initialiseren.Een afzonderlijke patch boodschap heeft de in Tabel 4.10 geschematiseerde vorm.Het commando is steeds 20 ASCII karakters breed, en heeft vier velden: module, nr,op en value, gescheiden door arbitraire ASCII-karakters op posities 12 en 5.

module nr op value

19 14 13 11 6 4 0

Tabel 4.10: Standaard opbouw van een boodschap in Fynth patch protocol.

Het veld module duidt de module aan die door het commando aangesprokenwordt. De interne modules, twaalf in aantal, krijgen in dit protocol een zes lettersbrede woordbenaming, die te zien is in Tabel 4.11. Ter referentie wordt in de laatstekolom ook al het getaladres in het PCI protocol (het protocol waarnaar vertaald zalworden) weergegeven.Het veld nr geeft het implementatienummer in hexadecimale notatie aan, en heeftwaarden tussen ’0’ en ’F’. Het veld op geeft de operatie aan die de module moetuitvoeren; in dit protocol hebben ook de operaties alle een zes letters brede wo-ordbenaming, te vinden in Tabel 4.12. Tenslotte beslaat het laatste veld, value,vijf ASCII karakters, elk een hexadecimale waarde van ’0’ tot ’F’ uitdrukkend. Ditstaat in principe toe waarden mee te geven tot 24 bit breed, het werkelijke maximumbedraagt 18 bit49.

49Men notere dat de bitbreedte van de waarde volledig afhangt van de operatie, en de maximaal

98

modulenaam modulenaam module-adresonder woorden in patchprotocol in PCI protocol

sencoder sencod 0x x 1

square square 2sawtooth sawtth 3triangle triang 4

sine singen 5noise noise 6

custom custom 7ADSR ADSR 8filter filter 9

delayline delay 10middleman midman 11

x x 12mixer mixer 13

x x 14x x 15

Tabel 4.11: Benaming onder woorden van de verschillende modules, en hun benaming in hetPatch protocol en het PCI protocol

Tenslotte vermelden we nog het bestaan van het bestand patchlist.txt, beschik-baar in de met het project meegeleverde code. Het gaat hier om een exhaustievelijst van alle commando’s van het patch protocol, het is m.a.w. de opeenstapelingvan alle commando’s waarover de gebruiker beschikt om de Fynth te programmerenvoor patchdoeleinden. De gebruiker kan deze lijst als een invullijst zien, en mag alleregels die voor zijn specifieke patch overbodig zijn laten staan, daar ongewijzigderegels de modules als ongebruikt initialiseren.

4.5.2 Demo Protocol

Het demo protocol is een klein en bescheiden protocol, dat in het leven geroepen werdom ook zonder een MIDI-keyboard muziekstukken te laten horen. Het demo protocollaat toe een partituur te noteren en op te slaan in tekstformaat, en vervolgenste verzenden met Hermes. Het resultaat is een aanvaardbare weergave50 van departituur door de Fynth.

voorkomende bitbreedte in operaties 18 bit is, de minimale 1 bit. De waarde wordt rechts uitgelijnd,en overtollige bits worden meegegeven als nullen. Het is aan de gebruiker om toe te zien over decorrecte invulling van de waarde, zo dat aan het bereik voldaan is. Al het voorgaande resulteerttenslotte in commando’s met een herkenbaar uiterlijk, e.g. square0 volume 1FFFF. Voor eenopsomming van de betekenis en argumenten van alle operaties verwijzen we naar Hoofdstuk 4.

50Hermes interpreteert de partituur in een “nulde orde benadering”: er wordt verondersteld datde verzending van een boodschap naar de hardware verwaarloosbaar kort verloopt, een onderstellingdie voor problemen zorgt bij varierend notendebiet. De variabelen drempel en msg minimum uit de

99

onder woorden patchprotocol PCI protocolnaam module operatie operatie operatiealle modules soft reset sreset 0

alle behalve mixer target address on parallel bus target 101serial encoder unitone uniton 001

alle oscillatoren volume volume 001sync/mod and control/sound synctr 010

frequency freque 011offset freque 100

square duty cycle dutcyc 110ADSR attack increment attack 001

decay decrement decay 010sustain level sustai 011

release decrement releas 100filter cut-off frequency cutoff 001

resonance resona 010bandwidth bwidth 011

delay line volume left voluml 001volume right volumr 010delay depth ddepth 011echo factor echofa 100

echo/delay depth selector echdep 110mixer volume left voluml 001

volume right volumr 010clipping value left clipvl 011clipping value right clipvr 100window position window 101

broadcast glissando x 01note off x 10note on x 11

Tabel 4.12: Benaming onder woorden van de verschillende commando’s, hun benaming in hetpatch protocol, en hun codering in het PCI protocol

Commando’s in het demo protocol hebben als enige doel (van tijdstip voorziene)nootinformatie door te geven: hetzij noten die actief worden (de MIDI “note on”boodschap, “velocity” verschillend van nul), hetzij noten die passief worden (deMIDI “note on” boodschap, “velocity” nul). Ze zijn steeds van de vorm vermeld inTabel 4.13. Elk vakje stelt een ASCII karakter voor, de opengelaten vakjes 9, 8, 5 en2 zijn willekeurige karakters. Het eerste veld, time, geeft de tijdspositie aan, in ms,decimaal genoteerd. Het tweede veld, raw MIDI, geeft in zes hexadecimaal genoteerdekarakters een MIDI boodschap door. Zoals vermeld worden alleen MIDI “Note On”boodschappen ondersteund, op een willekeurig kanaal51.

Hermes C-code verhelpen hieraan gedeeltelijk, door betekenisloze boodschappen tussendoor meete verzenden, en zo het boodschappendebiet constanter te houden. Deze oplossingen werken alleslechts gedeeltelijk; echt soelaas vindt de gebruiker door de Fynth aan te sturen met een MIDIkeyboard, en van daaruit demo’s te verzenden.

51meer over MIDI in Hoofdstuk 2, Sectie 2.2

100

In de meegeleverde code zit ook een demo-bestand, daan sdd.csv, dat met Hermeskan weergegeven worden op de Fynth, met een patch naar keuze.

time raw MIDI

14 10 7 6 4 3 1 0

Tabel 4.13: Standaard opbouw van een boodschap in Fynth demo protocol.

4.5.3 PCI Protocol

target op impl.nr. value and zeroes1 131 30 27 26 24 23 20 19 1 0

Tabel 4.14: Standaard opbouw van een boodschap in zowel Fynth PCI protocol als Fynth serieelprotocol.

Het Fynth PCI protocol legt het formaat van de boodschappen vast, zoals zeverzonden worden over de PCI bus. De boodschappen worden op de PCI bus gezetdoor de software, en zijn of vertaalde versies van MIDI boodschappen, of bood-schappen van het programma Hermes zelf. Alle worden in de Fynth geınterpreteerddoor de module sencoder, en daar vertaald naar het (overigens weinig verschillend)serieel protocol. Het PCI protocol is een fundamenteel protocol, in de zin dat hetde unieke brug vormt tussen software en hardware.In Tabel 4.14 wordt de standaardopbouw van een PCI boodschap weergegeven. Elkeboodschap is precies 32 bit lang, elk vakje bevat een bit. De boodschap start eneindigt bij conventie met bitwaarde 1. Men notere direct dat op deze algemenevorm uitzonderingen zijn: broadcast messages hebben slechts een 2 bit breed veldop, oscillatoren hebben slechts een 1 bit breed veld impl.nr. (omdat er slechts tweeimplementaties zijn) en de mixer heeft het veld impl.nr. niet. Al deze uitzonderingenresulteren in de dopschuiving naar rechts van alle erop volgende velden.Het veld target doelt op de module waarheen we de boodschap wensen te zenden, enbeslaat vier bit. De juiste adressering gebeurt met de zogenaamde “Module-adressenop de PCI Bus” en is te vinden in de eerste twee kolommen van Tabel 4.15. Het veldop encodeert in drie bits het commando, dat module-afhankelijk is en weergegevenwordt in Tabel 4.12. Het veld impl.nr. beslaat in de regel 4 bits, en vertelt voor welkeimplementatie van de module het commando bestemd is. Het laatste veld, value enzeroes, bevat de waarde die meegegeven wordt aan het commando. De bitbreedtevan de waarde is afhankelijk van de aard van het commando, eventueel resterendebits tussen de waarde en de stopbit worden opgevuld met nullen.Het PCI protocol staat toe zowel patch-instellingen te wijzigen, als noten aan, resp.

101

af te zetten. Hermes staat in voor de verzending van de commando’s, en respecteerteen wachttijd van meer dan 50 µs na de verzending van elk commando52. Dit staatde Fynth toe alle commando’s serieel te verwerken.

Over het demoprotocol moet gezegd dat het nut niet te onderschatten is: bij hetontvlooien gebruikten de ontwerpers steeds weer een demo als test.

PCI bus seriele bus parallelle busmodulenaam adres modulenaam adres modulenaam adres

sencoder 0 x drain 0x x x

square 2 square 2 square 2sawtooth 3 sawtooth 3 sawtooth 3triangle 4 triangle 4 triangle 4

sine 5 sine 5 sine 5noise 6 noise 6 noise 6

custom 7 custom 7 custom 7ADSR 8 ADSR 8 ADSR 8filter 9 filter 9 filter 9

delayline 10 delayline 10 delayline 10middleman 11 middleman 11 middleman input 1 11

x x middleman input 2 12mixer 13 mixer 13 mixer left 13

x x mixer right 14broadcast 15 broadcast 15 x

Tabel 4.15: Module-adressen op seriele en parallelle bus, in decimale notatie

4.5.4 Serieel Protocol

Na de verzending over de PCI bus worden de boodschappen intern alle toegeleverdaan de module sencoder, de seriele encoder. Deze module treedt op als controller inde hardware, en is verbonden met alle andere modules via een seriele lijn, waaropalleen hij spreekt, en alle andere modules luisteren. De sencoder geeft de ontvangenboodschappen zonder uitzondering door, maar doet een conversie van de boodschap-pen van PCI protocol naar Serieel Protocol, alvorens ze , bit voor bit (a rato van desnelle klok), op de seriele bus te plaatsen.De conversie van PCI protocol naar Serieel Protocol heeft al bij al weinig om hetlijf. De schematische vorm blijft ongewijzigd de 32 bit brede van het PCI protocol(zie Tabel 4.14).De inkomende boodschappen worden alle ongewijzigd doorgegeven,op twee types na.

52Deze wachttijd respecteert een veilige marge. In de praktijk neemt de verwerking van com-mando’s gewoonlijk slechts 1 a 2 µs; de hoge marge is te wijten aan de lange tijdsduur van de softreset van de ADSR.

102

• De boodschappen, bestemd voor de seriele encoder zelf. Zij worden ter plekkegeınterpreteerd, en niet geconverteerd naar serieel protocol.

• De broadcast boodschappen of nootboodschappen. Deze worden, m.b.v. logicaen notentabel van de sencoder, vertaald naar serieel protocol.

– Voor de note on boodschappen betekent dit het toevoegen van 3 bit voorhet nootnummer, volgend op de frequentiewaarde in het veld value.

– Voor de note off boodschappen betekent dit het vervangen van de fre-quentiewaarde in het veld value door een 3 bit breed nootnummer.

– Voor de glissandowaarden betekent dit het vertalen van de gehele bood-schap naar een frequency offset boodschap, bestemd voor de oscillatoren.

4.5.5 Parallel Protocol

Het parallelle protocol verschilt sterk van alle andere, omdat het een andere bestaan-sreden heeft. Waar de voorgaande protocols alle dienden om hetzij afzonderlijkemodules hetzij de Fynth in zijn geheel te controleren, dient het Parallel Protocol omtussentijds berekende waarden door te geven. In de samenwerking van de modules,zijn alle modules (behalve sencoder) verbonden met elkaar via de parallelle bus. Hetparallel protocol dient om het formaat vast te legen, waarin te verwerken waardenbinnenkomen in de module, en verwerkte waarden de modules verlaten.Het algemeen schema van een boodschap in parallel protocol wordt weergegeven inTabel 4.16. De boodschap is 30 bit breed en heeft 5 velden. Het eerste en tweedeveld, target en impl.nr. vormen samen het doeladres op de parallelle bus. Dit is hetadres op de parallelle bus waarnaar precies een implementatie van een module naarluistert; een boodschap op de parallelle bus wordt dan ook steeds slechts door deene bestemmeling, aangegeven door de eerste 8 bit, ontvangen. Het derde veld, c/sgeeft aan of de in de boodschap meegegeven waarde het doel heeft de bestemmelingte controleren, of in tegendeel een “sound value”, een geluidswaarde is. In het eerstegeval staat dit veld op 1, in het andere op 0. Het veld note nr. geeft vervolgens hetnootnummer aan, waarop de boodschap betrekking heeft. Het laatste veld, value,geeft de te verwerken waarde aan, en is steeds 18 bit breed53.

Dit besluit het onderdeel over protocols. Als slotopmerking dient nog toegevoegd datdit onderdeel, ofschoon op zich technisch, heel determinerend is voor de grondslagenvan het ontwerp: digitale abstractie, en modulariteit. Dit onderdeel is het enige datvoor de ontwerpers noodzakelijk was om altijd bij de hand te hebben, of het nu gingom het hardware-ontwerp, muzikaal abstracte redeneringen, software-ontwerp... Deprotocols kenden gaandeweg een zevental versies en moesten voortdurend bijgewerkt

53Er wordt dus niet aangevuld met nullen, zoals in het serieel protocol het geval was.

103

op papier om spraakverwarring te vermijden. Ze bakenen het strijdterrein af, en zijnhet uitgekiende evenwicht tussen controleerbaarheid en flexibiliteit54.

target impl.nr. c/s note nr. value

29 26 25 22 21 20 18 17 0

Tabel 4.16: Standaard opbouw van een boodschap in Fynth parallel protocol.

4.6 De Persing

Helaas komt bij programmeren van hardware veel meer kijken dan software. Wan-neer het ganse project succesvol door de testbank is gedraaid, zijn de ontwerpersimmers nog helemaal niet zeker of het ontwerp ongehavend door de toolchain raakt.Zelfs dan is men niet zeker of de reele tests het gewenste resultaat zullen geven.

In de simuleeromgeving is het ontwerp op een aantal vlakken vereenvoudigd.Ten eerste is de notie van “eindige middelen” afwezig. Denkt men specifiek aan deStratix chip, dan weet men dat er acht en juist acht DSP blokken fysisch aanwezigzijn. In het geval men 8 36 x 36 bits vermenigvuldigers wil gebruiken, dan is dadelijkde ganse voorraad op. Hetzelfde geldt voor het gedistribueerd geheugen. En natu-urlijk is ook het aantal LAB’s beperkt. Bij de implementatie moet men dus steedsrekening houden met de harde eis dat het ontwerp op het kaartje moet passen.Ten tweede gebruikt de simulatie een beperkt tijdsmodel, en wordt de dimensieruimte niet in simulaties opgenomen. Er is, toegegeven, een voorziening om signaleneen zeker tijdsgedrag mee te geven. Evenwel kan de simulatie onmogelijk rekeninghouden met de klokverschuiving die veroorzaakt wordt doordat de ene module aliets verder van de klok verwijderd is dan een andere module. Ook vertraging dieontstaat doordat het signaal door een multiplexer wordt geloodst, blijft buiten hetsoftwaremodel.Zeker bij dit laatste moesten de ontwerpers zich onvoorwaardelijk neerleggen. Deomgeving kan nog geen rekening houden met dit soort tijdseffecten, daar de uitein-delijke schikking van de modules nog niet gekend is.

Deze oversimplifieringen in simulaties beloven problemen – na een simulatie isslechts de helft van de weg afgelegd. De andere helft is het malen van de code door

54Een goed voorbeeld hiervan is de aanwezigheid van afzonderlijke initialisatiecommando’s inoudere versies van het protocol. Het argument voor de invoering was de controleerbaarheid. Gaan-deweg werd de overbodigheid duidelijk, en werd de idee van initialisatie zelfs een doorn in het oogvan de flexibiliteit, die pas geleidelijk aan door de ontwerpers in zijn brede vorm werd onderkend.

104

de toolchain.Quartus II c© schotelt ons vier gangen voor.

• Analysis and Synthesis

• Fitter

• Assembler

• Timing Analyzer

Deze vier stappen conditioneren de verwerking van ons ontwerp, en hebben zo elkhun particulariteiten.

Analysis & Synthesis

De Analysis & Synthesis zorgt ervoor dat de code optimaal wordt omgevormd inregisters en combinatoriele logica. Hij informeert de ontwerpers over syntactischefouten in de code, zoals “Non-synthesizable code” of “Wrongly assigned Pins”. Hijdoet er slechts een 10 minuten over, en de remedies zijn over het algemeen eenvoudig.

Fitter

De eerste rechter is de Fitter. De naam zelf verklapt eigenlijk al dat bij deze stapspecifiek wordt nagegaan of het ontwerp al dan niet in de beschikbare chip past. Ishet antwoord negatief, een devies: herbeginnen. De hercompilatie neemt al gauween uur.

Assembler

In een enkele minuut berekent de Assembler welke programmering de chip te wachtenstaat. Het resultaat wordt gestockeerd in een sof-file. Deze gang genereert nooitfouten.

Timing Analyzer

We zijn gekomen aan de laatste stap. De plaats van alle signalen op de chip be-kend, en de software is in staat om alle vertragingen te weten. De Timing Ana-lyser berekent deze in een minuutje. Hij informeert de ontwerpers met “criticalwarnings”, waaronder de (aan de ontwerpers reeds veel te vertrouwde) “Timing Re-quirements were not met.”. Voor de Fynth zijn een aantal optimalisatietechniekenonderzocht om aan de strenge eisen van de busarbitrage te kunnen voldoen. Zo zijn

105

het geheugen en de vermenigvuldigers geklokt aan 133.33 MHz, het viervoud vande algemene 33 MHz klok. Dat heeft helemaal geen grote gevolgen bij een simulatie- buiten het feit dat alles wat rapper gaat - maar zeer zeker voor de analyse vande tijdsvereisten. Gelukkig is die 133 MHz afgeleid uit de 33 MHz en hoeven weniet al te streng rekening te houden met de overgang van het ene naar het andereklokdomein. Maar aan de andere kant kan men zonder veel geduld het ontwerp nietdoen slagen in deze test. Men heeft immers nood aan een faseverschuiving, zodatde vereiste setup-tijden gerespecteerd worden. Bovendien gebruiken al de modulesvan de Fynth elk hun stukje van het gedistribueerd geheugen, waardoor opnieuwverschillende klokverschuivingen gelden voor verschillende blokjes.

Om die reden zijn 3 verschillende faseverschuivingen toegepast, alle drie voordezelfde vermenigvuldigingsklok van 133 MHz, die de Fitter meer vrijheid geven omde blokjes te schikken. Trial and error is de boodschap.De strategie gaat als volgt: zijn de timing requirements niet gehaald, verschuif dande fase van een van de lussen dan over enkele graden (of minder), druk op “compile”,en wacht een zestigtal minuten om te weten of je gok goed zat. Om het volledigeontwerp in te passen herhaalden de ontwerpers deze procedure zeven dagen lang.

106

Hoofdstuk 5

Extensies & Conclusie

“Nothing really ends.”dEUS

Dit hoofdstuk dient drie doeleinden. Vooreerst scheppen de auteurs een beeld vande stand van zaken: hoe ver kwamen de ontwerpers met de beoogde opdracht? Watleverden de tests? Wat blijft ongetest?Zoals het een jong ontwerp betaamt, pretendeert het niet foutloos te zijn, maarkrijgt integendeel een opsomming mee van zijn kinderziektes. Zulks is opgesomd in“bugs”.Ten tweede geeft het hoofdstuk een beeld op mogelijke extensies. Door zelf aan debasis te staan van de Fynth, gingen de ontwerpers al gauw aan het dromen overkleine en grote uitbreidingen. Zo schetsen ze enkele mogelijkheden, en besprekenkort (naar hun bescheiden oordeel) de haalbaarheid van elk.Ten laatste formuleren de ontwerpers een besluit.

5.1 Stand Van Zaken

Waar staat de effectieve implementatie van de Fynth? Zoals het gaat met hardware-ontwerp wordt het concept op een dag geboren uit het brein van de ontwerpers, maarlaat het moment van beluistering vanuit de hardware maanden op zich wachten1.Ook op het moment van schrijven van dit document2 zijn de ontwerpers nog aanhet testen. Vraag is wat al werkt.

1De allereerste noot, effectief komende vanuit de chip, geproduceerd door de square en gaandenaar de mixer, klonk pas op 17 mei 2004. Dit is veel later dan de ontwerpers hoopten.

2vandaag, 25 juni 2004

107

5.1.1 Versie 1.0

Wat betreft hardware testen delen we de functionaliteiten op in drie deelgroepen: zijdie met zekerheid werken (na uitgebreid testen), zij die zouden moeten werken (maarnog onvoldoende getest werden) en zij die met zekerheid mankementen vertonen(bugs).

Wat Werkt

Wat werkt zijn volgende functionaliteiten.

• de module chronos

• de module sencoder (na ettelijke debugrondes): alle functionaliteiten behalvede commando’s offset en frequency

• de module deltasigma3

• de module square, als ongemoduleerde sound oscillator

• idem als square voor alle andere oscillatoren: sawtooth, triangle, sine en noise

• ongemoduleerde ADSR

• de module middleman

• de module mixer

• de module delay line, in ongemoduleerde werking

• de module filter, in ongemoduleerde werking

Wat Zou Moeten Werken

Volgende functionaliteiten werden nog onvoldoende getest om uitsluitsel te bieden,doch leverden positief resultaat bij simulaties.

• de module sencoder in unitone glissando modus, en bij de operaties offset enfrequency

• de module square: als extern gemoduleerde sound oscillator; als control oscil-lator

• idem als square voor alle andere oscillatoren: sawtooth, triangle, sine en noise

• extern gemoduleerde ADSR

3Deze werd ons in werkende staat overhandigd door Ir. Benjamin Schrauwen, waarvoor dank.

108

Bugs

Vermelden we hier ook een probleem.Af en toe komt een note on of note off commando niet door. Dit gebeurt ongeveereen keer op 10 als we een test met een demo doen, in cijfers betekent dat dat eennootboodschap op 5000 verloren gaat. De oorzaak is de ontwerpers onbekend.

Software

Besluiten we met de stand van zaken wat betreft de software. Het LinuxprogrammaHermes

• is operationeel

• is in staat demo’s te draaien

• ondersteunt MIDI

• vertaalt patches van patch protocol naar PCI protocol en verstuurt ze

• verstuurt individuele PCI boodschappen

• staat toe particuliere tuning (zoals stemmingen) aan te brengen

• staat noteninput vanuit het PC keyboard toe

• heeft geen aan de ontwerpers bekende bugs

• staat open voor uitbreiding van zijn C-code...

Wat nog ontbreekt, is de intelligentie om de opdrachten frequency, offset en glissandote ondersteunen. Dit is een spijtige zaak, daar de ontwerpers deze functionaliteitenin de laatste ontwerpsdagen toch nog aan de praat kregen in de hardware. Deontwerpers hopen dat het door anderen kan uitgeprobeerd worden...

5.2 Toekomstmuziek

In deze sectie komen mogelijke uitbreidingen, zoals ze gezien worden door de ont-werpers, aan bod. Uiteraard is deze lijst een smaak-getinte opsomming, die veelgoede alternatieven onbesproken laat.

109

5.2.1 Partieel Herconfigureren

De mogelijkheden van partiele herconfiguratie van de hardware spreken tot de ver-beelding.In Hoofdstuk 4, Subsectie 4.1.8, werd reeds aangehaald waarop we doelen. De ont-werpers gingen al even door op de diverse denkpistes, en kwamen op het volgendeuit.Het Stratix Development Board biedt een “Remote Configuration Mode”. Dievoorziet een “page mode feature”, die toestaat de chip heel snel te herconfigure-ren. De ontwerpers verdiepten zich in de Stratix Manual, en leidden daaruit af dathet mogelijk moet zijn verschillende “sof-files4” in het kaartgeheugen te stockeren,en relatief vlot te wisselen van programmering.Daar de onwerpers dit niet in de praktijk uitprobeerden, zeggen ze het volgendemet voorbehoud: we menen dat het niet mogelijk is de chip te herconfigureren,zonder dat het geluid wegvalt. De tijd, nodig om de chip te herprogrammeren, ligtvermoedelijk te hoog5. Indien dit zo is, is het een streep door de rekening van demeest aantrekkelijkste vorm van herconfiguratie: die waarbij het geluid onvermin-derd doorspeelt.

Toch resten er nog aantrekkelijke uitbreidingen aan de herconfigureerbaarheid.Zo is het denkbaar dat de gebruiker zijn gewenste patch te kennen geeft, en veelmeer vrijheid heeft bij het kiezen van zijn implementaties, in de zin dat hij er meervan elk moduletype ter beschikking heeft. Zodra hij de Fynth opdraagt de patchin te laden, begint de software met een herprogrammering van de chip, m.n. diechipconfiguratie die veel implementaties voorziet van de soort, waarvan de gebruikerer veel vraagt. Vervolgens worden de patch-verbindingen gelegd op de werkwijze diemomenteel gangbaar is bij de Fynth.

Deze uitbreiding biedt de gebruiker in muzikale zin enkele vrijheden die nog nietaanwezig zijn in het huidige ontwerp. De voornaamste vrijheid is misschien welde mogelijkheid om aan additieve synthese te doen: het volstaat dat de gebruikereen chipconfiguratie krijgt met een hele resem aan sinusgeneratoren (en voor derest quasi niets), opdat hij zijn gang kan gaan in de creatie van een additief gesyn-thetiseerd instrument.

4“.sof” is de extensie van bestanden die de programmering van de gehele chip herbergen.5Ware deze tijd echt laag, dan worden andere scenario’s terug denkbaar, waarin software de

chip herprogrammeert, en vervolgens vliegensvlug uit een ongewist geheugen de spelende notenheractiveert in de nieuw geconfigureerde chip.

110

5.2.2 MIDI Rechtoe Rechtaan

De Stratix PCI kaart is op zich voorzien van talrijke input pinnen. Anderzijds ishet MIDI protocol een welomlijnd en overzichtelijk protocol, dat tot op het bot kandoorgrond worden. Een mooie uitbreiding ware het MIDI keyboard rechtstreeks aande pinnen van de Stratix kaart te hangen. De decodering van MIDI boodschappenzou dan integraal deel worden van het hardware-ontwerp.

Dit beeld wordt extra verleidelijk indien er een methode van initialisatie zoutoegepast worden, die geen nood heeft aan software6. In dat geval zou er immersgeen nood meer zijn aan de PCI input7.De kaart kan dan werken met een adaptorvoeding, en kan de ontvangende PC ver-laten. De kaart kan in een doos gemonteerd worden, en fungeren als een volwaardigeMIDI machine: input is een MIDI-signaal (en voeding), output is een stereo analogeaudio-uitgang. Dit scenario zou de Fynth in zijn autonomie aanschouwelijk maken:hardware-ontwerp, zonder de nood aan een ontvangende PC.

5.2.3 Op een Xilinx chip...

Indien we dit ontwerp zouden implementeren op een Xilinx-chip, dan levert dit directnieuwe vrijheden op. De belangrijkste is waarschijnlijk de herconfigureerbaarheidvan de chip zelf. Hier zou een volgende strategie merkwaardige resultaten kunnenopleveren...

Scheiden we de parallelle encoder/decoder en de seriele decoder van elke muziek-module van de rest van de module, dan bekomen we nieuwe vrijheden. De boven-vermelde twee vormen een interface-gedeelte, dat verplicht in de hardware aanwezigblijft. Deze interface-blokken hebben elk hun eigen adres op de bus.Wat aan deze interface hangt, wordt variabel. Het staat de gebruiker vrij om anderemuziekmodules in te laden in de chip, en via de interface te connecteren, eventueelat runtime.Belangrijk probleem aan deze strategie is het formaat van de blokken. De oscilla-toren, ADSR, middleman en delay line hebben vergelijkbare groottes; de filter isevenwel ongeveer drie keer groter. Wie soepel wil wisselen van module moet zekerop het gebied van schikking een grondig onderzoek doorvoeren...

6Nog een struikelblok dient vermeld: de conversietabel van nootnummer naar frequentie zit inde huidige versie van de Fynth nog in software, en moet naar de hardware, als onderdeel van desencoder, indien men de software wil loskoppelen van de hardware.

7Een user pushbutton kan bv. de Fynth initialiseren met een ingebakken patchlijst. De com-mando’s worden dan gestockeerd in e.g. een MegaRam blok. Dit zou kunnen gecombineerd wordenmet een patchlist-toggle met behulp van het MIDI keyboard.

111

5.2.4 Verdere Alternatieven

In vogelvlucht sommen we nog enkele andere mogelijkheden op.

Grotere woordbreedte: Typische vaste komma implementaties werken met in-terne representatie van 24 bit (na vermenigvuldiging 48 bit). Dit zou degeluidskwaliteit, en de frequentieresolutie ten goede komen. Evenwel eenwaarschuwing: de DSP-blokken maken intern direct de stap naar 36 bit wo-ordbreedte!

Willekeurige Golfvorm: Dit levert een mooie uitbreiding. Bedoeld wordt eenoscillator, die in plaats van een golfvorm met vaste periode, een willekeurigedoor de gebruiker ingegeven sample afspeelt. De stockering van een dergelijkesample vergt, door zijn omvang, het gebruik van het DDR-geheugen. HetDDR-geheugen is totnogtoe onbenut in het ontwerp.

Aanslaggevoeligheid: Deze uitbreiding zou de Fynth gevoelig maken aan de krachtwaarmee een muzikant de toetsen indrukt. Meer bepaald zou de kracht hetvolume van de oscillatoren kunnen moduleren, en zo toestaan harde (forte) enzachte (piano) passages te spelen. Een dergelijke uitbreiding maakt de Fynthveel aantrekkelijker voor de toetsenman, en is haalbaar.

(Meerstemmige) Partituurinlezing: Deze implementatie omvat zowel softwareals hardware. Ze stelt de gebruiker in staat een MIDI bestand, wijd verbreidbestandsformaat op het web, door de Fynth te laten weergeven. Daar dezebestanden overwegend polyfoon zijn, en meerdere instrumenten vergen, zouin hardware aan elk instrument een verschillende patch kunnen verbondenworden. Elk van deze patches zou dan onafhankelijk en simultaan een deel vande partituur weergeven, en zo een popgroep, tot een klein orkest simuleren.Deze implementatie is aantrekkelijk, en vormt een niet triviale doch haalbareuitdaging.

Foutloze harmonischen: De mogelijke implementatie van de oscillatoren als wave-table generatoren, werd reeds aangehaald in Hoofdstuk 2, Subsectie 2.3.1. Hetvormt, net als grotere woordbreedte, een verbetering van de geluidskwaliteit.De ontwerpers willen er hier op wijzen dat zij de aangehaalde oplossing nergensin de literatuur terugvonden, en dit misschien wel de eerste implementatie vaneen dergelijke oplossing ooit zou kunnen zijn. Het is zonder meer wenselijkom, alvorens dit soort oplossing door te voeren, eerst het grensnut te bestu-deren, best tot en met simulatie van een typische compositie, met een waardevoor de gemiddelde SNR-winst als resultaat. Het is mogelijk dat deze winstheel laag uitvalt, en de uitbreiding nutteloos verklaart; in het andere gevalkan het ontwerp zich na uitbreiding beroepen op een “nog kwaliteitsvolleregeluidssynthese”.

112

Geparametriseerde dynamische herconfigureerbaarheid: De geschetste dy-namische herconfiguurbaarheid uit Hoofdstuk 4 kan uitgebreid via parametri-satie. I.p.v. zo snel mogelijk van de ene patch naar de andere te switchen,zou men de gebruiker kunnen toestaan om, gedurende een door hem ingegevenperiode, te glijden van een patch naar een andere.

Filosofie: De woorden van professor Uncini8 citerend, “moet elke synthesizer eenfilosofie hebben”. In zijn opinie moeten moderne synthesizers volwaardige e-mulaties bieden van “de cult-legendes”, zoals Minimoog en Arp Odyssey, enzich vervolgens onderscheiden door nog beter te presteren op gebied van mo-gelijkheden.Uiteraard is zijn betoog eerder door synthesizer-ontwerp dan door hardware--ontwerp ingegeven; niettemin menen de ontwerpers dat de Fynth een uitge-bouwde basis biedt om er een emulatie op uit te bouwen. Door het aanzienlijkdeel software dat hierbij komt kijken, is dit evenwel geen typische uitbreid-ing voor een hardware-ontwerp. Het vormt een mooie opdracht als software-implementatie.

Efficientie Door modules als chronos te parametriseren, zou het denkbaar wordendat niet gebruikte bus-enables9 vrijkomen voor “behoeftige modules”. Dit zouleiden tot een verder integratie van de patch-intelligentie in de hardware. Dezelaatste huist nu nog grotendeels in de software. Een andere denkpiste warehet aantal noten te parametriseren. Momenteel is het aantal noten acht, eentypischer getal in polyfone toepassingen is 16. Een gebruiker zou e.g. tot 16noten kunnen gaan, indien zijn patch voldoende eenvoudig blijft.

5.3 Besluit

5.3.1 Strategieen

Zoals zo vaak in het leven is ook hardware programmeren iets dat men al doendeleert. De chip kwam de ontwerpers initieel voor als een mystieke, te onderwerpenlabyrinth. Zij stelden vast hoe de black box zich, om voor hen onaanwijsbare re-denen, ook door hen, onwetenden, liet programmeren. Achteraf begrepen ze hoeeenvoudig het kan zijn kleine ontwerpen in een chip te stoppen, en hoe moeilijk hetkan worden voor grote ontwerpen.

8Professor Uncini is professor aan universiteit “La Sapienza” te Rome. Hij doceert er “Theorievan Audiosignalen”. Hij is verbonden aan IEEE, is actief in de synthesizerwereld en organiseertjaarlijks een workshop rond elektronische muziek te Rome. Hij was ons van grote hulp met zijn inervaring gewortelde advies.

9t.t.z. bus-enables die uitgedeeld worden aan modules, die geen rol spelen in de huidige patch

113

De onwerpers willen benadrukken hoe vele initieel vage problemen en bugs zichna een tijd vertaalden in:

• het herwerken van een protocol, of het uitwerken van een extra protocol

• het uitdenken van nieuwe woordenschat, om uitzonderingsgevallen te kunnenduiden

• het (her-)bedenken van de proces-verantwoordelijkheden

• het restringeren van de interproces-communicatie

• het orthogonaliseren van werkelijk alle geheugentoegangen

Globaal genomen bleek, zeker na het debuggen, het bemeesteren van meerdere notenhet meest complexe probleem. Binnen het ontwerp zijn op twee gebieden meta-structuren aangebracht in de hardware:

• implementaties als deelverzamelingen van modules

• enkele-noot-weergave als deelverzameling van een implementatie

Hoewel de behandeling van deze uitbreidingen conceptueel vergelijkbaar is, bleekde implementering in hardware totaal verschillend, en vergde steeds weer nieuwe,andere oplossingen.

5.3.2 Nooit Rond

De Fynth bleek een stevige kluif. Nooit tevoren hadden de ontwerpers zich verdieptin een opdracht waar werkelijk geen eind aan komt. Zoals het een goed uitgeschreventhesisonderwerp betaamt, geven de uitdenkers de denkpistes aan, en ontmoeten deontwerpers zelf de grenzen. Zonder uitzondering waren zijzelf het, die zich moestenbeknotten in hun ambitie, als weer een nieuwe weg zichtbaar werd. Het eerste gevoelwas steeds opnieuw “The Sky is the Limit”. Af en toe wisten ze dit enthousiasmete temperen onder het motto: “Eerst zorgen dat de rest werkt”. Om toch een uit-laatklep te hebben voor onze ideeen, namen we Sectie 5.2 op. De Fynth levert deontwerpers vele mogelijke, en enkele effectieve implementaties.

De ontwerpers menen dat ze met de Fynth een dynamisch huwelijk hebben totstand gebracht: de jonge wereld van de digitale audio, met de niet minder jongevan FPGA-onwerp. Het ontwerp bleek zeer levensvatbaar te zijn, en werkt effectieftot in de hardware. Het is de stellige hoop van de ontwerpers dat dit werk verdergroeit, en in handen van een opvolger-ontwerper een volgende leven krijgt.

114

Bijlage A

Fynth - The Specs

A.1 Technical Information

Sampling Rate (in kHz): approx. 32kHz1

Number of Output Channels: 2

Number of Notes: 8

Word Length of Output (in bit): 16

Word Length of Internal Representation (in bit): 18

Internal Number Representation: Fixed Point

Data Input Medium: PCI bus, 33MHz

Keyboard Input Standard: MIDI2

A.2 MIDI Implementation Chart

Fynth is receiving MIDI device only; recognised messages are

• note on (velocity ignored if not zero)

• note on velocity zero (= note off)

• note off

1that is, 31.990kHz, derived from 11042 . 1003 MHz

2through software conversation

115

Bijlage B

Integraal schema van de Fynth

116

Fig

uur

B.1

:A

lgem

een

over

zich

tva

nde

vers

chill

ende

mod

ules

.

117

Bijlage C

Quartus Report

C.1 De resultaten: algemeen

Flow Status Successful - Fri Jun 25 23:36:54 2004Revision Name stratix top

Top-Level Entity Name stratix topFamily StratixDevice EP1S25F1020C5

Total logic elements 19,009/25,660 (74 %)Total pins 151/207 (21 %)

Total memory bits 724,653/1,944,576 (37 %)DSP block 9-bit elements 38/80 (47 %)

Total PLLs 1/6 (16 %)Total DLLs 0/2 (0 %)

Tabel C.1: De Quartus II c© Flow Summary

Wat men in tabel C.1 ziet, is het algemene overzicht dat Quartus II c© ons geeftnadat de volledige toolchain doorlopen is.

In het bijzonder merken we op dat een groot aantal van de logische elementenis gebruikt. 74 % is niet niks, zeker niet voor een FPGA. Eigenlijk kan een FPGAenkel theoretisch 100 % worden benut. Het is beter om een beetje plaats over tehebben om de Fitter wat meer ademruimte te geven.Het percentage geheugengebruik is niet niks, maar liefst 37 %. Dat is veel als menweet dat er slechts een MegaRAM-blok is gebruikt. Het lege MegaRAM-blok kwamvan pas bij het gebruik van de SignalTap II Logic Analyser.Wat nog interessant is, is het feit dat de ontwerpers voldoende hadden met de kleinehelft van de DSP-blokken. Dat biedt de eventuele opvolgers de mogelijkheid om dewoordbreedte bij vermenigvuldigingen wat uit te breiden, maar opnieuw geeft hetaan de Fitter de vrijheid om de plaatsing uit te voeren.De ontwerpers hebben 1 PLL gebruikt om de 133 MHz klok te genereren.

118

C.2 De resultaten: timing

Type Slack Required TimeWorst-case tsu 0.706 ns 3.000 nsWorst-case tco 0.654 ns 6.000 nsWorst-case tpd N/A NoneWorst-case th 0.667 ns 0.000 ns

Worst-case minimum tco N/A NoneWorst-case minimum tpd N/A NoneClock setup: ’pll: clk2’ 0.045 ns 133.33 MHz (period 7.500 ns)Clock setup: ’pll: clk1’ 0.139 ns 133.33 MHz (period 7.500 ns)Clock setup: ’pll: clk0’ 0.216 ns 133.33 MHz (period 7.500 ns)

Clock setup: ’clk’ 0.481 ns 33.33 MHz (period 30.000 ns)

Tabel C.2: Het Timing analyser rapport

De setuptijd (tsu), de Worst case clock to output tijd (tco) en de Worst casehold tijd (tpd) zijn mooi gehaald.Het meeste geduld is opgeofferd aan het halen van de tijden voor de 133.33 MHz klok.Zoals eerder vermeld hebben de ontwerpers drie maal deze klok gegenereerd, maarsteeds met een andere fase vertraging (clk0: 153 graden, clk1: 122 graden en clk2:105 graden). Vanzelfsprekend zijn ze gestart met een 133 MHz klok, maar toen datniet bleek te voldoen zijn gaandeweg clk1 en clk2 ook ontstaan. Men merke op dater voor clk2 bv. weinig overschot is op de slack, ofte het verschil tussen de vereistetijden en de gehaalde tijden. Vele keren is het voorgevallen dat het cijfertje in hetrood werd afgebeeld en alles opnieuw moest door de Toolchain worden gehaald.

C.3 Het grondplan

In figuur C.1 is een typisch grondplan afgebeeld. We zien duidelijk dat heel watvan de chip is ingepalmd door de Fynth. Ook biedt de QuartusII c©-omgeving demogelijkheid om LogicLock -regio’s te voorzien. Dat zijn gebieden die de ontwerperskunnen aanduiden en verbinden met een bepaalde module. M.a.w. men kan zelf demodules plaatsen in de hardware. Door het gebruik van LogicLock -gebieden kunnende timing-vereisten beter gehaald worden. Daar is ook in de meegeleverde code voorde PCI-interface aan gedacht.Natuurlijk hebben ook de ontwerpers geprobeerd om met LogicLock -gebieden detijdsvereisten te halen. Maar het resultaat was niet beter, integendeel. Een veelprobatere oplossing was het introduceren van een extra 133.33 MHz klok! Het gevolgis dat de modules niet zoals in het algemeen schema, te vinden in Appendix B, mooirechthoekig zijn afgelijnd. In Figuur C.1 is e.g. in het blauw te zien waar desinusgenerator is neergeplant.

119

Figuur C.1: Het grondplan van de FPGA-chip. Onderaan (roze) zijn een aantal LogicLock -regio’s te zien voor de PCI interface. In het blauw ziet men waar de sinus-generator zichsitueert op de chip.

120

Bijlage D

Geheugenindeling

In deze appendix wordt de inhoud van modulegeheugens toegelicht. Een voor eengaan we de modules met geheugen af, in de hoop dat een opvolger-ontwerper ermeegediend is. Om historische redenen is dit geformuleerd in het engels.

D.1 Square

The info is stored in a M4K block, configured as 128x18bit. Each position (pos)has 18 bits available. It consists of an Implementation section, and a Note Section.This information is also valid for other oscillators.

D.1.1 Implementation Section

contains information that is valid for one entire implementation of the e.g. square

First implementation:Pos0 Target -Impl num- Duty Cycle - Sync - contr/soundBit: 17 14 13 .. 10 9 2 1 0Pos1 VolumeBit: 17 0

Second Implementation: same on Pos2 and 3

121

D.1.2 Note Section

contains information that is specific for each note

First Implementation, first note:Pos4 Phase (eight MSB’s)- zeroesBit: 17 10 9 0Pos5 FrequencyBit: 17 0Pos6 OffsetBit: 17 0Pos7 PhaseBit: 170Second Implementation, first note:same on Pos 8-11This is repeated for the eight notesImpl0 Note 0: 4-7 Impl1 Note 0: 8-11Impl0 Note 1: 12-15 Impl1 Note 1: 16-19Impl0 Note 2: 20-23 Impl1 Note 2: 24-27Impl0 Note 3: 28-31 Impl1 Note 3: 32-35Impl0 Note 4: 36-39 Impl1 Note 4: 40-43Impl0 Note 5: 44-47 Impl1 Note 5: 48-51Impl0 Note 6: 52-55 Impl1 Note 6: 56-59Impl0 Note 7: 60-63 Impl1 Note 7: 64-67

Space: Position 68 to 127 are empty

D.2 ADSR

supports 6 implementations

D.2.1 Implementation Section

Implementation section Pos0-7:Implementation 0Pos 0 attackincPos 1 decaydecPos 2 sustainPos 3 releasedec

122

Pos 4 sustainmodPos 5 target - impl info - control - zeroesBit: 17 14 13 10 9 8 ... 0Pos 6 /Pos 7 /

Pos8-15: Impl1; Pos16-23: Impl2; Pos24-31: Impl3; Pos32-39: Impl4; Pos40-47:Impl5;

D.2.2 Note section

Note section another m4k block

Pos 0 stage(17-16)Pos 1 phasePos 2 valuein

Impl0 Note1: 0 - 3 Impl0 Note5: 128 - 131Impl1 Note1: 4 - 7 Impl1 Note5: 132 - 135Impl2 Note1: 8 - 11 Impl2 Note5: 136 - 139Impl3 Note1: 12 - 15 Impl3 Note5: 140 - 143Impl4 Note1: 16 - 19 Impl4 Note5: 144 - 147Impl5 Note1: 20 - 23 Impl5 Note5: 148 - 151Impl0 Note2: 32 - 35 Impl0 Note6: 160 - 163Impl1 Note2: 36 - 39 Impl1 Note6: 164 - 167Impl2 Note2: 40 - 43 Impl2 Note6: 168 - 171Impl3 Note2: 44 - 47 Impl3 Note6: 172 - 175Impl4 Note2: 48 - 51 Impl4 Note6: 176 - 179Impl5 Note2: 52 - 55 Impl5 Note6: 180 - 183Impl0 Note3: 64 - 67 Impl0 Note7: 192 - 195Impl1 Note3: 68 - 71 Impl1 Note7: 196 - 199Impl2 Note3: 72 - 75 Impl2 Note7: 200 - 203Impl3 Note3: 76 - 79 Impl3 Note7: 204 - 207Impl4 Note3: 80 - 83 Impl4 Note7: 208 - 211Impl5 Note3: 84 - 87 Impl5 Note7: 212 - 215Impl0 Note4: 96 - 99 Impl0 Note8: 224 - 227Impl1 Note4: 100 - 103 Impl1 Note8: 228 - 231Impl2 Note4: 104 - 107 Impl2 Note8: 232 - 235Impl3 Note4: 108 - 111 Impl3 Note8: 236 - 239Impl4 Note4: 112 - 115 Impl4 Note8: 240 - 245Impl5 Note4: 116 - 119 Impl5 Note8: 246 - 250

123

D.3 Filter

supports 6 implementations

3 M4K blocks : one for first orderfilter, one for each second order filter

D.3.1 first order memory block

Implementation section

Pos0-7:Implementation 0Pos 0 cutoff frequencyPos 1 cutoff modulationPos 2 resonancePos 3 bandwidthPos 4 target - impl info - control - zeroesBit: 17 14 13 10 9 8 ... 0Pos 5 /Pos 6 /Pos 7 /

Pos8-15: Impl1; Pos16-23: Impl2; Pos24-31: Impl3; Pos32-39: Impl4; Pos40-47:Impl5;

Note section

pos 0 valuein pos 1 memory

Impl0 Note1: 128 - 129 Impl0 Note5: 192 - 193Impl1 Note1: 130 - 131 Impl1 Note5: 194 - 195Impl2 Note1: 132 - 133 Impl2 Note5: 196 - 197Impl3 Note1: 134 - 135 Impl3 Note5: 198 - 199Impl4 Note1: 136 - 137 Impl4 Note5: 200 - 201Impl5 Note1: 138 - 139 Impl5 Note5: 202 - 203Impl0 Note2: 144 - 145 Impl0 Note6: 208 - 209Impl1 Note2: 146 - 147 Impl1 Note6: 210 - 211

124

Impl2 Note2: 148 - 149 Impl2 Note6: 212 - 213Impl3 Note2: 150 - 151 Impl3 Note6: 214 - 215Impl4 Note2: 152 - 153 Impl4 Note6: 216 - 217Impl5 Note2: 154 - 155 Impl5 Note6: 218 - 219Impl0 Note3: 160 - 161 Impl0 Note7: 224 - 225Impl1 Note3: 162 - 163 Impl1 Note7: 226 - 227Impl2 Note3: 164 - 165 Impl2 Note7: 228 - 229Impl3 Note3: 166 - 167 Impl3 Note7: 230 - 231Impl4 Note3: 168 - 169 Impl4 Note7: 232 - 233Impl5 Note3: 170 - 171 Impl5 Note7: 234 - 235Impl0 Note4: 176 - 177 Impl0 Note8: 240 - 241Impl1 Note4: 178 - 179 Impl1 Note8: 242 - 243Impl2 Note4: 180 - 181 Impl2 Note8: 244 - 245Impl3 Note4: 182 - 183 Impl3 Note8: 246 - 247Impl4 Note4: 184 - 185 Impl4 Note8: 248 - 249Impl5 Note4: 186 - 187 Impl5 Note8: 250 - 251

D.3.2 second order memory block

In this blocks, only note information is stored.

pos 0 memory1 pos 1 memory2

Impl0 Note1: 0 - 1 Impl0 Note5: 64 - 65Impl1 Note1: 2 - 3 Impl1 Note5: 66 - 67Impl2 Note1: 4 - 5 Impl2 Note5: 68 - 69Impl3 Note1: 6 - 7 Impl3 Note5: 70 - 71Impl4 Note1: 8 - 9 Impl4 Note5: 72 - 73Impl5 Note1: 10 - 11 Impl5 Note5: 74 - 75Impl0 Note2: 16 - 17 Impl0 Note6: 80 - 81Impl1 Note2: 18 - 19 Impl1 Note6: 82 - 83Impl2 Note2: 20 - 21 Impl2 Note6: 84 - 85Impl3 Note2: 22 - 23 Impl3 Note6: 86 - 87Impl4 Note2: 24 - 25 Impl4 Note6: 88 - 89Impl5 Note2: 26 - 27 Impl5 Note6: 90 - 91Impl0 Note3: 32 - 33 Impl0 Note7: 96 - 97Impl1 Note3: 34 - 35 Impl1 Note7: 98 - 99Impl2 Note3: 36 - 37 Impl2 Note7: 100 - 101Impl3 Note3: 38 - 39 Impl3 Note7: 102 - 103Impl4 Note3: 40 - 41 Impl4 Note7: 104 - 105Impl5 Note3: 42 - 43 Impl5 Note7: 106 - 107

125

Impl0 Note4: 48 - 49 Impl0 Note8: 112 - 113Impl1 Note4: 50 - 51 Impl1 Note8: 114 - 115Impl2 Note4: 52 - 53 Impl2 Note8: 116 - 117Impl3 Note4: 54 - 55 Impl3 Note8: 118 - 119Impl4 Note4: 56 - 57 Impl4 Note8: 120 - 121Impl5 Note4: 58 - 59 Impl5 Note8: 122 - 123

D.4 Delay Line

supports 6 implementations1 M4K block and one M RAM block: the delayline itself

D.4.1 Implementation section

Pos0-7: Implementation 0Pos 0 controllers (17 downto 15)Pos 1 echofactorPos 2 volume leftPos 3 volume rightPos 4 delaydepthPos 5 delaymodPos 6 targetl - impl info l - controll - target - impl info r - controllBit: 17 14 13 10 9 8 5 4 1 0Pos 7 /

Pos8-15: Impl1; Pos16-23: Impl2; Pos24-31: Impl3; Pos32-39: Impl4; Pos40-47:Impl5;

D.4.2 Note section

pos 0 valuein

Impl0 Note1: 64 Impl0 Note5: 96Impl1 Note1: 65 Impl1 Note5: 97Impl2 Note1: 66 Impl2 Note5: 98Impl3 Note1: 67 Impl3 Note5: 99Impl4 Note1: 68 Impl4 Note5: 100

126

Impl5 Note1: 69 Impl5 Note5: 101Impl0 Note2: 72 Impl0 Note6: 104Impl1 Note2: 73 Impl1 Note6: 105Impl2 Note2: 74 Impl2 Note6: 106Impl3 Note2: 75 Impl3 Note6: 107Impl4 Note2: 76 Impl4 Note6: 108Impl5 Note2: 77 Impl5 Note6: 109Impl0 Note3: 80 Impl0 Note7: 112Impl1 Note3: 81 Impl1 Note7: 113Impl2 Note3: 82 Impl2 Note7: 114Impl3 Note3: 83 Impl3 Note7: 115Impl4 Note3: 84 Impl4 Note7: 116Impl5 Note3: 85 Impl5 Note7: 117Impl0 Note4: 88 Impl0 Note8: 120Impl1 Note4: 89 Impl1 Note8: 121Impl2 Note4: 90 Impl2 Note8: 122Impl3 Note4: 91 Impl3 Note8: 123Impl4 Note4: 92 Impl4 Note8: 124Impl5 Note4: 93 Impl5 Note8: 125

D.5 Middleman

supports 12 implementationsone M4K block

D.5.1 Implementation section

Pos 0: Implementation 0 target - impl info - control - zeroesPos 1: Implementation 1 target - impl info - control - zeroesPos 2: Implementation 2 target - impl info - control - zeroesPos 3: Implementation 3 target - impl info - control - zeroesPos 4: Implementation 4 target - impl info - control - zeroesPos 5: Implementation 5 target - impl info - control - zeroesPos 6: Implementation 6 target - impl info - control - zeroesPos 7: Implementation 7 target - impl info - control - zeroesPos 8: Implementation 8 target - impl info - control - zeroesPos 9: Implementation 9 target - impl info - control - zeroesPos 10: Implementation 10 target - impl info - control - zeroes

127

Pos 11: Implementation 11 target - impl info - control - zeroes

D.5.2 Note section

pos 256 valuein left pos 257 valuein right

Impl0 Note1: 256 - 257 Impl0 Note5: 384 - 385Impl1 Note1: 258 - 259 Impl1 Note5: 386 - 387Impl2 Note1: 260 - 261 Impl2 Note5: 388 - 389Impl3 Note1: 262 - 263 Impl3 Note5: 390 - 391Impl4 Note1: 264 - 265 Impl4 Note5: 392 - 393Impl5 Note1: 266 - 267 Impl5 Note5: 394 - 395Impl6 Note1: 268 - 269 Impl6 Note5: 396 - 397Impl7 Note1: 270 - 271 Impl7 Note5: 398 - 399Impl8 Note1: 272 - 273 Impl8 Note5: 400 - 401Impl9 Note1: 274 - 275 Impl9 Note5: 402 - 403Impl10 Note1: 276 - 277 Impl10 Note5: 404 - 405Impl11 Note1: 278 - 279 Impl11 Note5: 406 - 407Impl0 Note2: 288 - 289 Impl0 Note6: 416 - 417Impl1 Note2: 290 - 291 Impl1 Note6: 418 - 419Impl2 Note2: 292 - 293 Impl2 Note6: 420 - 421Impl3 Note2: 294 - 295 Impl3 Note6: 422 - 423Impl4 Note2: 296 - 297 Impl4 Note6: 424 - 425Impl5 Note2: 298 - 299 Impl5 Note6: 426 - 427Impl6 Note2: 300 - 301 Impl6 Note6: 428 - 429Impl7 Note2: 302 - 303 Impl7 Note6: 430 - 431Impl8 Note2: 304 - 305 Impl8 Note6: 432 - 433Impl9 Note2: 306 - 307 Impl9 Note6: 434 - 435Impl10 Note2: 308 - 309 Impl10 Note6: 436 - 437Impl11 Note2: 310 -311 Impl11 Note6: 438 - 439Impl0 Note3: 320 - 321 Impl0 Note7: 448 - 449Impl1 Note3: 322 - 323 Impl1 Note7: 450 - 451Impl2 Note3: 324 - 325 Impl2 Note7: 452 - 453Impl3 Note3: 326 - 327 Impl3 Note7: 454 - 455Impl4 Note3: 328 - 329 Impl4 Note7: 456 - 457Impl5 Note3: 330 - 331 Impl5 Note7: 458 - 459Impl6 Note3: 332 - 333 Impl6 Note7: 460 - 461Impl7 Note3: 334 - 335 Impl7 Note7: 462 - 463Impl8 Note3: 336 - 337 Impl8 Note7: 464 - 465Impl9 Note3: 338 - 339 Impl9 Note7: 466 - 467Impl10 Note3: 340 - 341 Impl10 Note7: 468 - 469

128

Impl11 Note3: 342 - 343 Impl11 Note7: 470 - 471Impl0 Note4: 344 - 345 Impl0 Note8: 480 - 481Impl1 Note4: 346 - 347 Impl1 Note8: 482 - 483Impl2 Note4: 348 - 349 Impl2 Note8: 484 - 485Impl3 Note4: 350 - 351 Impl3 Note8: 486 - 487Impl4 Note4: 352 - 353 Impl4 Note8: 488 - 489Impl5 Note4: 354 - 355 Impl5 Note8: 490 - 491Impl6 Note4: 356 - 357 Impl6 Note8: 492 - 493Impl7 Note4: 358 - 359 Impl7 Note8: 494 - 495Impl8 Note4: 360 - 361 Impl8 Note8: 496 - 497Impl9 Note4: 362 - 363 Impl9 Note8: 498 - 499Impl10 Note4: 364 - 365 Impl10 Note8: 500 - 501Impl11 Note4: 366 - 367 Impl11 Note8: 502 - 503

129

Bijlage E

Overzicht van de bijgeleverdedigitale documentatie

Samen met dit document stellen de ontwerpers ook documentatie in digitale versieter beschikking. Op het pakket bevinden zich de volgende zaken.

• Dit document in Adobe Acrobat pdf-formaat.

• Het bestand van de presentatie van de Fynth, gegeven te Rome op 10 juni2004, in het kader van de cursus “Sistemi Digitali”, opleidingsonderdeel aande universiteit “La Sapienza”.

• De bestand van de presentatie van de Fynth, gegeven te Gent op 1 juli 2004,ter verdediging van de thesis, opleidingsonderdeel aan de “Universiteit Gent”.

• Een Quartus II, versie 4 project, met alle VHDL-code erin gebundeld.

• Enkele opnames van demo-weergaves van de Fynth, gestockeerd in wave-formaat.

• Tussentijdse, voorlopige documentatie (die uiteindelijk tot het einddocumentgeleid heeft), gebundeld in een map “Unfinished”.

• Het programma Hermes, en zijn broncode, geschreven in C.

130

Bibliografie

[1] P. Faes. Pcicp - pci copy program for linux, 2003. Programma geschreven in C.59

[2] Daniel Gistelinck. Vademecum van de Algemene Muziekleer. Aniscore, 1997.derde druk. 18

[3] R.A. Moog. Voltage-controlled electronic music modules. Journal of the AudioEngineering Society, 13(3):200–206, July 1965. vii, ix

[4] Mauro Olivieri. Sistemi digitali. Technical report, Universita di Roma ”LaSapienza”, Dipartimento Elettronica, Via Eudossiana, 18 I-00184 Roma, 2002.44

[5] Curtis Roads. The Computer Music Tutorial. the MIT Press, 1996. ISBN0-252-18158-4. 17, 23, 25

[6] Aurelio Uncini. Trattamento del segnale audio. Technical report, Universitadi Roma ”La Sapienza”, Dipartimento INFOCOM, Via Eudossiana, 18 I-00184Roma, April 2004. 15, 22, 29, 30, 85, 87

[7] John Watkinson. An Introduction To Digital Audio. Focal Press, 1994. reprint1995, ISBN 0-252-18158-4. 27

131