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