signed multiplication

Discussion in 'VHDL' started by priya, Nov 16, 2006.

1. priyaGuest

hi all
Y<=Y+(A*B-C*D);
where y,A,B,C,D are STD_LOGIC_VECTOR form.
here A,B,C,D are all variables
since by default STD_LOGIC_VECTOR is Unsigned .
so the result which i m getting is not what is required. since its
taking the unsigned equivalent of A*B and C*D while subtracting
best regards,
priya

priya, Nov 16, 2006

2. NivGuest

priya wrote:
> hi all
> Y<=Y+(A*B-C*D);
> where y,A,B,C,D are STD_LOGIC_VECTOR form.
> here A,B,C,D are all variables
> since by default STD_LOGIC_VECTOR is Unsigned .
> so the result which i m getting is not what is required. since its
> taking the unsigned equivalent of A*B and C*D while subtracting
> best regards,
> priya

Assuming you're using ieee.numeric_std, you have to cast SLV's into
SIGNED or UNSIGNED before doing the math, then cast back to a SLV

Y <= STD_LOGIC_VECTOR(UNSIGNED(Y) + ((UNSIGNED(A) * (UNSIGNED(B)) -
(UNSIGNED(C) * UNSIGNED(D)) )

(Replace UNSIGNED with SIGNED where appropriate. Why not declare A,B,
C & D as UNSIGNED if they not ports?)

That's what I'd try anyway,

Kev P.

Niv, Nov 16, 2006

3. priyaGuest

hi
i had taken y,A,B,C,D are STD_LOGIC_VECTOR
n tried wat u said
but ended up wwith failure
one more thing i want 2 ask i m using max n min function
for that i had included NUMERIC_STD library.
still i m ending up with errors
best regards,
priya
Niv wrote:
> priya wrote:
> > hi all
> > Y<=Y+(A*B-C*D);
> > where y,A,B,C,D are STD_LOGIC_VECTOR form.
> > here A,B,C,D are all variables
> > since by default STD_LOGIC_VECTOR is Unsigned .
> > so the result which i m getting is not what is required. since its
> > taking the unsigned equivalent of A*B and C*D while subtracting
> > best regards,
> > priya

>
> Assuming you're using ieee.numeric_std, you have to cast SLV's into
> SIGNED or UNSIGNED before doing the math, then cast back to a SLV
>
> Y <= STD_LOGIC_VECTOR(UNSIGNED(Y) + ((UNSIGNED(A) * (UNSIGNED(B)) -
> (UNSIGNED(C) * UNSIGNED(D)) )
>
> (Replace UNSIGNED with SIGNED where appropriate. Why not declare A,B,
> C & D as UNSIGNED if they not ports?)
>
> That's what I'd try anyway,
>
> Kev P.

priya, Nov 17, 2006