Į mikrovaldiklį MSP430F449 yra integruotas aparatinės daugybos blokas (ADB). Mikrovaldiklio struktūroje ADB integruotas kaip isorinis įrenginys ir jis nėra MSP430 procesoriaus (CPU) sudėtinė dalis. Tai reiskia, kad nėra konkrečios CPU daugybos instrukcijos, o daugiklis veikia kaip atskiras blokas. Daugybos bloko registrai yra pasiekiami (įrasomi ir nuskaitomi) CPU instrukcijomis kaip isoriniai įrenginiai.
10 pav. Aparatinio daugybos bloko struktūrinė schema
Dauginamų skaičių formatas gali būti:
- 16 x 16 bitų;
- 16 x 8 bitų;
- 8 x 16 bitų;
- 8 x 8 bitų.
ADB palaiko sias operacijas:
- skaičių be zenklo daugybą;
- skaičių su zenklu daugybą;
- skaičių be zenklo daugybą ir sumos k 828o1416i aupimą;
- skaičių su zenklu daugybą ir sumos kaupimą.
Operacijos tipas nustatomas pagal adresą, kuriuo yra rasomas pirmasis dauginamasis (operandas). ADB turi du 16 bitų operandų registrus (OP1 ir OP2) ir tris rezultato registrus RESLO, RSHI ir SUMEXT. Registre RESLO saugojama jaunesnioji daugybos rezultato dalis, registre RESHI - vyresnioji, registre SUMEXT saugojama informacija apie daugybos rezultatą. Daugyba atliekama per tris signalo MCLK ciklus ir rezultatas gali būti nuskaitytas iskarto po operando OP2 įrasymo instrukcijos.
Operandas OP1 gali būti įrasomas į vieną is keturių registrų (zr. 9 lentelę), tuo pačiu yra isrenkamas daugybos bloko operacijos tipas. Įrasant OP tik isrenkamas ADB operacijos tipas, bet pati operacija dar nepradedama vykdyti. Operacija pradedama vykdyti iskarto po antro operando įrasymo į registrą OP2. Registrų OP1 ir OP2 turiniai sudauginami ir daugybos rezultatas isvedamas į registrus RESLO, RESHI ir SUMEXT. Pakartotina daugyba gali būti atliekama be pirmo operando OP1 uzkrovimo (tuo atveju, kai pirmasis operandas OP1 nesikeičia).
9 lentelė. Operando OP1 adresai
Registras |
Adresas |
Operacijos tipas |
MPY |
0130h |
skaičių be zenklo daugyba |
MPYS |
0132h |
skaičių su zenklu daugybą |
MAC |
0134h |
skaičių be zenklo daugyba ir sumos kaupimas |
MACS |
0136h |
skaičių su zenklu daugyba ir sumos kaupimas |
Rezultato registre RESLO saugojami jauniausi 16 daugybos rezultato bitų. Rezultato registro RESHI turinys priklauso nuo daugybos operacijos tipo (zr. Y2 lenteles).
10 lentelė Registrų RESHI ir SUMEXT turiniai
Operacija |
RESHI |
SUMEXT |
MPY |
Vyresnieji sandaugos16 bitai |
Visada lygus 0000 |
MPYS |
Vyriausioji MSB skiltis skirta rezultato zenklui. Likusiuose 15 bitų saugojama vyresnioji sandaugos dalis. Neigiami skaičiai saugojami papildomame kode. |
Saugojamas sandaugos zenklo plėtinys: 00000h - kai sandauga teigiama arba lygi nuliui; 0FFFFh - kai sandauga neigiama. |
MAC |
Vyresnieji sukauptos sandaugų sumos 16 bitų. |
Saugojamas operacijos pernesimas: 0000h - kai pernesimo nėra; 0001h - kai pernesimas yra. |
MACS |
Visuose 16 bitų saugojama vyresnioji sandaugų sumos dalis. Neigiami skaičiai saugojami papildomame kode. |
Saugojamas sandaugos zenklas: 00000h - kai sandauga teigiama arba lygi nuliui; 0FFFFh - kai sandauga neigiama |
Atliekant operacijas su zenklu, rezultato teigiami skaičiai gali kisti nuo 0 iki 7FFF FFFFh, o neigiami skaičiai nuo FFFF FFFFh iki 8000 0000h. Programinio ADB valdymo pavyzdziai:
; 16x16 Daugyba be zenklo
MOV #01234h, &MPY ; Uzkrauti pirmą operandą
MOV #05678h, &OP2 ; Uzkrauti antrą operandą
; Apdoroti rezultatus
; 8x8 Daugyba be zenklo. Aboliutinė adresacija
MOV.B #012h, &0130h ; Uzkrauti pirmą operandą
MOV.B #034h, &0138h ; Uzkrauti antrą operandą
; Apdoroti rezultatus
; 16x16 Daugyba su zenklu
MOV #01234h, &MPYS ; Uzkrauti pirmą operandą
MOV #05678h, &OP2 ; Uzkrauti antrą operandą
; Apdoroti rezultatus
; 16x16 Daugyba be zenklo ir sandaugų kaupimas
MOV #01234h, &MAC ; Uzkrauti pirmą operandą
MOV #05678h, &OP2 ; Uzkrauti antrą operandą
; Apdoroti rezultatus
; 8x8 Daugyba su zenklu ir sandaugų kaupimas. Absoliutinė adresacija
MOV.B #012h, &0134h ; Uzkrauti pirmą operandą
MOV.B #034h, &0138h ; Uzkrauti antrą operandą
; Apdoroti rezultatus
; 16x16 Daugyba su zenklu ir sandaugų kaupimas
MOV #01234h, &MACS ; Uzkrauti pirmą operandą
MOV #05678h, &OP2 ; Uzkrauti antrą operandą
; Apdoroti rezultatus
Naudojant netiesioginę adresaciją sandaugos rezultato nuskaitymo po antro operando įrasymo į registrą OP2, reikia įterpti komandą NOP, pvz,:
mov #RESLO, R5 ; RESLO adresas įrasomas į R5
mov &OPER1, &MPY ; uzkraunamas pirmas dauginamasis
mov &OPER2, &OP2 ; uzkraunamas antras dauginamasis
nop ; vieno ciklo uzlaikymas
mov @R5+, &SANDLO ; nuskaitomas RESLO
mov @R5, &SANDHI ; nuskaitomas RESHI
Jeigu įrasius OP1, pries rasant OP2 įvyksta pagrindinės programos pertraukimas ir pertraukimo apdorojimo paprogramė naudoja daugybos bloką, daugybos informacija pagrindinėje programoje prarandama. Siekiant to isvengti, pries daugybos operaciją reikia uzdrausti pertraukimus (instrukcija DINT), o po atlikus daugybos operacija vėl juos leisti (instrukcija EINT).
11 lentelė. Aparatinio daugybos bloko registrai
Registro paskirtis |
Registras |
Tipas |
Adresas |
Pirmas operandas - skaičių be zenklo daugyba |
MPY |
R/W |
0130h |
Pirmas operandas - skaičių su zenklu daugybą |
MPYS |
R/W |
0132h |
Pirmas operandas - skaičių be zenklo daugyba ir sumos kaupimas |
MAC |
R/W |
0134h |
Pirmas operandas - skaičių su zenklu daugyba ir sumos kaupimas |
MACS |
R/W |
0136h |
Antras operandas |
OP2 |
R/W |
0138h |
Rezultato jaunesnysis zodis |
RESLO |
R/W |
013Ah |
Rezultato vyresnysis zodis |
RESHI |
R/W |
013Ch |
Sumos pernesimo registras |
SUMEXT |
R |
013Eh |
Sutrumpinimai R - registro turinį galima nuskaityti, W - į registrą galima įrasyti.
|