ramlogo
Newbie level 3
Hi,
I am trying to work out a LOG10 module in verilog by the tutorial
https://www.mikrocontroller.net/attachment/31117/cordic1.pdf
so far so good, i got this module working and pipelined, and the error is <0.002.
BUT, there is a restriction by this algorithm, that is:
according to the algorithm, the range of input(mW) is restricted to
1/prod(1+2.^(-x)) to 1/prod(1-2.^(-x)), where
0.41942884 < input(mW) < 3.46269378
Now I want to extend the range of input, ideally from 0.0001 to 10000. I tried to pre-scale the the input by the identity: log(a*b)=log(a)+log(b), it works, but at the same time, the error is rising to 0.1(or worse), which is not acceptable.
anyway, here can anyone give me some idea on extending the input range but without any accuency decrease
any advice will be appreciate.
Thank in advance
Regards,
Jerome G. J.
I am trying to work out a LOG10 module in verilog by the tutorial
https://www.mikrocontroller.net/attachment/31117/cordic1.pdf
so far so good, i got this module working and pipelined, and the error is <0.002.
BUT, there is a restriction by this algorithm, that is:
according to the algorithm, the range of input(mW) is restricted to
1/prod(1+2.^(-x)) to 1/prod(1-2.^(-x)), where
0.41942884 < input(mW) < 3.46269378
Now I want to extend the range of input, ideally from 0.0001 to 10000. I tried to pre-scale the the input by the identity: log(a*b)=log(a)+log(b), it works, but at the same time, the error is rising to 0.1(or worse), which is not acceptable.
anyway, here can anyone give me some idea on extending the input range but without any accuency decrease
any advice will be appreciate.
Thank in advance
Regards,
Jerome G. J.