www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Multiplikation 16x16 bit mit MSP430


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich benutze einen MSP430F2274, welcher über keinen Hardware-Multiplier 
verfügt. Die Software programmiere ich mit IAR in C.
Nun zu meiner Frage: Die Multiplikation in C ist simpel, auch der 
Assembler-Code erscheint mir logisch. Dort wird nämlich ein eine 
Subroutine zur 16 Bit Multiplikation aufgerufen. Kann mir jemand sagen, 
warum die angesprochene Operation nur ca. 20 Zyklen (mit einem 
Oszilloskop gemessen) dauert? Gemäss Debugging-Vorgang sollten weit mehr 
Zyklen für die Berechnung benötigt werden... Wo liegt mein 
(Überlegungs-) Fehler?

Danke für eure Hilfe!!

Gruss
Fabian

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest etwas mehr zu deinem Debugging-Vorgang sagen.

Autor: jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 16*16 Bit Software Multiplikation geht abhängig von der Operanden 
verschieden schnell.
0000h * 0000h = 00000000h geht in 11 Takten
FFFFh * FFFFh = FFFE0001h braucht 123 Takte

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An jens:

Danke für deine Information. Kannst du mir noch sagen, wie du die Anzahl 
Takte berechnet bzw. woher du die Angaben hast?

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
is hier gut erklärt, und nen quellcode gibbet auch noch dazu:
http://focus.ti.com/general/docs/techdocsabstract....

Autor: jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Fabian,

hier mein Quellcode. Die Taktzyklenanzahl hab ich vom Simulator.

#define     OP1     R4
#define     OP2     R5
#define     OP2H    R6
#define     ACL     R7
#define     ACH     R8

            ASEG    0F000h
RESET       mov.w   #300h,SP                ; Initialize stackpointer

Main        mov     #13,OP1
            mov     #12345,OP2
            call    #MPYU
            jmp     Main
;----------------------------------------------------------------------- 
--
; MSP430 16*16 Bit Multiplikation
; Zyklen abhängig von OP1: (ohne call und ret)
; MPY       17..133
; MAC       15..131
; MPYU      11..123
; MACU       9..121
MPY         clr     ACL           ; ACH,ACL = OP1 * OP2  mit Vorzeichen
            clr     ACH
MAC         tst     OP1           ; ACH,ACL += OP1 * OP2  mit Vorzeichen
            jge     mpy_m1
            sub     OP2,ACH
mpy_m1      tst     OP2
            jge     MACU
            sub     OP1,ACH
            jmp     MACU
MPYU        clr     ACL           ; ACH,ACL = OP1 * OP2  ohne Vorzeichen
            clr     ACH
MACU        clr     OP2H          ; ACH,ACL += OP1 * OP2  ohne 
Vorzeichen
            clrc
            jmp     mpy_m4
mpy_m2      add     OP2,ACL
            addc    OP2H,ACH
mpy_m3      rla     OP2
            rlc     OP2H
mpy_m4      rrc     OP1
            jc      mpy_m2
            jnz     mpy_m3
            ret
;----------------------------------------------------------------------- 
--
            ASEG    0FFFEh
            DW      RESET
            END

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.