Да.Например:
library ieee;
use ieee.numeric_std.all;
...
signal a : signed(31 downto 0); -- 32-bit signed value
signal b : signed(7 downto 0); -- 8-bit signed value
signal c : signed(39 downto 0); -- 40-bit signed value
...
c <= a * b; -- Note 'c' is as wide as the sum of a's length and b's length
Пакет numeric_std
определяет типы unsigned
и signed
.Он также определяет операторы для них.Обратите внимание, что также допустимо (с некоторыми ограничениями) смешивать signed
и unsigned
с integers
и naturals
.Например:
signal a : signed(31 downto 0);
signal b : signed(31 downto 0);
...
b <= a * 17; -- Multiply by a constant
В этих случаях необходимо соблюдать осторожность, чтобы избежать переполнения.
И эти являются синтезируемыми (мы используем их все время вреальные проекты).