Does using index selectable muxes/demuxes "disable" unselected code for performance reasons?

Hello, this is my first post and I have a question about performance. I'm using the ADAU1701.

If you use index selectable multiplexers and demultiplexers to select between different algorithms, GPIO inputs, or whatever, do the blocks that are out of the signal path still run every sample? Or are those paths paused until selected?

Consider this example: If you select the "Param EQ1" block with GPIO 2, are "Compressor1" and "SoftClip1" still being computed every sample?

A related follow-up question: Is there any advantage to having a "lean" schematic with few blocks, compared to a complicated schematic with lots of blocks? I'm referring to matters such as current consumption and DSP lifespan, not code readability or project maintainability.

  • +1
    •  Super User 
    on Apr 27, 2020 2:50 AM

         Hello Tony,

         Welcome to the forum!  The first-generation "Sigma100" DSPs such as the AD1940 and the ADAU1701 execute every block during each sample interval, regardless of any dead-ends in your project.  They have no branch instruction with which to skip around non-referenced code, and any empty code space is padded with NOPs.  The difference in power / heat between a complex project and a tiny one executing mostly NOPs is insignificant.  The good news is these chips are conservatively designed -- where I work we have thousands of -1701's in products out in the field and none have failed.  There's even been a few engineers who have inadvertently overclocked a -1701 by a factor of two, and didn't blow it up while wondering why all their filters tested at double frequency.

         That being said, you'll often find several ways to perform a needed function, all with different instruction counts.  An obvious example is to use an index-selectable filter instead of a bank of filters chosen by a MUX.  There's a certain joy in conserving instructions.  If nothing else, you'll be less likely to run out of them.  The -1701 runs at 49.152 MIPS, so at the usual 48K sample rate you have 49152000 / 48000 = 1024 instructions (of which around 1015 are available as some go to overhead).

         Best regards,


  • Thanks Bob, that's very helpful and much appreciated. I'm glad to hear these are resilient.