VHDL - Günstigster und schnellster vorzeichenloser zu vorzeichenbehafteter Binärzahlenkonverter

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?

Nein, das ist für das Nehmen des Negativs einer Zahl. Das Ändern der Vorzeichen beinhaltet keine Änderung des Bitmusters.
Ja, ich weiß, dass das Muster dasselbe ist, aber ich brauche eine negative Zahl, ich muss es wie eine CA2-Nummer sehen
CA2, CA-2 oder CA II können sich beziehen auf: Carboanhydrase II, ein menschliches Gen Kaliforniens 2. Kongressbezirk Hummel CA-2, ein Ultraleichtflugzeug California State Route 2 Ca II, ein einfach ionisiertes Kalzium, das die H- und K-Linien produziert im Spektrum vieler Sterne
Mit anderen Worten, was (genau) ist eine "CA2-Nummer"? Es ist keine gängige Fachsprache.
CA2 : Auf Französisch wäre es "Complément à 2" = "Zweierkomplement".

Antworten (2)

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.

Danke für die Antwort. Schlagen Sie also vor, es verhaltensmäßig zu implementieren und alles dem Synthesizer zu überlassen?

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;