Forum: Mikrocontroller und Digitale Elektronik STM32F0 Hardware Multiplizierer oder nicht?


von Sascha B. (elzaar)


Lesenswert?

Der Betreff ist auch schon die frage, ich möchte den STM32F050 bzw. 51 
zum Regeln benutzen bin mir jedoch nicht sicher ob er eine Hardware 
Multiplizierer besitzt oder nicht.

Weiß das zufällig jemand?

von Peter D. (peda)


Lesenswert?

Sascha Beh schrieb:
> Weiß das zufällig jemand?

Ja.
Das Datenblatt weis es ganz genau.


Peter

von Sascha B. (elzaar)


Lesenswert?

Danke danke ... und wo soll das stehen?
ich mine wenn ich da fündig geworden wäre hätte ich nicht gefragt ... 
oder meinst du nach dem Motto wenn es nicht drin steht hat er auch 
keine?

von Peter D. (peda)


Lesenswert?

Sascha Beh schrieb:
> oder meinst du nach dem Motto wenn es nicht drin steht hat er auch
> keine?

Ja, so isses.


Z.B. der Nuvoton NUC120 ist auch Cortex M0, hat es aber:
- Single-cycle 32-bit hardware multiplier


Peter

von Marco M. (marco_m)


Lesenswert?

Sascha Beh schrieb:
> Danke danke ... und wo soll das stehen?
> ich mine wenn ich da fündig geworden wäre hätte ich nicht gefragt ...
> oder meinst du nach dem Motto wenn es nicht drin steht hat er auch
> keine?

Beim Hersteller:

http://www.st.com/internet/mcu/subclass/1588.jsp

Die Antwort steht z.B. im "Programming Manual".

von Marco M. (marco_m)


Lesenswert?

Peter Dannegger schrieb:
> Z.B. der Nuvoton NUC120 ist auch Cortex M0, hat es aber:
> - Single-cycle 32-bit hardware multiplier

Cortex-M0 dürfen die Multipliziereinheit auch iterativ (in 32 Schritten) 
implementieren, das ist dann nicht so viel besser also Software. Es 
lohnt sich also sowas bei Hersteller nachzugucken.

von Maxx (Gast)


Lesenswert?

Marco M. schrieb:
> Cortex-M0 dürfen die Multipliziereinheit auch iterativ (in 32 Schritten)
> implementieren, das ist dann nicht so viel besser also Software.

Das "nicht soviel besser" ist immer noch eklatant. Stell die Rechnung 
mal  auf wieviele Zyklen der Softwareansatz mit Schiebe- und 
Additionsinstruktionen braucht.

von Sascha B. (elzaar)


Lesenswert?

humm ... ich glaub ich probiere einfach mal wie schnell ich den PID 
berechnen kann ... mybe reichts ja ... ich mein ich will damit ein öden 
PIC18F ersätzen das müstte er doch irgendwie schaffen

von Marco M. (marco_m)


Lesenswert?

Maxx schrieb:
> Marco M. schrieb:
>> Cortex-M0 dürfen die Multipliziereinheit auch iterativ (in 32 Schritten)
>> implementieren, das ist dann nicht so viel besser also Software.
>
> Das "nicht soviel besser" ist immer noch eklatant. Stell die Rechnung
> mal  auf wieviele Zyklen der Softwareansatz mit Schiebe- und
> Additionsinstruktionen braucht.

Das hängt davon ab, wie deine Eingangsdaten beschaffen sind. Wenn du 
z.B. nur ein 32-Bit Ergebnis erwartest, dann kannst du die Shift-Add 
Geschichte leicht ausrollen und mit zwei Instruktionen pro Bit 
erledigen. Das kann ARM eigentlich sehr gut:
1
// unsigned multiplikation in ARM Mode
2
mov res,#0
3
tst a, #1   
4
movne res,b 
5
tst a, #2                  // if (a & 2) 
6
addne res,res,b,asl #1     //   res+=b<<1;
7
tst a, #4                  // if (a & 4) 
8
addne res,res,b,asl #2     //   res+=b<<2;

Der Cortex-M0 kann aber nur Thumb, da hätte müsste man also einen Test 
mit Sprung machen. Bei einer 32x32=>64 Multiplikation kommt man so auf 
2-6 Operationen pro Bit. Der allgemeine Fall dürfte also sowas wie 128 
Zyklen liegen. Allerdings könnte man mit Sprungtabellen die auf 
Multiplikationen mit Konstanten verweisen, die Zeit auf 2-3 Zyklen pro 
gesetztem Bit im Multiplikator runterkriegen.

Der allgemeine Fall dürfte also wohl so um den Faktor 3-4 langsamer 
sein. Spezialfälle können dann wieder schneller sein. Wenn du z.B. 
Operanden mit einem eingeschränkten Definitionsbereich (z.B. 0<=x<=1023) 
hast, dann kannst du deine Softwareroutine so anpassen, daß sie nur die 
benötigten Bits überhaupt anschaut. Ein 10x18 Bit Multiplizierer muss 
maximal 10 Mal Shiften/Addieren und hat keinen Überlauf zu verarbeiten.

Bei einem one-cycle Multiplizierer kann man sich diese Überlegungen 
allerdings schenken, der ist dann einfach 100-200 Mal schneller und 
fertig.

von none (Gast)


Lesenswert?

Auch wenn die Frage bereits alt ist:
Laut dem "STM32F0xxx Cortex-M0 programming manual" hat die uC-Familie 
einen ein Schritt Hardware Multiplizierer ("including a single-cycle 
multiplier").

siehe auch: 
http://www.st.com/web/en/resource/technical/document/programming_manual/DM00051352.pdf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.