function declaration not found

Z

Zhi

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;
 
K

KJ

Zhi said:
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
 
M

Mike Treseler

Zhi said:
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
 
Joined
Feb 17, 2008
Messages
19
Reaction score
0
off topic for a minute

Off topic for a minute.

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

variable V: Complex64_Typ;

R : signed(length_c-1 downto 0);
I : signed(length_c-1 downto 0);

V.R :=(A.R * B.R) - (A.I * B.I);
V.I :=(A.I * B.R) + (A.R * B.I);

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?
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top