Когда сравнение выполняется с использованием знака / без знака, оба операнда расширяются до длины самого длинного операнда, а затем сравниваются.
Итак, для случая «3» у вас есть 4-битное число »0011 "= + 3
vec0 и vec1 =" 11 "= -1.Поскольку они являются SLV, которые рассматриваются как подписанные или фактические подписанные, они расширяются до «1111».Следовательно, «1111» не равно «0011».
При сравнении подписи / slv с целым числом, целое число преобразуется в вектор длиной другого операнда.В обоих случаях литерал 3 не может быть преобразован в 2-битный знак (так как диапазон от -2 до +1)
Для std_logic_signed (нестандартный пакет VHDL) 3 преобразуется в «11» с помощьюхарактер того, как работает функция.Следовательно, вы получаете совпадение (неверно)
Numeric_std имеет функцию проверки, при которой целые числа вне диапазона операнда со знаком (или без знака) автоматически возвращают значение false.
numeric_std - это стандарт VHDL.
Мораль - не беспокойтесь по поводу использования std_logic_signed.