Het project beschrijft de ontwikkeling van een software-emulator voor de Spin Semiconductor FV-1, een audio DSP die veelvuldig wordt ingezet in digitale gitaarpedalen. Het hoofddoel is om een virtuele omgeving te creëren waarin FV-1-programma's kunnen worden ontwikkeld, getest en gedebugd op een pc, waardoor het tijdrovende proces van het constant programmeren van fysieke EEPROMs wordt geëlimineerd.
De emulator reproduceert de specifieke hardware-architectuur van de FV-1, waaronder:
- De verwerking van 24-bits audio met 128 instructiecycli per sample (bij 48 kHz).
- Cruciale componenten zoals 32 registers, 32K delay-geheugen, LFO's en potentiometer-ingangen.
- De volledige instructieset (waaronder RDAX, MULX en LOG/EXP), waarbij de focus ligt op het exact reproduceren van het hardwaregedrag in plaats van het simpelweg simuleren van effecten.
Het proces volgt de signaalketen: Audio Input -> ADC Registers -> FV-1 Program -> DAC Registers -> Audio Output. De emulator is uitgebracht onder de naam FV-1 Lab en is open source beschikbaar op GitHub.
Spin FV-1 Emulator
Abstract
Dit project is een poging om een software-emulator te ontwikkelen voor de Spin Semiconductor FV-1 audio DSP, die veelvuldig wordt gebruikt in gitaarpedalen en diverse andere digitale audio-effecthardware. Het doel is om de eigenlijke FV-1-processor en diens instructieset te emuleren, in plaats van simpelweg een DSP-effectenbibliotheek te maken die toevallig FV-1-stijl effecten uitvoert.
Het uiteindelijke doel is om programma's die voor een echte FV-1 zijn geschreven in de emulator te kunnen laden en deze te kunnen testen met audiobestanden of realtime audio op een pc. Dit maakt het mogelijk om FV-1-programma's te ontwikkelen, te testen, te debuggen en mee te experimenteren zonder constant een EEPROM te hoeven programmeren en heen en weer te schakelen naar fysieke hardware.
Daarnaast is de bedoeling dat de emulator bruikbaar wordt als debugging- en ontwikkelingstool, waarbij de interne status van de FV-1 kan worden geïnspecteerd terwijl een programma wordt uitgevoerd.
Overzicht
De FV-1 is een interessante DSP omdat de architectuur specifiek is ontworpen voor audio-effecten, in plaats van een algemene DSP of microcontroller te zijn. De instructieset is relatief klein, maar de instructies zelf kunnen een aanzienlijke hoeveelheid werk verrichten.
De FV-1 werkt met 24-bits lineaire audiogegevens en voert 128 instructiecycli uit voor elk audiosample. Bij de normale samplefrequentie van 48 kHz komt dit neer op ongeveer 6 miljoen instructies per seconde.
De chip beschikt over de volgende componenten:
- Een geïntegreerde stereo ADC en DAC;
- 32 algemene registers;
- 32K words aan delay-geheugen;
- Drie potentiometer-ingangen;
- Twee SIN/COS LFO's;
- Twee ramp LFO's;
- De DSP-core zelf.
Een programma kan dus audio ophalen van de ADC's, dit verwerken met de accumulator en registers, delay-geheugen lezen en beschrijven, de LFO's gebruiken voor modulatie, POT0-POT2 uitlezen voor parameters, en uiteindelijk de verwerkte audio naar de DAC-uitgangen sturen.
De werking van de emulator
Het basisidee van de emulator is om al deze functies in software te reproduceren. Op een hoog abstractieniveau ziet het proces er als volgt uit:
Audio Input -> ADC Registers -> FV-1 Program -> DAC Registers -> Audio Output
Voor elk sample laadt de emulator de input-audio in de ADC-registers, begint met het uitvoeren van het FV-1-programma, voert de 128 instructieslots uit, werkt de relevante interne status en het delay-geheugen bij, en verzamelt vervolgens alles wat naar DACL en DACR is geschreven als het output-sample. Daarna wordt dit proces herhaald voor het volgende sample.
FV-1 Instructieset
Het eerste grote onderdeel van het project is het emuleren van de FV-1-instructieset. De FV-1 heeft instructies voor het werken met registers, delay-geheugen, de accumulator, LFO's, branching, filtering, logaritmische/exponentiële operaties en andere DSP-specifieke operaties.
Enkele voorbeelden hiervan zijn:
- RDAX / WRAX
- RDFX
- WRLX / WRHX
- MULX
- RDA / WRA / WRAP
- RMPA
- SOF
- LOG / EXP
- SKP
- WLDS / WLDR
- JAM
- CHO
Wat de architectuur interessant maakt, is dat sommige van deze instructies niet equivalent zijn aan één normale CPU-instructie. Een enkele FV-1-instructie kan meerdere operaties tegelijk uitvoeren. Zo kan een instructie die delay-geheugen leest, de waarde uitlezen, deze vermenigvuldigen met een coëfficiënt, deze toevoegen aan de accumulator en de processorstatus bijwerken binnen dezelfde instructie.
Het doel is dus niet alleen om SpinASM-instructies te parsen, maar om exact te reproduceren wat die instructies de FV-1-hardware laten doen.
Registers en ACC
Centraal in de meeste FV-1-programma's staat de accumulator, oftewel de ACC. De meeste operaties laden iets in de ACC, voeren een bewerking uit op de ACC, of gebruiken de ACC als onderdeel van een andere berekening. Er zijn ook aanvullende interne statussen, zoals PACC en LR, die correct moeten functioneren aangezien FV-1-instructies hiervan gebruikmaken.
De processor bevat daarnaast 32 algemene 24-bits registers, samen met speciale registers die zaken vertegenwoordigen zoals:
- ADCL
- ADCR
- DACL
- DACR
- POT0
- POT1
- POT2
- LFO-controleregisters
Beschikbaarheid en Broncode
De emulator is uitgebracht als de FV-1 Lab. Dit virtuele teststation is ontwikkeld om het draaien en begrijpen van Spin FV-1-programma's te integreren in één omgeving.
De broncode en releases voor alle besturingssystemen zijn beschikbaar op GitHub: https://github.com/Roth-Amplification-Ltd/Spin-FV-1-Emulator
Spin FV-1 Emulator
Abstract
Dit project is een poging om een software-emulator te ontwikkelen voor de Spin Semiconductor FV-1 audio DSP, die veelvuldig wordt gebruikt in gitaarpedalen en diverse andere digitale audio-effecthardware. Het doel is om de eigenlijke FV-1-processor en diens instructieset te emuleren, in plaats van simpelweg een DSP-effectenbibliotheek te maken die toevallig FV-1-stijl effecten uitvoert.
Het uiteindelijke doel is om programma's die voor een echte FV-1 zijn geschreven in de emulator te kunnen laden en deze te kunnen testen met audiobestanden of realtime audio op een pc. Dit maakt het mogelijk om FV-1-programma's te ontwikkelen, te testen, te debuggen en mee te experimenteren zonder constant een EEPROM te hoeven programmeren en heen en weer te schakelen naar fysieke hardware.
Daarnaast is de bedoeling dat de emulator bruikbaar wordt als debugging- en ontwikkelingstool, waarbij de interne status van de FV-1 kan worden geïnspecteerd terwijl een programma wordt uitgevoerd.
Overzicht
De FV-1 is een interessante DSP omdat de architectuur specifiek is ontworpen voor audio-effecten, in plaats van een algemene DSP of microcontroller te zijn. De instructieset is relatief klein, maar de instructies zelf kunnen een aanzienlijke hoeveelheid werk verrichten.
De FV-1 werkt met 24-bits lineaire audiogegevens en voert 128 instructiecycli uit voor elk audiosample. Bij de normale samplefrequentie van 48 kHz komt dit neer op ongeveer 6 miljoen instructies per seconde.
De chip beschikt over de volgende componenten:
- Een geïntegreerde stereo ADC en DAC;
- 32 algemene registers;
- 32K words aan delay-geheugen;
- Drie potentiometer-ingangen;
- Twee SIN/COS LFO's;
- Twee ramp LFO's;
- De DSP-core zelf.
Een programma kan dus audio ophalen van de ADC's, dit verwerken met de accumulator en registers, delay-geheugen lezen en beschrijven, de LFO's gebruiken voor modulatie, POT0-POT2 uitlezen voor parameters, en uiteindelijk de verwerkte audio naar de DAC-uitgangen sturen.
De werking van de emulator
Het basisidee van de emulator is om al deze functies in software te reproduceren. Op een hoog abstractieniveau ziet het proces er als volgt uit:
Audio Input -> ADC Registers -> FV-1 Program -> DAC Registers -> Audio Output
Voor elk sample laadt de emulator de input-audio in de ADC-registers, begint met het uitvoeren van het FV-1-programma, voert de 128 instructieslots uit, werkt de relevante interne status en het delay-geheugen bij, en verzamelt vervolgens alles wat naar DACL en DACR is geschreven als het output-sample. Daarna wordt dit proces herhaald voor het volgende sample.
FV-1 Instructieset
Het eerste grote onderdeel van het project is het emuleren van de FV-1-instructieset. De FV-1 heeft instructies voor het werken met registers, delay-geheugen, de accumulator, LFO's, branching, filtering, logaritmische/exponentiële operaties en andere DSP-specifieke operaties.
Enkele voorbeelden hiervan zijn:
- RDAX / WRAX
- RDFX
- WRLX / WRHX
- MULX
- RDA / WRA / WRAP
- RMPA
- SOF
- LOG / EXP
- SKP
- WLDS / WLDR
- JAM
- CHO
Wat de architectuur interessant maakt, is dat sommige van deze instructies niet equivalent zijn aan één normale CPU-instructie. Een enkele FV-1-instructie kan meerdere operaties tegelijk uitvoeren. Zo kan een instructie die delay-geheugen leest, de waarde uitlezen, deze vermenigvuldigen met een coëfficiënt, deze toevoegen aan de accumulator en de processorstatus bijwerken binnen dezelfde instructie.
Het doel is dus niet alleen om SpinASM-instructies te parsen, maar om exact te reproduceren wat die instructies de FV-1-hardware laten doen.
Registers en ACC
Centraal in de meeste FV-1-programma's staat de accumulator, oftewel de ACC. De meeste operaties laden iets in de ACC, voeren een bewerking uit op de ACC, of gebruiken de ACC als onderdeel van een andere berekening. Er zijn ook aanvullende interne statussen, zoals PACC en LR, die correct moeten functioneren aangezien FV-1-instructies hiervan gebruikmaken.
De processor bevat daarnaast 32 algemene 24-bits registers, samen met speciale registers die zaken vertegenwoordigen zoals:
- ADCL
- ADCR
- DACL
- DACR
- POT0
- POT1
- POT2
- LFO-controleregisters
Beschikbaarheid en Broncode
De emulator is uitgebracht als de FV-1 Lab. Dit virtuele teststation is ontwikkeld om het draaien en begrijpen van Spin FV-1-programma's te integreren in één omgeving.
De broncode en releases voor alle besturingssystemen zijn beschikbaar op GitHub: https://github.com/Roth-Amplification-Ltd/Spin-FV-1-Emulator