Post Go back to editing

ADAU144x: 3584 instructions in 4096 addresses

The ADAU144x devices have 4096 addresses in program RAM, but can only execute 3584 instructions per frame. The compiler output will show the user that they are using X instructions out of a total of 4096, however, if a program exceeds 3584 instructions, it will not run properly on the DSP.

The reason for this is that the ADAU144x core contains branching and looping instructions that allow the program counter to jump around in RAM at any time. This makes it possible to create conditional code branches. For example, a conditional statement could select processing path A or B. Let's call the rest of the program instructions, which are executed regardless of the conditional statement, are called C.

In theory, A + B + C could exceed 3584 instructions, but as long as A + C < 3584 and B + C < 3584 instructions, the program will run properly on the DSP.

So far, we haven't implemented this functionality on the DSP, so the discrepancy between the datasheet and the compiler output might be confusing. Hopefully this explanation makes it easier to understand.

In any case, for now, make sure your ADAU144x programs never exceed 3584 instructions for 48 kHz, 1792 instructions for 96 kHz, or 896 instructions for 192 kHz!!!

  • BrettG,

    The compiler output will show the user that they are using X instructions out of a total of 4096

    I'm using SigmaStudio 3.3 Build 0 Rev 612 and even though it says 4096 up top, it is correctly showing MIPS % out of 3584, not 4096. The compiiler_output.txt file says the same.

  • Hi MagicRub. Good catch. The software team actually implemented this at my request. The idea is that program RAM is actually 4096, but the number of instructions that can be executed per sample is 3584. Typically in DSP programming lingo, the term MIPS is used  interchangeably with "instructions per sample", even though technically  they're not the same thing. MIPS actually stands for million instructions per second, and for the ADAU144x the maximum allowable MIPS is InstructionsPerSample * SamplesPerSecond = 3,584 * 48,000 = 172,032,000, which is why the core clock runs at 172.032 MHz.

    In any case, the compiler output is showing a percentage of instructions per sample, the maximum of which is 3584. Sorry if that's confusing! Perhaps we can word this in a more easy-to-understand way in a future revision.

  • I'm good, I was just trying to help.