Wir wissen, dass wir zum Konvertieren von vorzeichenlosen in vorzeichenbehaftete Zahlen (genauer gesagt, ich möchte eine reine Binärzahl in eine CA2-Zahl konvertieren) die vorzeichenlose Zahl negieren müssen, indem wir dann + 1 hinzufügen. In VHDL kann ich einen Inverter und einen Addierer implementieren, der den Übertrag verwaltet Ich habe zwei Zahlen von 32 Bit. Gibt es eine andere Möglichkeit, die Summe + 1 mit etwas Billigerem zu implementieren? Gibt es eine Lösung, um den Übertrag nur mit Logikgattern zu verwalten?
Es lohnt sich wirklich nicht, sich zu viele Gedanken über dieses Detail zu machen. Das Hinzufügen von 1 zu einer Zahl ist eine so verbreitete Redewendung in HDL, dass Synthesewerkzeuge hochentwickelte Methoden haben, um damit umzugehen. Außerdem verfügen die meisten modernen FPGAs über eine dedizierte, fest verdrahtete Fast-Carry-Logik, die keine Logikzellen verbraucht und die Synthesewerkzeuge zu nutzen wissen.
Wenn es vorzeichenlos ist, ist es per Definition positiv, daher ist sein 2er-Komplementäquivalent ebenfalls positiv, daher ist die Bitmusterdarstellung dieselbe.
Die eine Schwierigkeit tritt auf, wenn sein MSB bereits gesetzt ist: dann ist es ein vorzeichenloser Wert, der zu groß ist, um als vorzeichenbehaftete Zahl derselben Größe dargestellt zu werden. Die ganz allgemeine Antwort ist also, es in eine 2er-Komplementzahl zu erweitern, die mindestens 1 Bit breiter ist:
my_signed <= '0' & my_unsigned;
Ignacio Vazquez-Abrams
Entwickler
Bruce Abbott
David Tweed
TEMLIB