Vorzeichenbehaftete Multiplikation auf FPGA

Ich versuche, signierte Zahlen auf einem Nexys A7-100T FPGA-Entwicklungsboard mit VHDL zu multiplizieren.

Unter dem Link zur Referenzhandbuch-Webseite finden Sie Informationen zur Hardware der FPGA-Platine.

Siehe auch diesen Link (ab Seite 78) für Vivados Vivado Design Synthesis Guide User VGDL Guide, der zeigt, wie die Hardware-Multiplikatorlogik verwendet wird.

Ich weiß, dass dies für vorzeichenlose Nummern funktioniert, aber kann dies für vorzeichenbehaftete Nummern mit zusätzlicher Logik / Code verwendet werden?

Ich habe mir auch den komplexen Multiplikator in diesem Dokument angesehen, aber ich bin mit dem Konzept dahinter völlig unbekannt?

Wie verwenden Menschen die Multiplikator-Hardware, um vorzeichenbehaftete Zahlen zu multiplizieren?

Es ist dasselbe wie vorzeichenlose Multiplikation. Deklarieren Sie das Signal als signedund verwenden Sie *. Die komplexe Multiplikation in diesem UG zeigt, wie man den Pre-Adder, Acc und andere Dinge im DSP verwendet. Wenn Sie diese nicht codieren, wird nur die Multiplikation durchgeführt.

Antworten (2)

Der Vivado-Synthesizer ist schlau. Sie müssen die Operanden als deklarieren signed. Wenn die Operanden vorzeichenlos sind, geben Sie alle explizit in Typumwandlungen ein signedund multiplizieren Sie sie dann einfach mit *. Es sollte einen vorzeichenbehafteten DSP-Multiplikator bei der Synthese ableiten.

Wenn es nicht automatisch abgeleitet wird (kann mehrere Gründe haben), müssen Sie möglicherweise das USE_DSPAttribut verwenden, um den Synthesizer zu zwingen, die Multiplikationslogik dem DSP-Slice zuzuordnen.

Seite 61, Vivado-Syntheseanleitung

Ich bin mir nicht sicher, ob es (auch nur annähernd) der beste Weg ist, aber als ich dies tun musste, überprüfte ich die Vorzeichen der beiden Zahlen, ließ das durch ein XOR laufen und steckte es in einen Flop. Dann habe ich die Absolutwerte beider Operanden genommen, diese multipliziert und dann, wenn mein gespeichertes Bit aus dem XOR gesetzt war, das Ergebnis negiert.