Here is an article describing
a fairy tale (sadly) idea of how one would run a project for creating a product
from DSP chips. I’ll have to say it makes a lot of sense but what would
be more interesting is some hard data on anyone that has actually managed to
apply this idea:
This is OK for a simple algorithm, but what if it is even moderately complex?
Then you are dealing with (i) a very complex algorithm and (ii) very complex
assembler all at the same time. This is usually too much for mere mortals (and
even minor deities). The result is long, painful development, failed projects,
late nights, angry spouses, and lots of pizza (well its not all bad I guess).
The trick is to divide and conquer. Make sure we are only hitting one tough
problem at any given time.
One approach I have found very useful is bit
exact porting to assembler.
There are two important steps:
- At the fixed point C stage, you test very very carefully. Run batteries
of tests and simulations. These can be performed on a regular PC in non real
time, using powerful debuggers. The idea is to verify that:
(i) The algorithm is OK and
(ii) The fixed point port works OK.
In particular (ii) is very tough, so its nice to handle this in a relatively
benign environment like a PC or
workstation.
- Port each function to real time assembler one by one. Test each function
against the fixed point C reference. Make sure the functions give IDENTICAL
output – right down to the last bit. This takes a lot of discipline – near
enough is NOT good enough.
Kudos to Joel’s Reddit page for this one.