ArSid - Arduino Sid Synthesizer

Fri 22-Feb-19
03:48:17




FPGA-Sid Introductie

Datum: Mon 07 January 2019
Samenvatting: Een printje waarmee Sids gesimuleerd worden met behulp van een FPGA.
 Soort Artikel: Theorie
Status: Afgerond



[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
sid-fpga_1-blok.jpg
1/6: sid-fpga_1-blok.jpg.
sid-fpga_2-print.jpg
2/6: sid-fpga_2-print.jpg.
sid-fpga_3-werkend.jpg
3/6: sid-fpga_3-werkend.jpg.
sid-fpga_4-extra-regs.jpg
4/6: sid-fpga_4-extra-regs.jpg.
sid-fpga_5-cbm-decoding.jpg
5/6: sid-fpga_5-cbm-decoding.jpg.
sid-fpga_6.jpg
6/6: sid-fpga_6.jpg.
Meer
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

Er is een projekt gaande waarmee met een FPGA (Field Programmable Gate Array). Het doel van dit projekt is het simuleren van de oorspronkelijke Sid-Chip (6581 en/ of 8580), zoals die zich bevindt in de Commodore 64. De FPGA-Sid moet electronisch EN Pin compatibel zijn, zodat deze rechtstreeks in een C64 is in te prikken. Gaandeweg zijn de eind-doelen bijgesteld tot het simuleren van 2 Sid-Chips (tegelijk), waarbij men kan kiezen in twee dezelfde of een een combinatie van de 6581-Sid en de 8580Sid.

De FPGA-Sid

In 2016 is er een presentatie gehouden tijdens het evenement Classic Computing 2016, in Nordhorn (Duitsland), hierin is het projekt nader omschreven.

FPGA staat voor Field Programmable Gate Array en dit is een vrij configureerbare digitale logische bouwsteen, waarmee men elke digitale schakeling kan maken - of te wel deze geïntegreerde chip bestaat uit programmeerbare logische componenten (zoals And, Or, Xor-poorten), waarmee men grotere logische blokken kan maken, van decoders, flipflops, via (schuif)registers, Alu's, tot ingewikkeldere blokken. De eerste FPGA is ontwikkeld in 1985 en bestaat uit een IC met zo'n 1000 poorten.

Samen met het idee van de Sid wordt dit de FPGA-Sid (op de oorspronkelijke Web-side worden deze woorden samengevoegd tot FPGASID, ik plaats liever een streepje ertussen), een volledige compatibele nabouw van de Sid Chips, gebaseerd op FPGA-Techniek.

Natuurlijk is er al een projekt die dit doet, de "SwinSid". Dit is een print met een micro-controller die de Sid geheel in software emuleert. Maar er is een klankverschil aanwezig, zeker in vergelijking met de originele Sid en het 6581-filter.

De FPGA-Sid gaat gebruik maken van de Altera Max10 FPGA. Deze heeft 8000 logische cellen (8000 kleine TTL-bouwstenen), een (Delta-Sigma) A/D Converter voor de Audio-ingang en heeft een enkelvoudige voedingsspanning nodig van 3,3Volt. Hij draait op een interne klok-frequentie van 64MHz (de Sid's in de ArSid draaien op 1MHz) en de FPGA-bronnen zijn tot 60% benut (ten tijde van de presentatie).

Daarnaast is er een omzetting nodig van 5Volt naar de benodigde 3.3Volt. En FPGA's zijn relatief duur (in vergelijking tot de SwinSid-oplossing).

De FPGA-Sid wordt gebasseerd op de reSID-library, want deze geeft de beste software emulatie. Deze bibliotheek wordt onder andere in de VICE-Emulator gebruikt. Er is een huidige PC vereist voor het doorrekenen van de volledige emulatie. Er vindt een excacte nabouwen plaats van het digitale gedeelte door een cyclus-nauwkeurige emulatie van geluidsgeneratoren (er zijn nauwkeurige digitale beschrijvingen hiervan). Het numerieke model van het analoge deel (het filter) wordt in een Spice Simulatie doorgerekent.

De FPGA leent zich het meest op de reSID, maar het wordt geen excacte kopie ervan. Het doel is om de klank van het origineel zo goed mogelijk na te bouwen. Ook de "Paddle"aansturing moet worden nagebouwd, omdat deze logica ook in de Sid-Chip zit (maar in de ArSid niet wordt gebruikt).

Men gaat zich concentreren op een nieuwe en kleinere print (48mm bij 31mm - iets groter dan de originele Sid-Chip). De print wordt door een vrijwillige helper ontwikkeld.

Omdat men twee Sids in een FPGA gaat implementeren, komen er ook twee aparte Audio-signalen uit, bijvoorbeeld voor Stereo-geluid. 1 Via de oorspronkelijke Sid-Chip pin, de andere via een extra connector op de FPGA-Sid print.

Samenvatting.

De FPGASID proto1 wordt voorzien van het volgende:

  1. Volledige Sid functionaliteit, inclusief de Paddles en de ExtIn Audio ingang.
  2. Twee Sids voor stereo geluid. De adressen van de twee Sids zijn per register aan te passen. De Sids zijn schakelbaar tussen de oorspronkelijke 6581 en de latere versie, de 8580.
  3. Een JTag Debug interface, die dient om de FPGA te kunnen programmeren.
  4. Het vrijgeven van de FPGA Source-code, hoewel het licentiemodel nog steeds onduidelijk is.

Gedurende de komende priode (2016 en 2017) wordt de Alfa-fase van de FPGA-Sid gestest. Hiertoe wordt het nieuwe prototype aan enkele geïnteresseerde en gekwalificeerde personen tegen een onkostenbedrag gegeven. Vooral ontwikkelaars worden uitgenodigd om de code verder te optimaliseren.

Na deze alfa-fase komt er een nieuwe printversie die nog kleiner zal worden. Eventuele foutjes worden opgelost. Ook wordt er een partner gezocht voor de produktie en de verkoop. Op het moment van de presentatie (september 2016) heeft men gepland dat de verkoop op zijn vroegst eind 2017 zal kunnen plaats vinden. Maar zoals altijd komt men onverwachte dingen tegen, waardoor de verkoop (anno april 2018) nog steeds niet begonnen is.

Extra functies.

Om de extra functies te aktiveren, of om om te schakelen tussen de 6581 en de 8580, zijn er extra registers nodig. Gelukig gebruikt de standaard Sid maar 29 adressen, van de 32 die een Sid in beslag neemt. De laatste 3 registers worden daarom gebruikt om de extra functies in en uit te schakelen. Echter er is inmiddels erg veel software in omloop die de Sid op verschillende manieren gebruiken. Sommigen zoals gepland en soms met een "botte bijl". Zelfs de ArSid initialiseert alle Sids door alle adres-plaatsen, die een Sid in beslag neemt, op 0 te zetten. Dus ook de drie plaatsen die een originele Sid niet gebruikt.

Om onbedoelde dingen te voorkomen, kiest men hier voor de methode dat er een "magic-nummer" ($6581 - dus in hexadecimaal) die op de twee paddle-registers geschreven moet worden, waarna pas (effectief) geschreven mag worden in de drie extra registers. Zonder dit "magic-nummer", worden deze drie registers niet veranderd.

Extra functies van de FpgaSid, ten opzichte van een originele Sid, zijn:

  1. Om schakelen tussen de 6581 en de 8580, met een aparte instelling voor een "crunchy"-Audio en een gemixte golfvorm van elke type. Het idee was om in het laatste register een $00 te schrijven voor de 6581-Sid en een $FF voor de 8580-Sid. Het is dan ook mogelijkheid om de tweede Sid anders in te kunnen stellen dan de eerste Sid. Dat er zowel een 6581 als een 8580 naast elkaar te gebruiken zijn.
  2. "On-the-fly" het adres-gebied van de tweede Sid aanpassen (als deze in de C64 gemonteerd is). De eerste Sid zal altijd $D400 als basis-adres gebruiken. Als basis-adres van de tweede Sid kan (naast $D400) ook gekozen worden voor: $D420 (= adres A5), $D500 (= adres A8) of $DE00 (= ~I/O1 op de expantie-port, een aparte uitgang op decoder U15b (een 74LS139)). Drie gebieden die in de loop ter tijd door diverse bouwers en programmeurs gebruikt zijn voor de (oorspronkelijke) C64.
  3. Het uitlezen van het audio-signaal op de Ext-In pin. Hierdoor wordt het mogelijk om de Audio te samplen.

Zie de foto's voor deze extra register beschrijvingen (zoals gegeven was op 11-feb-2017 - bron: Forum64.De - Fpga Register Map).

Gebruik in de ArSid?

Als er Sid-Chips in de ArSid stuk gaan en ze zijn niet meer verkrijgbaar, dan is het te overwegen om FPGA-Sids in de ArSid te bouwen. Op zich is dit een interessante optie om in het achterhoofd te houden.

En (maart 2018) er zijn twee Sid-Chips die niet meer werken tijdens het ontwikkelen van de uitgangsversterker. Onderzocht moet nog worden of ze definitief stuk zijn, of dat er een tijdelijke storing van ergens anders is ontstaan.

Het aanschaffen van de FpgaSid

Inmiddels (december 2018) is de FpgaSid uitontwikkeld en beschikbaar voor de verkoop. Ik had er twee stuks besteld en inmiddels (januari 2019) zijn ze binnen gekomen. Omdat de FpgaSid ontwikkeld is om in een C64 (of een C128) geplaatst te worden, zijn er extra kabeltjes bijgevoegd om beide sids in de FpgaSid te adresseren en de tweede audio-uitgang aan te kunnen sluiten.

Omdat de FpgaSid iets groter zijn dan de originele Sid-IC's, zal ik een nieuwe print moeten ontwerpen en bouwen, waarbij de filter-condensatoren, de Audio-connctoren en twee montage-schroeven niet in de weg komen te zitten. Dat dit gerealiseerd kan worden, komt ook omdat er maar 2 FpgaSids op de print hoeven te komen, in plaats van 4 losse Sid-IC's. 


[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

Afbeeldingen

sid-fpga_1-blok.jpg
1/6: sid-fpga_1-blok.jpg.
sid-fpga_2-print.jpg
2/6: sid-fpga_2-print.jpg.
sid-fpga_3-werkend.jpg
3/6: sid-fpga_3-werkend.jpg.
sid-fpga_4-extra-regs.jpg
4/6: sid-fpga_4-extra-regs.jpg.
sid-fpga_5-cbm-decoding.jpg
5/6: sid-fpga_5-cbm-decoding.jpg.
sid-fpga_6.jpg
6/6: sid-fpga_6.jpg.
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]