Что спецификация говорит, что должна делать? Должно быть описание того, при каких условиях должен быть установлен флаг переполнения.
Обычно бит переполнения устанавливается, когда вывод слишком велик для хранилища. Вы можете думать об этом как о 33-м бите в ответе суммирования двух 32-битных чисел. В знаковой арифметике это может произойти, если величина результата операции слишком велика, независимо от знака. С арифметикой 2-х дополнений вы должны быть немного осторожнее, так как наибольшее отрицательное число немного более отрицательно, чем наибольшее положительное число, которое вы можете представить в данном количестве бит.
С точки зрения фактического выполнения, просто создайте вектор numeric_std
, который на 1 бит шире входных, выполните
a<=b+c;
и пусть синтезатор создаст логику. Тогда вам не нужно беспокоиться о деталях.
MSB "a" можно снять (используя a(a'high)
и использовать его как переполнение.