0% found this document useful (0 votes)
3 views10 pages

XVA1 Installation Guide

The XVA1 Installation Guide outlines the steps to install the XVA1 firmware on a Windows computer, including loading the Synthesizer Image File, Tunings Definition File, and Factory Programs Bank File, as well as setting the MIDI channel. Detailed instructions for each step are provided, including the use of the Digilent Adept 2 software and the XLoad utility. The guide also includes technical insights on memory types used in the installation process.

Uploaded by

Private
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views10 pages

XVA1 Installation Guide

The XVA1 Installation Guide outlines the steps to install the XVA1 firmware on a Windows computer, including loading the Synthesizer Image File, Tunings Definition File, and Factory Programs Bank File, as well as setting the MIDI channel. Detailed instructions for each step are provided, including the use of the Digilent Adept 2 software and the XLoad utility. The guide also includes technical insights on memory types used in the installation process.

Uploaded by

Private
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

XVA1 Installation Guide

©2021 futur3soundz inc.

1
Installation Guide

Installing the XVA1 firmware in your build is quite simple.


The procedure requires a computer running Windows, and essentially involves the following procedure.
1. Installing the Synthesizer Image File (XVA1_CMOD_A7.bin)
2. Loading the Tunings Definition File (XVA1_Tunings.bin)
3. Loading the Factory Programs Bank File (XVA1_Factory.bank)
4. Setting the MIDI channel to match your MIDI controller.
The subsequent sections will describe each step. Please make sure you have downloaded and extracted the XVA1
zip file into a handy folder in your computer before starting.

2
Loading the Synthesizer Image File
The synthesizer image file is the core component of XVA1. It is used to configure the hardware elements inside
the FPGA, so in fact, one could say it is the synthesizer itself.
In order to load it and store it in the non-volatile flash memory in the board, a special bitloader program is used.
Here is the procedure to load the synthesizer image file:
1. Download and Install the Digilent Adept 2 software utility.
2. Connect the CMOD A7 board to your computer’s USB port (ideally, using an USB3 port).
3. Run Adept and add the board as new device.

Device Manager -> Enumerate -> Select CmodA7 ->


[enter any name] -> Add Dvc -> exit.

4. Select the board in the “connect” drop-down, browse for the image loader file CMOD_A7_Loader.bit,
then select Program.
A progress bar will track the loading process, which should complete in few seconds with the
“Programming successful” message.

3
Right after completion, the CMOD A7 automatically enters the “image loading mode”.
While in this mode, it will receive the firmware image and write it into the board non-volatile flash memory.
Close Adept, and make sure the board remains powered on until the next operation completes.

5. Open a command window in the folder with the extracted binaries and run the XLoad utility program
with the following line:

XLoad -img XVA1_CMOD_A7.bin

The operation will take a few minutes to complete.

4
6. Unplug the board, then plug it again to restart it.

After this operation, the synthesizer is already running in your build.


This only needs to be performed once in the synthesizer lifetime, but one of the great things about reconfigurable
hardware is that you can overwrite it with any update, or with another project.
You could, for instance, easily alternate between XVA1 and XFM2 in few minutes using the same build.

5
Loading the Tunings Definition File
The tunings definition file contains all the available tunings for the synthesizer, including the standard tuning and
the factory-alternate tunings, or the user-created alternated tunings.
To load the tunings definition file:
1. Open a command prompt in the folder where all the XVA1 binaries are.
2. Run the following command:

XLoad “t XVA1_Tunings.bin”
The operation should take about a minute to complete.

The Tunings Definition File can be loaded into the unit at any time, which is especially useful to experiment with
the creation of alternate tunings.

6
Loading the Factory Programs Bank File
The factory programs bank is a set of example programs showing some of the sounds that XVA1 can create.
1. Open a command prompt in the folder where all the XVA1 binaries are.
2. Run the following command:

XLoad “put_bank XVA1_Factory.bank”


The operation should take a few seconds to complete.

7
Setting the MIDI Channel
Setting XVA1 MIDI channel for receive is easily done using the XLoad utility program:
XLoad “* n”
Where “n” is the MIDI Channel (use 0 for omni).

After completing this procedure, you should be able to play and hear how XVA1 sounds. Enjoy!

8
Technical insights
This section is just reference technical information to understand the insights of the installation procedure.
It is not required for the installation procedure at all.
There are different types of memory in your build, and sometimes it is not clear to identify what-goes-where:

Flash memory chip


The FPGA devices are essentially huge arrays of silicon elements, and their routings or connections are
established when booting up. Those routings are exactly what the FPGA designer creates, and are called a
bitstream file. In order to reprogram the FPGA every time it powers up, that bitstream must be stored in a non-
volatile memory somewhere.
Some FPGA chips have that memory built-in (inside the same chip), while others resort to using an external non-
volatile memory chip. The latter is the case for Xilinx FPGAs, so the CMOD-A7 features a flash memory chip,
which stores the bitstream.

Most CMOD-A7 boards use a 32Mb (4MB) Micron N25Q032A chip. However, the Artix A35 bitstream image
file is only 17,536,096 bits of memory (2,192,012 bytes).
This leaves about half of the flash memory empty, and therefore XVA1 uses that empty space to load the
Tunings Definition file.
Unfortunately, Digilent does not provide any utility to directly upload a bitstream into the flash memory. They do
provide the free Adept 2 utility though, which allows uploading a bitstream directly into the FPGA via JTAG.
Therefore, I had to write the CMOD_A7_Loader.bit, which is loaded into the FPGA using Adept 2. It then
receives the image file and writes it down into the non-volatile flash memory.
One question I get often is “why didn’t you also use the flash memory to store the user programs, eliminating
then the need for the EEPROM”.
As you (if you are still reading) probably know, flash memories can be written at a byte-level but can only be
erased at sector-level. This works great for most common portable devices, where you have the option of an
offline formatting (think photo cameras).
On the other hand, erasing a sector is a lengthy operation which can take up to 3 seconds, which would make the
operation of editing and rewriting a program completely unsuitable for a real-time, performance oriented audio
device. This type of memory is very suitable for data which is often-read-but-seldom-written (such as the Tuning
Definition file, and the User Waveforms in XFM2).
Also, a flash memory can be only written about 100K times, while an EEPROM will last well over 1M times.
Additionally, the very inexpensive 24xx chips could be easily swapped to create ‘cartridges’ of sounds, for total
80’s retro constructions (well, without the hassle of needing batteries to preserve non-volatile settings).

Given that both the cost and added complexity of adding an I2C EEPROM chip is very low, I opted for this
design.

EEPROM memory chip


This is the 24xx chip you added to the build. It is essentially used to store the 128 factory programs, and a few
permanent settings (such as the selected MIDI Channel). All the program or bank load/store commands in XLoad
will write/read from this chip.
There is a lot of unused space in this memory chip (well, if you understand that 32k can be a lot sometimes) and
using it to do something useful is in the to-do list.

9
SRAM memory chip
The CMOD-A7 also features 512KB of static RAM in an external chip (an ISSI IS61WV5128BLL-10BLI chip).
XVA1 uses that memory exclusively to store the “audio of the past” for the Delay and ER effects (the
chorus/flanger/phaser/reverb effects use the internal FPGA BRAM modules).

Block RAM (BRAM) and Distributed RAM


Block RAM are small chunks of static RAM built-in the FPGA chip. The Artix A35 has 50 of those blocks, of
36kbit each (about 225 KB total).
Distributed RAM is a ‘trick’ which allows to configure some LUTs in the FPGA as memory (about 50KB total
available).
The BRAM is mostly used in XVA1 to store small snippets of audio in the time-related effects
(chorus/flanger/phaser/reverb, etc.) and lookup tables, while the distributed memory is used to store the in-play
parameter data and synthesizer state.
Except for the memory-bound Delay effect (living in the external SRAM), the whole XVA1 synthesizer,
including effects, takes about 240KB of total RAM memory.
As a reference, that is about 500,000 times less RAM than the one installed in the computer used to write this
document.

10

You might also like