Что делает спецификации говорят, что это должен делать? Должно быть описание того, при каких условиях должен быть установлен флаг переполнения.
Обычно бит переполнения устанавливается, когда выход слишком велик для хранения. Вы могли бы подумать об этом как 33-й бит в ответ на суммирование двух 32-битных чисел. В подписанной арифметике это может произойти, если величина результата операции слишком велика, независимо от знака. При арифметике с 2-мя дополнениями вы должны быть немного осторожны, так как наибольшее отрицательное число немного больше -негативное, чем самое большое положительное число, которое вы можете представить в заданном количестве бит.
С точки зрения на самом деле делать это, просто создать numeric_std
вектор, 1 немного шире, чем исходные данные, сделать
a<=b+c;
и пусть синтезатор создания логики. Тогда вам не нужно беспокоиться о деталях.
Старший разряд «а» может быть снята (с помощью a(a'high)
и использовать его в качестве перелива.
Вы делаете важный вопрос о переполнении дополнительного кода ... – Marty
Чтобы добавить ответ Джастина (что делает хорошие моменты :) есть функции для изменения размера векторов в ieee.numeric_std библиотека. Добавление может быть записано как 'a <= resize (b, a'length) + resize (b, a'length)'. Кроме того, ограничение ответа обычно не является тем, что вы хотите сделать в случае переполнения - это требует дополнительной логики. Если перенос используется для многословных дополнений, вы * действительно * не хотите насыщающей арифметики. –