[sdiy] SHARC DSP programming

Richie Burnett rburnett at richieburnett.co.uk
Wed Sep 28 13:19:52 CEST 2016


Thanks Brian.

> I'm more of a TMS320 expert, where there is a bit-shift option on the MAC 
> instruction as well as many other instructions that operate on the full 
> 40-bit accumulator width. This option is rather limited, though, allowing 
> only 1 bit shift, not any more. It's called FRCT mode.

The SHARC offsers the same thing.  It shifts the multiply result left one 
place when you tell it that you're working with Q1.31 fixed-point 
fractionals to suppress the extra sign-bit that would otherwise be generated 
in the result.  I'm implementing that already.

> ...What might be the case is that fixed-point developers are expected to 
> scale all of the processing stages so that the final output is in range 
> for being quantized to the smaller, general-purpose registers. Not quite 
> sure how to accomplish that with their instruction set, but perhaps it's a 
> matter of scaling the coefficients before applying the MAC or other 
> instructions.

Yes, I see what you are saying, that may indeed be their viewpoint. 
However, with Q1.31 (1 sign bit, 31 fractional) fixed-point fractional 
format you can only specify coefficients between -1 and +1, so for instance 
when mixing multiple signal sources it's hard to get a gain of more than 1. 
What I'm used to is being able to apply 2 left shifts to the mix sum in the 
MAC accumulator (80-bits) to get a gain of 4 before saturating and rounding 
this value back to 32-bits.  The two left shifts to the total effectively 
make the mix coefficients Q3.29 format (1 sign bit, 2 whole and 29 
fractional) so I can get gains between -4 and +4.  What I'm wanting to do 
really isn't that unusual because the coefficient range for standard 
bread-and-butter DF1 biquad implementations is -2 to +2, so I thought there 
would be built in support for normalising to this range in fixed-point mode!

I'll have a look for some more of ADI's examples.  Then I'll just have to 
work around this limitation in fixed-point calculations, or switch them to 
floating-point.

-Richie, 



More information about the Synth-diy mailing list