function declaration not found

Z

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" <threeinchnail@gmail.com> wrote in message
news:250d541a-46cd-42de-82bf-76a852f83a9e@k2g2000hse.googlegroups.com...
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
 
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
 

Welcome to EDABoard.com

Sponsor

Back
Top