Late at night yesterday, I stumbled upon the positively amazing XMOS USB Multi-Channel Audio U16 Platform reference design. This morning, as I was reviewing its technical documentation, I started to better understand some pieces of advice that my mentor had given me a day earlier. This resulted into yet another iteration, which I believe is very close to what he had in mind.
The main idea of this redesign is that you really want to slide an analog slice between an analog submodule and the backplane, because you need quite a few components to make it work properly, and you do not want to waste these components if you’re going to use many digital submodules. The total costs of parts on the revised BoM make a pretty compeling case for it:
- Module: $440
- Analog Slice: $75
- Digital Submodule: $15
Consequently, the new design assumes that digital submodules are used by default, yet provides uncompromised support for analog ones. Before we go into more details, I should indicate that we will base our new design on the reference design provided by XMOS. This will give us a massive headstart, with the following building blocks being already integrated:
- Audio ADC with CS5368
- Audio DAC with CS4384
- S/PDIF or ADAT input and output
- MIDI input and output
- Audio mixer
- High-Speed USB device
- USB Audio Class 2.0 device
- Multiple OS support (iOS, Linux, Mac OS X, Windows)
Now, let’s take a look at how the different pieces will fit together.
First, the XMOS will act as a USB device, but it won’t be connected to the Raspberry Pi 2 over USB. Instead, the faceplate’s USB port will allow the XMOS to be connected to an external USB 2.0 host, such as a laptop or a tablet. This will allow the external host to record our 8 stereophonic channels at 192 kHz over 24-bit, and it won’t even require any driver when using a Mac or an iOS device. This approach will also make it easier to develop directly from my iMac or from my MacBook Pro, without having to go through the Pi. As a result, the Pi will be connected to the XMOS over an SPI bus.
Second, we’re keeping a very clear separation between inputs and outputs, but we now provide transparent support for two kinds of input/output: audio and CV. This is due to the fact that analog audio signals should not be sampled the same way as analog CV levels, and the same goes when going from digital to analog. I had not realized this fact until it was pointed out by my mentor, and it took me a few days to become comfortable with it.
As a result, our 16 inputs will be routed to three destinations in parallel: a pair of CS5368 analog-to-digital converters used for audio signals, a pair of AD7606 analog-to-digital converters used for CV levels, and 16 pins on every submodule interconnect, which will be used to propagate all 16 analog inputs to every analog submodule. This part of our design is quite radical, in two respects: first, you get the best possible analog-to-digital conversion for all 16 inputs, whether they are used for audio signals or CV levels. Second, we are preserving a 100% analog path for all 16 analog inputs. In other words, we really get the best of digital with the best of analog. The CS5368 audio converters will be connected to the XMOS through I²S interfaces, while the AD7606 CV converters will use SPI interfaces. We just need to make sure that we’ll have enough pins on the XMOS XS1-U16A-128 for all these inputs and outputs.
From there, the XMOS will provide I²S and SPI interfaces to every submodule. The interconnect between the backplane and a submodule will include the following 32 pins:
- 4 pins for the SPI interface
- 3 pins for the I²S input
- 3 pins for the I²S output
- 16 pins for the analog inputs
- 2 pins for the stereophonic audio output
- 2 pins for the ±12V power supply
- 2 pins for the ±5V power supply
- 3 pins for future extensions
The I²S input will be used to send digital audio signals from the XMOS to the submodule, while the I²S output will be used to send the digital audio output of the submodule back to the XMOS. This will allow the audio output of a module to be patched to the audio input of another module, or to be used to modulate CV levels within the XMOS (more on this later).
The I²S output will also be fed to a CS4384 digital-to-analog converter used to convert the digital audio signal produced by a digital submodule into an analog audio signal. This signal will then be fed to a mixing section, alongside the analog audio output produced by an analog submodule. This mixing section will use a set of LM833-N driven by a set of AD5263 digital potentiometers.
The audio output produced by the analog or digital submodules will then be fed to a pair of AD75019 crosspoint switches, alongside 16 CV outputs produced by an AD5360 digital-to-analog converter. The resulting 32 × 16 switching matrix will therefore allow the patching of any CV output and any audio output to the 16 analog outputs made available on the faceplate, which is quite nice.
A digital submodule will be really simple. In most cases, it will be a single STM32F405RG ($8) or ADS-BF533 ($15) DSP. This means that it could retail for $50 to $75. As a result, a fully-loaded module with 8 submodules could retail for less than $2,000. This would be quite an achievement.
An analog submodule will be quite different. The submodule itself could be anything, but it will require the addition of a relatively expensive analog slice made of the following components: first, a small DSP (STM32F405RG) will be used to drive all the components of the slice; second, an AD5360 digital-to-analog converter will be used to genereate up to 16 CV levels; third, a pair of AD75019 crosspoint switches will be used to patch any of the 16 CV levels and any of the 16 faceplate inputs to 16 analog inputs on the analog submodule; fourth, a CS42L52 analog-to-digital converter will be used to convert the submodule’s analog audio outputs into a digital stereophonic signal. The latter will be fed back to the XMOS through an I²S interface, so that it could be patched to the audio input of another module.
The consequence of this design is that an analog submodule could be driven by 16 purely analog modulation signals patched from the faceplate, 16 digital modulation signals generated by the XMOS, or any combination of the two. Furthermore, the stereophonic audio outputs of any module (digital or analog) can be fed back to the audio input of any other module (digital or analog), including some intermediary signal processing taking place on the XMOS. This, my friends, is really powerful. Once again, I wish that I could take credit for it, but I really can’t.
Another benefit of this architecture is that dynamic patching is effectively handled by a mix of analog crosspoint switching with up to 10 AD75019 devices, and crossbar switching using the XMOS xCONNECT architecture. This carefully-design mix is yet another way to bring the best of analog and the best of digital together, while reducing complexity and cost.
If you’ve been reading this blog for a while, you might be thinking that this is yet another iteration within an endless stream of design revisions, but I do not see it this way. Quite frankly, I think that we’ve turned a corner here, with a design that brings everything that we wanted to offer, yet will cost a lot less, and will be a lot easier to put together, because roughly half of it is already done by the XMOS reference design. All of a sudden, what could have taken 3 to 4 years might take only 1 or 2…
Also, if you spend any time on the xmos.com website, you will realize that this is no ordinary fabless semiconductor company. The quality of the technical documentation and the openess of the design are second to none. And the fact that they support both Windows, Mac OS X, and Linux as primary development platforms makes it very developer friendly, especially if you come from a software background like I do.
I can’t wait to receive my evaluation kit…