Я предлагаю не использовать std_logic и std_logic_vector, если вы не попытаетесь смоделировать сигналы с тремя состояниями - что я считаю своего рода злом. Вместо этого используются std_ulogic и std_ulogic_vector, которые не разрешены. Это имеет преимущество в обнаружении нескольких назначений неразрешенных сигналов во время компиляции. С разрешенными сигналами вы обнаружите эту ошибку в конце моделирования или синтеза.
Недостаток: это предложение не очень распространено, и использование сторонней логики с std_logic может потребовать некоторых типов.
Для арифметики std_ulogic_vector используйте std_numeric. Затем необходимо выполнить приведение к знаку или неподписанию перед операцией и привести результат обратно к std_ulogic_vector. НЕТ такой вещи, как стандартная библиотека ieee.std_ulogic_unsigned для неразрешенных сигналов.
adder_result <= std_ulogic_vector( unsigned(operant1) + unsigned(operant2) ) ;
increment <= std_ulogic_vector( unsigned(operant) + 1 ) ;
Разница между целым, натуральным, положительным с одной стороны и неподписанным и подписанным с другой - это представление.
Подписанные и неподписанные являются подтипом std_logic_vector и больше похожи на связку (или более точный массив) проводов std_logic.
Целочисленные типы - это скорее математическое представление числа. Они обычно используются больше с обобщениями, генерируют циклы и индекс массива. Но иногда синтез может обрабатывать их и для арифметических единиц.