65 6502 SBC FPGA
← Übersicht
Übersicht / Komponente 06
Beschleuniger

Math-Coprozessor $88B0

Ein speicherabgebildeter Festkomma-Multiplizierer, der dem 6502 genau das abnimmt, was er am schlechtesten kann: schnelle Multiplikation.

Was es ist

Der Math-Coprozessor verwandelt die Hardware-DSP-Blöcke des FPGA in eine Peripherie, die die CPU mit wenigen Store/Load-Befehlen ansteuert. Der 6502 hat keinen Multiplikationsbefehl — in Software kostet ein Festkomma-Produkt rund 250 Zyklen. Eine vorzeichenbehaftete Multiplikation bildet hier auf einen einzigen Hardware-DSP ab und ist in einem Takt fertig.

Operation
signed 32×32 → 64 Bit
Format
8.24 Festkomma (Shift wählbar)
Latenz
2 Takte · keine Wait-States
FPGA-Kosten
~4 DSP18 von 48 (GW2A-18)

Was es macht

Die Einheit multipliziert kontinuierlich, was in den Operanden-Registern A und B liegt, und liefert sowohl das volle 64-Bit-Produkt als auch ein arithmetisch nach rechts geschobenes Ergebnis. Der Shift ist über ein Register wählbar (0…63), sodass dasselbe Werkzeug jedes Q-Format bedient — SHIFT = 24 ergibt 8.24, SHIFT = 12 ergibt 4.12.

Warum das wichtig ist

Software (4.12)Coprozessor (8.24)
Pro Multiplikation~250 Zyklen~12–20 Zyklen
Vorzeichenmanuell in 6502in Hardware
Normalisierung4× lsr/ror-Kettegratis (Hardware)
Genauigkeit12 Nachkommabits24 Nachkommabits
Mandelbrot 320×200~5–8 min~10 s

Register ($88B0)

AdresseSchreibenLesen
$88B0–$88B3Operand A (4 Byte, LE)rohes Produkt, Byte 0–3
$88B4–$88B7Operand B (4 Byte, LE)rohes Produkt, Byte 4–7
$88B8–$88BBErgebnis (A·B) >> SHIFT (4 Byte)
$88BCSHIFT (0…63)SHIFT

Alle Werte sind little-endian — passend dazu, wie der 6502 Mehrbyte-Wörter ablegt. Es gibt kein „Start"-Strobe: Das Ergebnis folgt den Operanden zwei Takte später, und weil der 6502 ohnehin mehrere Zyklen bis zum nächsten Lesezugriff braucht, sind keine Wait-States nötig.

Verwendung vom 6502

MUL     = $88B0
MUL_A   = MUL+0          ; Operand A (4 Byte)
MUL_B   = MUL+4          ; Operand B (4 Byte)
MUL_RES = MUL+8          ; Ergebnis (4 Byte)

    lda #24            ; einmalig: 8.24 wählen
    sta MUL+12
    ; A schreiben, B schreiben, Ergebnis lesen ...

Der Selbsttest copro_selftest.s rechnet 2.0 × 3.0, prüft auf $06000000 und färbt den Bildschirm bei Erfolg grün, sonst rot.