There is not a C compiler for SigmaDSP, and we do not support custom assembly coding in SigmaStudio. The built-in library includes many different signal processing blocks. Low-level blocks, such as multipliers and delays, can be wired together in SigmaStudio to create a custom algorithm if the included libraries do not have the functions you want. If there are processing blocks that you'd like to see included in future versions of the tool, feel free to let us know what you're looking for in the EngineerZone forum.
If you are looking to implement a specific algorithm, please provide the details so we can determine if it could be implemented using existing blocks in the current library. If it is not supported by the current library, we can identify what additional functionality is required, and our software team could potentially implement that function in a future SigmaStudio update.
This FAQ was generated from the following discussion: Upsample / downsample in SigmaStudio (or custom blocks)
Writing C for SigmaDSP is almost impossible, because of the extremely specific architecture of these DSP. For example, they don't have any stack, so a call to a function is almost impossible to implement (or the compiler would need to "inline" them, which would be extremely heavy in terms of program memory consumption)
Now, about assembly code... In fact, that's exactly what SigmaStudio does
The name used by ADI within Sigma Studio is "compilation", but in fact, SigmaStudio only generates assembly code for each module you have inserted in your program, and the assembly process replaces all labels with absolute address (this is nothing else than macro assembling)
Now, you have to know that assembly code within SigmaDSP is quite far away from what you could expect especially if you take micro controllers as a reference. The SigmaDSPs do not have any jump/call concept. They use a concept called sometimes "streaming processing", in which all instructions are parsed during a sample period. In other terms, on a ADAU1701 for example, the 1024 instructions are ALWAYS executed each time a new sample period is started.
The key is that every instruction in SigmaDSP has a condition field which says if the instruction shall be executed or not (you can read that as "do that if this condition is true). So, you have basically a condition for each of the 1024 instructions... When the condition is not met, the instruction is executed but the result is ignored (in other terms, it's like if the instruction is replaced dynamically by a NOP)
That makes assembly programming of the SigmaDSP quite strange at first sight and is not such straightforward process from pseudo-code or flow chart, if you compare it with what can be done with micro-controllers for example
Now, the problem is that ADI does not publish the assembly code specification of Sigma DSP chips (which does not mean that you can't find it...). That means that if you want to write assembly code for these chips, you will need to create also your own compilation chain (since you can't do it from SigmaStudio)