Unsigned_4
- это «модульный тип», принимающий значения 0, 1, .. 14, 15 и округляющий.
U : Unsigned_4;
begin
U := Unsigned_4'Last; -- 15
U := U + 1; -- 0
Вам нужно всего 4 бита для реализации типа, так что можно указать это как его Размер (я думаю, что это может быть просто подтверждающая спецификация, так как компилятор уже знает это; биты и сказал for Unsigned_4'Size use 3;
компилятор скажет вам, что вы ошиблись).
Большинство компиляторов захотят хранить значения типа как минимум в байте для эффективного доступа. Минимальный размер вступает в свои права при использовании типа в упакованной записи (Pragma Pack).