Hi everyone,
This is my first post here, so first of all – hello and thank you for all the valuable discussions on this forum. They've been a great help in getting started with the XMOS platform. I’ve been working with the XK-AUDIO-316-MC-AB evaluation board for about a week now, and I’d like to share my goals and a few technical questions.
I’m trying to build a USB Audio interface with 48x48 channels at 48kHz, which would be scalable downward depending on the sample rate, like this:
48x48 @ 48kHz
24x24 @ 96kHz
12x12 @ 192kHz
I know that a 48x48 interface is possible, as Behringer's Wing console uses XMOS and achieves something similar.
So far, I’ve managed to get a 32x32 @ 48kHz system working with conversion to 8 x TDM8, and it runs relatively stable. Unfortunately, XUA-USB does not allow more than 32x32 channels, at least not in the default configuration.
Question 1:
Is there any way to go beyond this 32x32 limit? Perhaps by modifying the USB audio stack or using a non-standard approach?
Question 2 – Performance:
At 96kHz, I can only run one TDM8 bus reliably. When I try to use two TDM buses, performance becomes unstable. I’ve been thinking about a few possible solutions and would appreciate your thoughts on whether any of them make sense:
Use XMOS parallel ports and connect them to an FPGA, where I could freely configure the audio streams as needed.
Use two XMOS processors connected via xCONNECT, where one handles USB + 6x I2S (12 channels), and the second handles, for example, 3x TDM (up to 96kHz).
I know this would result in fewer channels than I originally intended, but I’m open to reducing the number of channels if necessary.
Upgrade to a faster 800 MHz XMOS processor – I’m not sure if this would make a significant difference in real-world performance.
Any advice, examples, or confirmation that someone has already gone down this path would be much appreciated. I’m aiming for a stable, scalable system with as many channels as reasonably possible, while being aware of the inevitable trade-offs.
USB Audio Interface 48x48 – Questions about scalability and performance
-
- New User
- Posts: 2
- Joined: Fri Jul 25, 2025 9:13 am
-
Verified
- XCore Legend
- Posts: 1230
- Joined: Thu Dec 10, 2009 9:20 pm
- Location: Bristol, UK
The theoretical max channel count for standard bandwidth endpoint in an async usb audio device is as follows (assuming a 4byte sample slot size):
36 in/out @ 48 kHz
20 in/out @ 96 kHz
10 in/out @ 192 kHz
So you'll need a high-bandwidth implementation, which we just so happen to be releasing in a few weeks so stayed tuned...!
We'll be topping out a theoretical max channel count of about double the above (we are only implementing 2 transactions per iso transfer, the spec allows for 3)
Expect to require an 800 MHz part for this.
36 in/out @ 48 kHz
20 in/out @ 96 kHz
10 in/out @ 192 kHz
So you'll need a high-bandwidth implementation, which we just so happen to be releasing in a few weeks so stayed tuned...!
We'll be topping out a theoretical max channel count of about double the above (we are only implementing 2 transactions per iso transfer, the spec allows for 3)
Expect to require an 800 MHz part for this.
Technical Director @ XMOS. Opinions expressed are my own
-
Verified
- XCore Legend
- Posts: 1230
- Joined: Thu Dec 10, 2009 9:20 pm
- Location: Bristol, UK
To achieve higher than what's above a 3 byte sample slot size could be used, the issue with this is the extra processing overhead to unpack the samples.
This would take a 48k to a theoretical max of 53 channels on a standard bandwidth EP.
This would take a 48k to a theoretical max of 53 channels on a standard bandwidth EP.
Technical Director @ XMOS. Opinions expressed are my own
-
- New User
- Posts: 2
- Joined: Fri Jul 25, 2025 9:13 am
Thank you, Ross, for the quick reply.
This is really great news – the new implementation should be more than sufficient for my application.
Could you share a bit more information about the external TDM/I2S communication capabilities in this implementation?
For example, would it be possible to run 2x TDM8 at 192 kHz, and 4x TDM8 at 96 kHz?
One last question – is it possible to run both I2S and TDM lines simultaneously?
This is really great news – the new implementation should be more than sufficient for my application.
Could you share a bit more information about the external TDM/I2S communication capabilities in this implementation?
For example, would it be possible to run 2x TDM8 at 192 kHz, and 4x TDM8 at 96 kHz?
One last question – is it possible to run both I2S and TDM lines simultaneously?