The basic arithmetic operations, addition (`+`

), subtraction (`-`

) and multiplication (`*`

) are defined on the `unsigned`

and `signed`

types.
The `+`

and `-`

operators can also be used to indicate a positive or negative value.

Each of the operators can take `unsigned`

, `signed`

and `integer`

values as arguments. They can return `unsigned`

, `signed`

or `std_logic_vector`

values as needed.

Note that this library *doesn't* allow you to do arithmetic on `std_logic_vector`

values. That's because it's impossible for it to determine whether a particular `std_logic_vector`

is representing a signed or unsigned value. To do this, you need to use either the `std_logic_unsigned`

or `std_logic_signed`

libraries.

signal u1, u2 : unsigned (3 downto 0); signal s1 : signed (3 downto 0); signal s2 : signed (4 downto 0); signal v1 : std_logic_vector (3 downto 0); signal v2 : std_logic_vector (4 downto 0); signal i1, i2 : integer; ... u1 <= "1001"; -- = 9 s1 <= "1001"; -- = -7 i1 <= 16; wait for 10 ns; s2 <= u1 + s1; -- = 2 v2 <= u1 + s1; -- = "0010" u2 <= i1 - u1; -- = 7 s1 <= -s1; -- = 7