Re: sqrt(a^2 + b^2) in synthesizable VHDL?



Marko S wrote:
Thank you all. I will have a look at "Dijkstra's square root". I have 2000 clock cycles at 40 Mhz to complete the calculation (It should be enough). It is used for calculating the AM envelop after demodulating the signal with a coherent detector



You can se the principle of the detector at http://www.cycom.co.uk/art1.html.





"Symon" <symon_brewer@xxxxxxxxxxx> wrote in message news:4462fbb4$0$15793$14726298@xxxxxxxxxxxxxxxxxx

"Michael Schöberl" <MSchoeberl@xxxxxxxxxxxx> wrote in message news:4462f354$1@xxxxxxxxxxxxxx

Marko S schrieb:

How do i calculate sqrt(a^2 + b^2) in synthesizable VHDL?
The signals a and b are 32 bit signed fix point numbers (std_logic_vector (31 downto 0)).

how accurate? how fast? latency?

just for the sqrt(x) I once worked an idea to take len=ceil(log_2(x)) by counting the length of x (leading 0s) ...
then you shift x>>(len/2) or something (+1?) ... this worked as a good approximation and I added only one or two stages of a newton-raphson


Hi Marko,
For square root, you could use modified Dijkstra's square root.

http://lib.tkk.fi/Diss/2005/isbn9512275279/article3.pdf

One clock per output bit. No multipliers.

HTH, Syms.





You aren't really looking for square root, you are looking for vector magnitude. Vector magnitude can be computed without computing the square root. For arbitrary precision, you can use the cordic algorithm in vectoring mode. It basically rotates the vector to the I axis using a series of progressively smaller fixed angle rotations selected so that each elemental rotation is done with a shift and add operation. After rotating the vector the I axis, the magnitude is read directly from the non-zero (I component) of the rotated vector. If you don't need a lot of precision, there are table methods and linear approximations (the most famous is "larger plus half smaller" that will often get you a good enough answer with less computation. Either way, computing magnitude using a square root is going about it the hard way (hardware-wise anyway). For 32 bit arguments, CORDIC is going to be your best bet.
.



Relevant Pages

  • Re: what is etymology? (linguistics and biology)
    ... actually carry out the calculation you propose me and John ... Horton Conway of Princeton proposed me and everybody else ... means to see, behold -- getting aware of a regularity, a pattern ... the square root of 2 began with that continued fraction ... ...
    (sci.lang)
  • Re: find out the problem
    ... >Anyway, computing the square root normally involves branches, at least to ... Hardware square root instructions are pretty common; ... If one were using a hardware square root instruction, ... likely going to get you into conditionals... ...
    (comp.lang.c)
  • Re: Long absence
    ... the fact that the math package couldn't run on embedded, ... Actually I applied my computing knowledge at the ... ??I could compute square root of sums of squares using 4 ...
    (talk.origins)
  • Re: Long absence
    ... the fact that the math package couldn't run on embedded, ... Actually I applied my computing knowledge at the ... ??I could compute square root of sums of squares using 4 ...
    (talk.origins)
  • Re: Pi with bad calculator
    ... In sci.physics, Jim Black ... extravagance doesn't go beyond a mere square root ... approximate a circle. ... we do the calculation up to ...
    (sci.physics)