Fix point square root

Discussion in 'VHDL' started by Christian, Apr 25, 2005.

  1. Christian

    Christian Guest

    Hi,
    i am trying to implement a fixpoint square root in vhdl.
    The radicant consists of integer as well as fractional bits like 4.23 - dec.
    Does anyone know a synthesiable algorithm ?
    Thanks in advance
    Christian
     
    Christian, Apr 25, 2005
    #1
    1. Advertising

  2. Christian

    mk Guest

    On 25 Apr 2005 12:17:27 -0700, (Christian) wrote:

    >Hi,
    >i am trying to implement a fixpoint square root in vhdl.
    >The radicant consists of integer as well as fractional bits like 4.23 - dec.
    >Does anyone know a synthesiable algorithm ?
    >Thanks in advance
    >Christian


    The first link here seems nice:
    http://www.google.com/search?hl=en&q=fixed point square root
     
    mk, Apr 25, 2005
    #2
    1. Advertising

  3. Christian

    Christian Guest

    mk<kal*@dspia.*comdelete> wrote in message news:<>...
    > On 25 Apr 2005 12:17:27 -0700, (Christian) wrote:
    >
    > >Hi,
    > >i am trying to implement a fixpoint square root in vhdl.
    > >The radicant consists of integer as well as fractional bits like 4.23 - dec.
    > >Does anyone know a synthesiable algorithm ?
    > >Thanks in advance
    > >Christian

    >
    > The first link here seems nice:
    > http://www.google.com/search?hl=en&q=fixed point square root


    Thanks for your reply ! I tried to translate the c source code into
    vhdl code but i don't get the right results.
    If anyone has an idea what i did wrong, this would be very nice

    Christian

    typedef long TFract; /* 2 integer bits, 30 fractional bits */
    TFract
    FFracSqrt(TFract x)
    {
    register unsigned long root, remHi, remLo, testDiv, count;
    root = 0; /* Clear root */
    remHi = 0; /* Clear high part of partial remainder */
    remLo = x; /* Get argument into low part of partial remainder */
    count = 30; /* Load loop counter */
    Apple Computer, Inc. Media Technologies: Computer Graphics Page 1
    Turkowski Fixed Point Square Root 3 October 1994
    do {
    remHi = (remHi<<2) | (remLo>>30); remLo <<= 2; /* get 2 bits of arg */
    root <<= 1; /* Get ready for the next bit in the root */
    testDiv = (root << 1) + 1; /* Test radical */
    if (remHi >= testDiv) {
    remHi -= testDiv;
    root++;
    }
    } while (count-- != 0);
    return(root);
    }


    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;

    entity SQUARE_ROOT is

    port ( arg : in std_logic_vector(31 downto 0);

    output : out std_logic_vector(31 downto 0)

    );

    end SQUARE_ROOT;

    architecture BEHAVIOR of SQUARE_ROOT is

    begin


    process(arg)



    variable root : std_logic_vector(31 downto 0):=
    "00000000000000000000000000000000";
    variable remHi : std_logic_vector(31 downto 0):=
    "00000000000000000000000000000000";
    variable remLo : std_logic_vector(31 downto 0);
    variable testDiv : std_logic_vector(31 downto 0);

    variable remHi_temp : std_logic_vector(31 downto 0);
    variable remLo_temp : std_logic_vector(31 downto 0);
    variable root_temp : std_logic_vector(31 downto 0);


    begin


    remLo:= arg;


    LOOP1: for I in 1 to 30 loop

    remHi_temp:= remHi(remHi'high-2 downto 0) & "00";

    remLo_temp:= "000000000000000000000000000000" &
    remLo(remLo'high downto remLo'high-1);

    remHi:= remHi_temp or remLo_temp;

    remLo:= remLo(remLo'high-2 downto 0) & "00";

    root:= root(root'high downto 1) & '0';

    root_temp:= root;

    testDiv:= root_temp(root_temp'high downto 1) & '1';

    if ( remHi >= testDiv) then

    remHi:= remHi - testDiv;

    root:= root + 1;

    end if;


    end loop LOOP1;

    output <= root;

    end process;

    end BEHAVIOR;
     
    Christian, Apr 26, 2005
    #3
  4. (Christian) wrote in message news:<>...
    > Hi,
    > i am trying to implement a fixpoint square root in vhdl.
    > The radicant consists of integer as well as fractional bits like 4.23 - dec.
    > Does anyone know a synthesiable algorithm ?
    > Thanks in advance
    > Christian


    There is a couple of pages about this in the march 2005 issue of ieee signal
    processing magazine (dsp tips and tricks).
    In short it's about "quick and dirty" sqrts (sacrifice accuracy for speed),
    where you calculate (iterate) 1/sqrt(x) and finnish off with a multiplication
    with x. One iterative scheme is p(n+1)=0.5*p(n)*(3-x*p(n)*p(n)).
    Hope this helps /Pontus
     
    Pontus Stenstrom, Apr 27, 2005
    #4
  5. Christian

    vipinlal

    Joined:
    Feb 25, 2010
    Messages:
    38
    get a function from here..
    vhdlguru.blogspot.com/2010/03/vhdl-function-for-finding-square-root.html
     
    vipinlal, Mar 18, 2010
    #5
  6. Christian

    jeppe

    Joined:
    Mar 10, 2008
    Messages:
    348
    Location:
    Denmark
    You must surely visit this page - the answer to your needs.

    users-tima.imag.fr/cis/guyot/Cours/Oparithm/english/Extrac.htm

    your welcome
    Jeppe
     
    jeppe, Mar 18, 2010
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Luca
    Replies:
    1
    Views:
    1,056
    salman sheikh
    Apr 29, 2004
  2. Replies:
    0
    Views:
    1,255
  3. Xah Lee
    Replies:
    22
    Views:
    1,160
    Tim Roberts
    Mar 21, 2006
  4. Xah Lee
    Replies:
    23
    Views:
    1,109
    Tim Roberts
    Mar 21, 2006
  5. Saraswati lakki
    Replies:
    0
    Views:
    1,381
    Saraswati lakki
    Jan 6, 2012
Loading...

Share This Page