Meta

musings of a twenty-first century stoic

Revisiting XMOS

For the past couple of weeks, I have been trying to get access to some technical documentation about the ADC and DAC converters manufactured by ESS, but without much success. Today, I have come to the conclusion that I might want to switch to a more open platform for this part of our system.

Fortunately, XMOS has recently released a fascinating reference design: the xCORE-200 Multichannel Audio Platform. The actual ADC and DAC converters are not as advanced as the ESS ones, but they could be replaced by better components down the road. What is really attractive about the XMOS design is its digital side, which is handled by a powerful yet affordable 16-core microcontroller. Out of the box, the design provides the following interfaces:

8-channel analog input

8-channel analog output

S/PDIF optical/coaxial input

S/PDIF optical/coaxial output

ADAT input and output

MIDI input and output

USB Audio Class 2.0

Gigabit Ethernet with AVB

Lightning

In other words, it would take care of all the audio interfaces that we could possibly want, while totally offloading our Parallella boards. And it would do that mostly with software, which means that further enhancements could be added later on without having to make any modifications to our hardware. Furthermore, it would allow us to connect our audio interface to our master Parallella board over USB or Gigabit Ethernet, freeing us from having to develop a custom interconnect, and reducing the number of cables that we would need internally (our current design is a bit ridiculous in that respect).

Internally, this design is capable of supporting pulse-code modulation (PCM) at up to 384kHz, on 16, 24, or 32 bit. But the Cirrus Logic ADC and DAC converters used alongside the XMOS microcontroller only support 192kHz sampling on 24 bit. Nevertheless, this should be good enough for a first version, and we could upgrade to better converters once we have a bit more experience with the design of complex hybrid circuits.

With this approach, we would combine all audio interfacing functions (ADC and DAC conversion) into a single board, which would be duplicated in order to provide 16 inputs and 16 outputs. This approach would make our architecture a lot more scalable, allowing us to provide a virtually unlimited number of inputs and outputs through AVB daisy-chaining.

At this stage, I believe that I have everything needed to complete our design and put together a first prototype. And I feel a lot better about doing all this work on top of a set of truly open components (XMOS, Parallella, ATmega) that are supported by relatively strong communities of developers.