I have this:
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
USE ieee.std_logic_arith.all;
ENTITY FullSubtracter1 is port(In1, In2: in std_logic_vector(31 downto 0);
Overflow: in std_logic_vector(0 downto 0);
Diff: out std_logic_vector(31 downto 0));
end FullSubtracter1;
ARCHITECTURE FullSubtracter1_1 of FullSubtracter1 is
signal tmpDiff: std_logic_vector(32 downto 0);
signal tmpOverflow: std_logic_vector(0 downto 0);
BEGIN
tmpDiff <= std_logic_vector(conv_signed(to_integer(signed(In1))
- to_integer(signed(In2)), Diff'length), Diff'length);
Diff <= tmpDiff;
tmpOverflow <= '1' WHEN (In1(15)=In2(15) AND tmpDiff(15)/=In1(15)) or
(In1(15)/=In2(15) AND tmpDiff(15)/=In1(15)) ELSE '0';
Overflow <= tmpOverflow;
END FullSubtracter1_1;
And I get on this line of code:
tmpDiff <= std_logic_vector(conv_signed(to_integer(signed(In1))
- to_integer(signed(In2)), Diff'length), Diff'length);
The below messages:
Error: C:/Modeltech_pe_edu_10.4a/examples/Full_Subtracter1.vhd(16):(vcom-1078) Identifier "signed" is not directly visible and then this message:
Error: C:/Modeltech_pe_edu_10.4a/examples/Full_Subtracter1.vhd(16): (vcom-1394) Type conversion operand must be a single expression that is not a range.
Any suggestion?