MiP wrote:
> > If you're using a lookup table of say 10 bits, that's only 1024
> > entries, fairly small.
> > Assumingthe output is to a DAC, you only need to lookup 0 to 90
> > degrees;
> > you then start at address 0, increment address up to 1023, then back to
> > 0 then flip the (extra) msb sign bit to the DAC and repeat. e.g. 0-90
> > & 90-180 are +ve, 180-270 & 270-360 are -ve sines.
> >
> > Also, you could use CORDIC (I've just beem inroduced to them myself)
> > Xilinx do a free cordic in corgen, so might be useful, assuming you
> > have a faster clock to do the cordic calcs.
>
> Sorry but I didn't understand you clearly what do you mean.
> May I get an example of this implementation?
>
> Again thanks a lot
> for support.
Sin(0) = 0 or ~ 0000000000 for 10 bit lookup table (LUT)
Sin(90) = 1 or ~ 1111111111 for 10 bit LUT.
Sin (30) = 0.5 or ~ 1000000000 for 10 bit LUT
Sin (75) = 0.9659 or ~ 1111011101 for LUT
e.g. calculate sin(x), answer will be between 0 & 1.
multiply by 2 to power 'N', for N bits, so times 1024 for your 10 bit
example.
Now put all the binary values into your lookup table (Xilinx block
ram).
Index through the LUT addresses with a bottom 10 bits of a 12 bit
counter.
bit(10) is used to invert the addresses to the LUT.
bit(11) is used as a sign bit to the DAC, so if 0 then o/p is +ve & if
1 then o/p is -ve.
|