Background
Each TLQ-EXPANDER extends TLQ-MODULE with 4in/4out audio channels, for up to 12in/12out total. Currently, stock xbeam only sees the internal audio channels for 4in/4out operation. The TRIPLE-MIRROR example project supports expanders (as documented), but it is the only such example. We need support for using the expanders elsewhere, with xbeam being the most interesting usecase, especially for USB audio.
Experimental xbeam-ex build
xbeam-ex-611c08b6-r5.tar.gz
NOTE: taken from this PR: #156
Attached above is a build of xbeam-ex which enumerates as a 12in/12out audio device, and supports both PMOD ports (ex0/ex1) having a TLQ-EXPANDER attached. As far as I can tell, it enumerates and runs fine, but I would like to spend more time testing this before releasing it 'officially'. The main difficulty here is different operating systems and computers often behave differently with channel counts >8, and so I need to try this on a lot more machines to be confident. I have tried the 12x12 device on 1 linux machine, 2 mac machines, and 1 windows machine so far, with no showstoppers, keeping in mind the notes below.
Trying it yourself
If you're interested in trying this out already:
- Connect 1 or 2
TLQ-EXPANDER modules to Tiliqua: both need 2 cables, 1 power cable and 1 PMOD cable (both included). If you only have 1, suggest using ex0. Be careful with the orientation. Check the manual page.
- Turn on Tiliqua.
- Flash
xbeam-ex (attached above) to a Tiliqua slot using the webflasher or command line utilities as per the instructions.
- Open up
xbeam-ex - using the MISC->plot-io option you can select which set of audio IOs to plot (i.e, which of the 3x 4in/4out boards to use): you can choose builtin/ex0/ex1 - this verifies your TLQ-EXPANDER is connected correctly and working. If MISC->usb-mode is bypass, you should hear any input waveforms mirrored on the same numbered outputs.
- In
usb-mode=bypass mode, all 12x inputs are routed to the 12x outputs, ignoring USB. in usb-mode=enabled mode, all 12x inputs are routed to the PC, and all 12x outputs routed to Tiliqua's outputs.
- You can still only visualize 4 channels at a time, but you can use all 12 channels over USB simultaneously/separately.
- Before connecting USB-C to the
usb2 port on Tiliqua, make sure MISC->usb-mode is enabled. This makes clock sync between your PC and Tiliqua happen a bit faster (you will notice clocks going out of sync if you switch to bypass and back, it will take a minute or 2 for the stutters to disappear - this will be fixed)
- Now you can connect your host PC. Tiliqua should appear as a 12in/12out audio device.
- On both Linux and Mac, this seems to work out of the box with most programs.
- Windows, however, is special, and will not see all the channels correctly without an ASIO driver. See 'Windows Tips' below.
- With this experimental build,
xbeam-ex always appears as a 12in/12out audio device, irrespective of whether you have 0, 1 or 2 pmods connected. The mapping is:
- in0-in3, out0-out3: builtin 4in/4out
- in4-in7, out4-out7: ex0 expander 4in/4out (garbage/zeroes if no expander connected here)
- in8-in11, out8-out11: ex1 expander 4in/4out (garbage/zeroes if no expander connected here)
Notes / Gotchas
- Only 48kHz sample rate is supported with this many channels. Always use that sample rate. Block size 256 works for my machines, but if you have a slower machine you might need larger block sizes.
- Scaling does not currently match VCVRack. 10V on Tiliqua corresponds to about 6V in VCVRack. You can fix this in VCVRack by adding scaling components, but maybe it would be nice to have a special Tiliqua mode for VCVRack in the future which changes the scaling mode to match.
- I had to remove some bits of
xbeam (like the tweakable delay lines, and shrink the Vex cache) to get it to fit! This is REALLY pushing the edge of what fits on the FPGA (98% LUT usage!). I don't want any bitstream using more than 95%, so some optimization is needed there.
- For some reason, with these high channel counts I found it sometimes takes a minute or 2 for the clocks to sync back correctly, especially if one accidentally switches to
usb-mode=bypass in the middle of doing USB audio things. So if you are getting pops/crackles, leave it for a minute or two, or ideally, power cycle without USB connected, switch usb-mode=enabled and only then connect the USB device. I aim to make this more robust soon.
Windows Tips
Unlike Mac or Linux, Windows will not see all the audio channels without an ASIO driver.
- I recommend FlexASIO and FlexASIO GUI.
- Here is the
FlexASIO.toml I end up with after configuring FlexAsio GUI for 12x12 operation and writing it to the default location (you can't use this directly due to the german device names probably, but you should end up with something similar from the FlexAsio GUI - there are plenty of guides on how to set this up on the web):
backend = "Windows WASAPI"
bufferSizeSamples = 256
[input]
device = "Mikrofon (2- Tiliqua)"
channels = 12
[output]
device = "Lautsprecher (2- Tiliqua)"
channels = 12
- Note: if you have a problem where you can't open the audio device, I found that uninstalling the Tiliqua device in device manager and reconnecting it would resolve this - the reason is that if you run normal 4ch
xbeam, windows expects the device to have 4 channels and caches this somewhere in the registry, so if you connect 12ch xbeam-ex, it gets confused. You might need to nuke that cache if you swap between them. In theory, I changed the USB device serial and version in the above bitstream to make this workaround 'not needed', but it might still be a useful tip.
- Here's VCVRack running on Windows with 12x12 channels
- I am sending a VCO to the first output of all 3x PMODs, looping it back to the input of the same PMOD, and then showing the loopback stream on VCVRack scopes
- This shows we truly have all 3 pmods with 12x12 channels running
PC (vco) -> Tiliqua DAC -> loopback cable -> Tiliqua ADC -> PC (scope) !
VCVRack on Windows 11 with FlexAsio device and 12in/12out channels running simultaneously

Physical setup

Background
Each
TLQ-EXPANDERextendsTLQ-MODULEwith 4in/4out audio channels, for up to 12in/12out total. Currently, stockxbeamonly sees the internal audio channels for 4in/4out operation. TheTRIPLE-MIRRORexample project supports expanders (as documented), but it is the only such example. We need support for using the expanders elsewhere, withxbeambeing the most interesting usecase, especially for USB audio.Experimental
xbeam-exbuildxbeam-ex-611c08b6-r5.tar.gz
NOTE: taken from this PR: #156
Attached above is a build of
xbeam-exwhich enumerates as a 12in/12out audio device, and supports both PMOD ports (ex0/ex1) having aTLQ-EXPANDERattached. As far as I can tell, it enumerates and runs fine, but I would like to spend more time testing this before releasing it 'officially'. The main difficulty here is different operating systems and computers often behave differently with channel counts >8, and so I need to try this on a lot more machines to be confident. I have tried the 12x12 device on 1 linux machine, 2 mac machines, and 1 windows machine so far, with no showstoppers, keeping in mind the notes below.Trying it yourself
If you're interested in trying this out already:
TLQ-EXPANDERmodules to Tiliqua: both need 2 cables, 1 power cable and 1 PMOD cable (both included). If you only have 1, suggest usingex0. Be careful with the orientation. Check the manual page.xbeam-ex(attached above) to a Tiliqua slot using the webflasher or command line utilities as per the instructions.xbeam-ex- using theMISC->plot-iooption you can select which set of audio IOs to plot (i.e, which of the 3x 4in/4out boards to use): you can choosebuiltin/ex0/ex1- this verifies yourTLQ-EXPANDERis connected correctly and working. IfMISC->usb-modeisbypass, you should hear any input waveforms mirrored on the same numbered outputs.usb-mode=bypassmode, all 12x inputs are routed to the 12x outputs, ignoring USB. inusb-mode=enabledmode, all 12x inputs are routed to the PC, and all 12x outputs routed to Tiliqua's outputs.usb2port on Tiliqua, make sureMISC->usb-modeisenabled. This makes clock sync between your PC and Tiliqua happen a bit faster (you will notice clocks going out of sync if you switch tobypassand back, it will take a minute or 2 for the stutters to disappear - this will be fixed)xbeam-exalways appears as a 12in/12out audio device, irrespective of whether you have 0, 1 or 2 pmods connected. The mapping is:Notes / Gotchas
xbeam(like the tweakable delay lines, and shrink the Vex cache) to get it to fit! This is REALLY pushing the edge of what fits on the FPGA (98% LUT usage!). I don't want any bitstream using more than 95%, so some optimization is needed there.usb-mode=bypassin the middle of doing USB audio things. So if you are getting pops/crackles, leave it for a minute or two, or ideally, power cycle without USB connected, switchusb-mode=enabledand only then connect the USB device. I aim to make this more robust soon.Windows Tips
Unlike Mac or Linux, Windows will not see all the audio channels without an ASIO driver.
FlexASIO.tomlI end up with after configuring FlexAsio GUI for 12x12 operation and writing it to the default location (you can't use this directly due to the german device names probably, but you should end up with something similar from the FlexAsio GUI - there are plenty of guides on how to set this up on the web):xbeam, windows expects the device to have 4 channels and caches this somewhere in the registry, so if you connect 12chxbeam-ex, it gets confused. You might need to nuke that cache if you swap between them. In theory, I changed the USB device serial and version in the above bitstream to make this workaround 'not needed', but it might still be a useful tip.PC (vco) -> Tiliqua DAC -> loopback cable -> Tiliqua ADC -> PC (scope)!VCVRack on Windows 11 with FlexAsio device and 12in/12out channels running simultaneously


Physical setup