function declaration not found

Discussion in 'VHDL' started by Zhi, Feb 24, 2008.

  1. Zhi

    Zhi Guest

    Here is a package below. It cannot even pass the Syntax check. Error:
    " In Complex_Pkg. function + declared in the PackageDeclaration not
    found.
    In Complex_Pkg. function - declared in the PackageDeclaration not
    found."
    I don't know what is wrong with the function "+/-" declaration.
    Please help!


    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;

    package Complex_Pkg is
    constant length_c: integer :=32;
    type Complex32_Typ is record
    R : signed(length_c-1 downto 0);
    I : signed(length_c-1 downto 0);
    end record;

    type Complex64_Typ is record
    R : signed(2*length_c-1 downto 0);
    I : signed(2*length_c-1 downto 0);
    end record;

    type A2x2C32_Typ is array(1 to 4) of Complex32_Typ;
    type A2x2C64_Typ is array(1 to 4) of Complex64_Typ;

    function "+" (A : Complex32_Typ;
    B : Complex32_Typ) return Complex32_Typ;

    function "-" (A : Complex32_Typ;
    B : Complex32_Typ) return Complex32_Typ;

    function "+" (A : Complex64_Typ;
    B : Complex64_Typ) return Complex64_Typ;

    function "-" (A : Complex64_Typ;
    B : Complex64_Typ) return
    Complex64_Typ;

    function "*" (A : Complex32_Typ;
    B : Complex32_TYp) return Complex64_Typ;

    function "*" (A : A2x2C32_Typ;
    B : A2x2C32_Typ) return A2x2C64_Typ;

    function "+" (A : A2x2C32_Typ;
    B : A2x2C32_Typ) return A2x2C32_Typ;

    function "-" (A : A2x2C32_Typ;
    B : A2x2C32_Typ) return
    A2x2C32_Typ;

    end Complex_Pkg;
    --
    ======================================================================
    package body Complex_Pkg is


    function "+" (A: Complex32_Typ;
    B: Complex32_Typ) return Complex32_Typ is
    variable V: Complex32_Typ;
    begin
    V.R :=A.R + B.R;
    V.I :=A.I + B.I;
    return V;
    end "+";

    function "-" (A: Complex32_Typ;
    B: Complex32_Typ) return Complex32_Typ is
    variable V: Complex32_Typ;
    begin
    V.R := A.R - B.R;
    V.I := A.I - B.I;
    return V;
    end "-";

    function "*" (A: Complex32_Typ;
    B: Complex32_Typ) return Complex64_Typ is
    variable V: Complex64_Typ;
    begin
    V.R :=(A.R * B.R) - (A.I * B.I);
    V.I :=(A.I * B.R) + (A.R * B.I);
    return V;
    end "*";

    function "*"(A: A2x2C32_Typ;
    B: A2x2C32_Typ) return A2x2C64_Typ is
    variable V :A2x2C64_Typ;
    begin
    V(1) :=(A(1) * B(1)) + (A(2) * B(3));
    V(2) :=(A(1) * B(2)) + (A(2) * B(4));
    V(3) :=(A(3) * B(1)) + (A(4) * B(3));
    V(4) :=(A(3) * B(2)) + (A(4) * B(4));
    return V;
    end "*";

    function "+" (A : A2x2C32_Typ;
    B : A2x2C32_Typ) return A2x2C32_Typ is
    variable V: A2x2C32_Typ;
    begin
    for I in A'range loop
    V(I) :=A(I) + B(I);
    end loop;
    return V;
    end "+";


    function "-" (A: A2x2C32_Typ;
    B: A2x2C32_Typ) return A2x2C32_Typ is
    variable V: A2x2C32_Typ;
    begin
    for I in A'range loop
    V(I) :=A(I) - B(I);
    end loop;
    return V;
    end "-";
    end Complex_Pkg;
    Zhi, Feb 24, 2008
    #1
    1. Advertising

  2. Zhi

    KJ Guest

    "Zhi" <> wrote in message
    news:...
    > Here is a package below. It cannot even pass the Syntax check. Error:
    > " In Complex_Pkg. function + declared in the PackageDeclaration not
    > found.
    > In Complex_Pkg. function - declared in the PackageDeclaration not
    > found."
    > I don't know what is wrong with the function "+/-" declaration.
    > Please help!
    >

    You've declared two "+" functions in your package that work with different
    types (that's OK) but in the package body I only see one of those functions
    actually defined (the one that works with 'Complex64_Typ' is missing). Make
    sure that every function that you declare in the package gets defined in the
    package body.

    Kevin Jennings
    KJ, Feb 24, 2008
    #2
    1. Advertising

  3. Zhi wrote:
    > Here is a package below. It cannot even pass the Syntax check.


    vcom -2002 -quiet -work work complex_pkg.vhd
    ** Error: complex_pkg.vhd(109):
    Subprogram '+' declared at line 27 has no body.
    ** Error: complex_pkg.vhd(109):
    Subprogram '-' declared at line 30 has no body.

    The return types in the body don't match those in the package.

    -- Mike Treseler
    Mike Treseler, Feb 24, 2008
    #3
  4. Zhi

    gzidude

    Joined:
    Feb 17, 2008
    Messages:
    19
    off topic for a minute

    Off topic for a minute.

    I have never seen the kind of 'dot-notation' used in that code:

    I'm specifically talking about the V.R and V.I. This particular syntax is new to me. I'd like to look it up so I can learn how to use it properly, but don't know what it's called and therefore cannot look it up. Can anyone clue me in?
    gzidude, Feb 25, 2008
    #4
    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. Noah
    Replies:
    5
    Views:
    944
  2. Ovidesvideo
    Replies:
    4
    Views:
    476
    Andrey Tarasevich
    Dec 10, 2004
  3. Replies:
    4
    Views:
    1,047
    Richard Tobin
    Dec 12, 2006
  4. Bolin
    Replies:
    4
    Views:
    392
  5. Luca Forlizzi
    Replies:
    4
    Views:
    442
    Luca Forlizzi
    Nov 14, 2010
Loading...

Share This Page