Qu'est-ce que les spécifications disent qu'il devrait faire? Il devrait y avoir une description des conditions dans lesquelles le drapeau de débordement devrait être défini. Classiquement, le bit de débordement est défini lorsque la sortie est trop grande pour le stockage. Vous pourriez considérer cela comme un 33ème bit dans la réponse de la somme de deux nombres de 32 bits. En arithmétique signée, cela peut arriver si l'ampleur du résultat de l'opération est trop grande, quel que soit le signe. Avec l'arithmétique du complément 2-s, vous devez être un peu prudent car le plus grand nombre négatif est légèrement plus négatif que le plus grand nombre positif que vous pouvez représenter dans un nombre donné de bits.
En ce qui concerne en fait le faire, il suffit de créer un vecteur numeric_std
qui est 1 peu plus large que les entrées, faites
a<=b+c;
et laissez le synthétiseur créer la logique. Vous n'avez alors pas à vous soucier des détails.
Le MSB de « a » peut être enlevé (en utilisant a(a'high)
et l'utiliser comme le trop-plein.
Vous faites un point important au sujet de trop-plein complément à deux ... – Marty
Pour ajouter à la réponse de Justin (ce qui en fait de bons points :) il y a des fonctions pour le redimensionnement des vecteurs dans le ieee.numeric_std bibliothèque. L'addition pourrait être écrite comme 'a <= redimensionner (b, a'length) + redimensionner (b, a'length)'. En outre, limiter la réponse n'est généralement pas ce que vous voulez faire en cas de débordement - cela coûte plus de logique. Si le report est utilisé pour des ajouts multi-mots, vous * ne * voulez pas saturer l'arithmétique. –