ARM Cortex-M

Allikas: Vikipeedia

ARM Cortex-M on 32-bitiste RISC ARM protsessorituumade grupp, mille litsentsi haldab ARM Holdings. ARM Cortex-M koosneb Cortex-M0, M0+, M1, M3, M4, M7, M23, M33 ja M35A tuumadest, mida kasutatakse mikrokontrollerites.[1][2][3][4][5]

Ülevaade[muuda | muuda lähteteksti]

ARM-i litsents[muuda | muuda lähteteksti]

Arm Holdings ei tooda ega müü enda disainitud protsessoreid, vaid müüb protsessorite arhitektuure. Kõikidele litsentseeritutele tagab ARM integreeritava riistvarakirjelduse ARM-i tuumast, kogu tarkvaraarenduse tööriistakomplekti ja õiguse müüa ARM-i tuumadel põhinevaid mikrokiipe.

Mikrokiipide kohandatavus[muuda | muuda lähteteksti]

Mikrokiipide tootjad saavad sünteesitava ARM-i protsessori riistvarakirjelduse (kirjutatud Verilogis). Sellisel kujul on neil võimalik rakendada arhitektuurilisi optimieeringuid ja laiendusi, tänu millele saavad tootjad pakkuda kohandatud omadustega mikrokiipe, näiteks suure taktsagedusega, väga väikese voolutarbega, laiendatud käsustikuga, optimeeritud füüsilise suuruse, silumistoega jne. Tootja andmeleht ja dokumentatsioon annavad infot, millised komponendid on mingis ARM-i CPU-s seadmestatud.

Tähtsaimad Cortex-M tuuma valikulised moodulid, mis on enamikul protsessoritel esindatud:

  • SysTicki taimer: 24-bitine süsteemitaimer, mis laiendab nii protsessori kui katkestuskontrolleri tööd. Kui protsessoril on SysTicki taimer, võimaldab see ka seadistatava prioriteediga SysTicki katkestust.[6][7][8]
  • Bit-banding: Seab igale mälusõnale vastavaks ühe biti bit-bandi alas. Näiteks, kui kirjutada mälus ühele kaardistatud aadressile, on võimalik pöörata vastavat bitti bit-bandi alas. Sedasi on võimalik pöörduda vastava mäluala üksikute bittide poole ja muuta nende bittide olekut C/C++ programmeerimiskeeli kasutades ilma, et oleks tarvis lugemise, muutmise ja kirjutamise operatsioone.[6][7][8]
  • Mälukaitse moodul (MPU): Võimaldab kaitsta eri mälupiirkondi, kehtestades prioriteete ning ligipääsureegleid. Toetatud on kuni kaheksa mälupiirkonda, millest igaüht on võimalik jagada veel kaheksaks võrdse suurusega alampiirkonnaks.[6][7][8]
ARM Cortex-M-i käsustiku variatsioonid[6][7]
ARM
Cortex-M
Thumb Thumb-2 Riistvaraline
korrutamine
Riistvaraline
jagamine
Saturatsioon-

aritmeetika

DSP
laiendused
Ujukomamoodul
(FPU)
ARM-i
arhitektuur
Cortex-M0[1]
Enamik
Mõni
32-bitine tulemus
Ei Ei Ei Ei
ARMv6-M
Cortex-M0+[2]
Enamik
Mõni
32-bitine tulemus
Ei Ei Ei Ei
ARMv6-M
Cortex-M1[3]
Enamik
Mõni
32-bitine tulemus
Ei Ei Ei Ei
ARMv6-M
Cortex-M3[4]
Kõik
Kõik
32- või 64-bitine tulemus
Ja
Ja
Ei Ei
ARMv7-M
Cortex-M4[5]
Kõik
Kõik
32- või 64-bitine tulemus
Ja
Ja
Ja
Valikuline SP
ARMv7E-M
Cortex-M7
Kõik
Kõik
32- või 64-bitine tulemus
Ja
Ja
Ja
Valikuline: SP
või SP ja DP
ARMv7E-M
Cortex-M23
Enamik
Mõni
32-bitine tulemus
Ja
Ei Ei Ei
ARMv8-M Baseline

Märkus: Enamik Cortex-M3 ja M4 kiipe on varustatud mälukaitse mooduli ja bit-bandingu toega. Bit-bandingu tuge on võimalik seadmestada Cortex-M0 ja M0+ tuumadesse, kasutades Cortex-M-i süsteemidisaini vahendeid.[9]

Märkus: Tarkvaraliselt tuleks enne kasutamist kontrollida, kas moodul on kindlas protsessoris olemas.[8]

Lisaks võimalikud valikud mikrokontrollerite arhitektuuris.[6][7]
  • Andmete baidijärg: tavajärjestus või pöördjärjestus. Erinevalt vanematest ARM-i tuumadest on Cortex-M muutmatult kinnistatud üheks eelnevaist.
  • Katkestused: 1–32 Cortex-M0, M0+ ja M1 tuumade puhul ning 1–240 Cortex-M3, M4, M7 tuumade puhul
  • Äratuskatkestuse kontroller
  • Katkestusvektorite tabeli nihke register[10]
  • Käsupüüdja laius: 16-bitine või enamlevinud 32-bitine
  • Kasutaja- või privileegitugi
  • Kõikide registrite lähtestamine
  • Ühetsükliline I/O port
  • Silumispordi tugi
  • Silumise peatamise tugi
  • Watchpointi komparaatorite arv: kuni kaks Cortex-M0, M0+ ja M1 tuumade puhul, kuni neli Cortex-M3, M4 ja M7 tuumade puhul
  • Katkestuspunktide komparaatorite arv: kuni 4 ja kuni 8 analoogselt eelmise punktiga

Käsustik[muuda | muuda lähteteksti]

Cortex-M0, M0+ ja M1 kasutavad ARMv6-M-i arhitektuuri, Cortex-M3 kasutab ARMv7-M-i arhitektuuri.[6]

Cortex-M4 ja M7 tuumad rakendavad ARMv7E-M-i arhitektuuri.[7] Arhitektuurid on binaarselt ülespoole ühilduvad, alatest ARMv6-M-ist kuni ARMv7E-M-i arhitektuurini. Binaarsed käsud, mis on olemas Cortex-M0, M0+,M1 tuumadele, on modifikatsioonideta täidetavad Cortex-M3, M4, M7 tuumadel. Cortex-M3 binaarseid käske on võimalik muudatusteta täita Cortex-M4, M7 tuumadel.[6][7] Cortex-M-i arhitektuuris on toetatud vaid Thumbi ja Thumb-2 käsud, toetatud ei ole eelnevad ARM-i 32-bitised käsustikud.

Kõik kuus Cortex-M-i tuuma seadmestavad ühise alamosa käskudest, mis on pärit enamik Thumbi, osa Thumb-2 käsustikust, sisaldades ka 32-bitist korrutamist. Cortex-M0, M0+ ja M1 tuumad on disainitud pidades silmas väikseimat ränikristalli ning seetõttu toetavad ka Cortex-M-i perekonnas kõige vähem käske.

Cortex-M0, M0+ ja M1 tuumade puhul on esindatud kõik Thumbi käsud, välja arvatud käsud CBZ, CBNZ, IT mis lisati ARMv7-M-i arhitektuuris. Esindatud on ka väike alamosa Thumb-2 käske (BL, DMB, DSB, ISB, MRS, MSR). Cortex-M3-s, M4-s ja M7-s on esindatud kõik Thumbi ja Thumb-2 baaskäsud. Cortex-M3 lisab 3 Thumbi käsku ja kõik Thumb-2 käsud, riistvaralise jagamise ja saturatsioonaritmeetika käsud. Cortex-M4 lisab juurde digitaalse signaalitöötluse käsud (DSP) ja valikulise ühekordse täpsusega ujukomaarvude mooduli (FPU). Cortex-M7 lisab valikulise kahekordse täpsusega ujukomaarvu mooduli.[6][7]

Vananenud omadused[muuda | muuda lähteteksti]

ARM-i arhitektuur ARM Cortex-M seeria jaoks eemaldas mõningaid omadusi, võrreldes eelnevate tuumadega.[6][7]

  • Eelnev 32-bitine ARM-i käsustik ei ole toetatud.
  • Baidijärg on valitud ränikristalli implementatsioonis. Eelnevatel tuumadel oli võimalik jooksvalt andmete baidijärge muuta.
  • Kaasprotsessorid ei ole Cortex-M-i tuumade puhul toetatud.

32-bitise ARM-i käsustiku funktsionaalsus dubleerib mitmel moel Thumbi ja Thumb-2 käsustikke, kuid mõnele 32-bitisele ARM-i käsule ei ole siiski vastet:

  • SWP ja SWPB käskudele ei ole Cortex-M-i protsessorites vastet.

16-bitine Thumbi käsustik on palju arenenud, kuna see avaldati esimest korda ARM7T tuumades ARMv4T arhitektuuriga. Uusi Thumb käsustiku käske lisati järjest koos ARMv5, ARMv6, ARMv6T2 arhitektuuride avaldamisega. Cortex-M tuumadest on eemaldatud järgmised käsud:

  • "BLX <vahetu>" käsku praegu enam ei ole, sest see oli mõeldud Thumbi ja ARM-i käsustike vahel valimiseks. "BLX <register>" käsk on ikka Cortex-M-i tuumades alles.
  • CPSIE ja CPSID käske enam ei ole, sest Cortex-M-i tuumades puudub ARM-i käsustik. Teised CPS-i käsud on siiski esindatud.
  • SETEND käsk ei ole enam esindatud, sest andmete baidijärg on kinnistatud.
  • Kaasprotsessorite käsud ei ole enam esindatud.
  • SWI käsk nimetati ümber SVC käsuks, kuigi binaarne kodeering jäi samaks. Siiski erineb SVC käitluskood SWI käitluskoodist erandimudelite muutuste tõttu.

Cortex-M0[muuda | muuda lähteteksti]

Cortex-M0 tuumad on optimeeritud väikese ränikristalli saavutamiseks ja mõeldud kasutamiseks odavaimates kiipides.

Cortex-M0-i peamised tunnused on:[1]

  • ARMv6-M-i arhitektuur[6]
  • Kolmeastmeline käsukonveier[viide?]
  • Käsustikud:
    • Thumb (enamik), puudu CBZ, CBNZ, IT
    • Thumb-2 (mõned): BL, DMB, DSB, ISB, MRS, MSR
    • 32-bitine riistvaraline korrutamine 32-bitise tulemusega
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M0 tuumal põhinevad mikrokontrollerid:

Mikrokiibid, kus Cortex-M0 on teine tuum:

  • NXP LPC4300 (Cortex-M4F ja Cortex-M0)
  • Texas Instrumentsi SimpleLink Wirelessi mikrokontrollerid CC1310 ja CC2650 (Cortex-M3 ja Cortex-M0)

Cortex-M0+[muuda | muuda lähteteksti]

Cortex M0+ on Cortex-M0 tuuma optimeeritud täiendus ning seega on need kaks protsessorit käsustikult teineteisega täiel määral ühilduvad ning on võimalik kasutada samu arendustööriistu. Cortex-M0+-i käsukonveier muudeti kolmeastmeliselt kaheastmeliseks, et vähendada voolutarvet. Lisaks olemasolevale silumisfunktsioonile lisati Cortex-M0+-le valikuline ränimoodul Micro Trace Buffer (MTB), mis võimaldab lihtsat instruktsioonijälgimise puhvrit. Cortex-M0+-le lisati ka M3 ja M4 omadusi, mis on võimalik rakendada arhitektuuriliselt ränimoodulina, nagu näiteks MPU ja katkestusvektorite tabeli nihe.[2]

Cortex-M0+ tuuma peamised tunnused on:[2]

  • ARMv6-M-i arhitektuur[6]
  • Kaheastmeline käsukonveier
  • Käsustikud (sama, mis Cortex-M0):
    • Thumb (enamik), puudu CBZ, CBNZ, IT
    • Thumb-2 (mõned): BL, DMB, DSB, ISB, MRS, MSR
    • 32-bitine riistvaraline korrutamine 32-bitise tulemusega
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M0+ tuumal põhinevad mikrokontrollerid:

  • Atmeli SAMD, SAMR, SAML, SAMC
  • Freescale Kinetisi E, EA, L, M, V1, W0
  • Holtek Semiconductori HT32F52xx
  • NXP-i LPC800, LPC11E6x, LPC11U6x
  • Silicon Labsi/Energy Micro EFM32 Zero, Happy
  • Spansioni FM0+
  • STMicroelectronicsi STM32 L0

Väikseimad ARM-i mikrokontrollerid põhinevad Cortex-M0+ tuumal. 2014. aasta seisuga on väikseim Kinetisi KL03, mille mõõdud on vaid 1,6 mm × 2 mm.[11]

Cortex-M1[muuda | muuda lähteteksti]

Cortex-M1 kiibid on optimeeritud FPGA kiipide sees kasutamiseks.

Cortex-M1 peamised tunnused on:[3]

  • ARMv6-M-i arhitektuur[6]
  • Kolmeastmeline käsukonveier
  • Käsustikud:
    • Thumb (enamik), puudu CBZ, CBNZ, IT
    • Thumb-2 (mõned): BL, DMB, DSB, ISB, MRS, MSR
    • 32-bitine riistvaraline korrutamine 32-bitise tulemusega
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M1 tuuma kasutavad järgmised FPGA tootjad:

Cortex-M3[muuda | muuda lähteteksti]

Cortex-M3 peamised tunnused on:[4][12]

  • ARMv7-M-i arhitektuur[6]
  • Kolmeastmeline käsukonveier, haru ennustamisega
  • Käsustikud:
    • Thumb
    • Thumb-2
    • 32-bitine riistvaraline korrutamine 32-bitise või 64-bitise tulemusega, märgita või ilma, liitmine või lahutamine peale korrutamist
    • 32-bitine jagamine (2–12 tsüklit)
    • Saturatsioonaritmeetika tugi
    • 1–240 katkestust, lisaks mitteignoreeritavad katkestused
    • 12-tsükliline katkestuslatentsus
    • Integreeritud magamislaadid
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M3 tuumal põhinevad mikrokontrollerid:

  • Acteli SmartFusion, SmartFusion 2
  • Analog Devicesi ADuCM3xx
  • Atmeli SAM3A, SAM3N, SAM3S, SAM3U, SAM3X
  • Cypress Semiconductori PSoC 5
  • Holteki HT32F
  • Luminary Micro LM3S1968
  • NXP-i LPC1300, LPC1700, LPC1800
  • ON Semiconductori Q32M210
  • Silicon Labsi Precision32
  • Silicon Labsi/Energy Micro EFM32 Tiny, Gecko, Leopard, Giant
  • Spansioni FM3
  • STMicroelectronicsi STM32 F1, F2, L1, W
  • Texas Instrumentsi SimpleLink Wirelessi MCUs (CC1310 Sub-GHz ja CC2650 BLE ja ZigBee ja 6LoWPAN)
  • Toshiba TX03

Järgmistel tuumadel on Cortex-M3 teine tuum:

  • Apple'i A9 (Cortex-M3 integreeritud M9 Motion kaasprotsessorina)
  • CSR Quatro 5300 seeria (Cortex-M3 kaasprotsessorina)
  • Samsungi Exynos 7420 (Cortex-M3 dünaamilise pingeseadmise mikrokontrollerina)[13]
  • Texas Instrumentsi F28, LM3, TMS470, OMAP 4470 (üks Cortex-A9 ja kaks Cortex-M3)
  • XMOS XS1-XA perekond (seitse xCORE ja üks Cortex-M3)

Cortex-M4[muuda | muuda lähteteksti]

Cortex-M4 on peaaegu võrdväärne Cortex-M3-ga. Vahe seisneb Cortex-M4-le lisatud signaalitöötlusinstruktsioonides ja valikuliselt on võimalik lisada ka ujukomamoodul (FPU). Kui tuum sisaldab ujukomamoodulit, nimetatakse seda Cortex-M4F-ks, muidu Cortex-M4-ks.

Cortex-M4 peamised tunnused on:[5]

  • ARMv7E-M-i arhitektuur[7]
  • Kolmeastmeline käsukonveier, haru ennustamisega
  • Käsustikud:
    • Thumb
    • Thumb-2
    • 32-bitine riistvaraline korrutamine 32-bitise või 64-bitise tulemusega, märgita või ilma, liitmine või lahutamine peale korrutamist
    • 32-bitine jagamine (2–12 tsüklit)
    • Saturatsioonaritmeetika tugi
    • Signaalitöötlusinstruktsioonid: ühetsükliline 16/32-bitine MAC, ühetsükliline duaalne 16-bitine MAC, 8/16-bitine SIMD aritmeetika
    • 1–240 katkestust, lisaks mitteignoreeritavad katkestused
    • 12-tsüklilinekatkestuslatentsus
    • Integreeritud magamislaadid
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M4 tuumal põhinevad mikrokontrollerid:

  • Atmeli SAM4L, SAM4N, SAM4S, SAM4N
  • Freescale Kinetisi K, W2

Cortex-M4F tuumal põhinevad mikrokontrollerid:

  • Atmeli SAM4C (dual core), SAM4E, SAMG
  • Freescale Kinetisi K, V3, V4
  • Infineoni XMC4000
  • Nordic Semiconductori nRF52
  • NXP-i LPC4000, LPC4300 (Cortex-M4F ja Cortex-M0)
  • Silicon Labsi/Energy Micro EFM32 Wonder
  • Spansioni FM4
  • STMicroelectronicsi STM32 F3, F4, L4
  • Texas Instrumentsi LM4F, TM4C, MSP432
  • Texas Instrumentsi SimpleLink Wi-Fi CC3200 ja CC3200MOD (FCC, IC)
  • Toshiba TX04

Järgmistel tuumadel on Cortex-M4 või Cortex-M4F teine tuum:

  • Freescale Vybridi VF6 (Cortex-A5 ja Cortex-M4F)
  • Freescale i.MX 6 SoloX (Cortex-A9 ja Cortex-M4F)
  • Freescale i.MX 7 Solo/Dual (üks või kaks Cortex-A7 ja Cortex-M4F)
  • Texas Instrumentsi OMAP 5 (üks kahetuumaline Cortex-A15 ja kaks Cortex-M4)

Cortex-M7[muuda | muuda lähteteksti]

Cortex-M7 on suure jõudlusega tuum, millel on pea kaks korda nii palju arvutusvõimsust kui vanematel Cortex-M4 tuumadel. Cortex-M7-l on kuueastmeline superskalaarne käsukonveier haruennustusega ning valikuline ujukomamoodul, mis on suutlik ühekordse täpsusega ja valikuliselt ka kahekordse täpsusega ujukomaoperatsioonideks.[14][15] Instruktsiooni- ja andmesiinid on laiendatud 64-bitise laiuseni võrreldes eelmiste tuumade 32-bitiste siinidega. Kui tuumas on esindatud FPU, nimetatakse tuuma Cortex-M7F, vastasel juhul Cortex-M7.

Cortex-M7 peamised tunnused on:

  • ARMv7E-M-i arhitektuur[7]
  • Kuueastmeline käsukonveier, haruennustusega
  • Käsustikud:
    • Thumb
    • Thumb-2
    • 32-bitine riistvaraline korrutamine 32-bitise või 64-bitise tulemusega, märgita või ilma, liitmine või lahutamine peale korrutamist
    • 32-bitine jagamine (2–12 tsüklit)
    • Saturatsioonaritmeetika tugi
    • Signaalitöötlusinstruktsioonid: ühetsükliline 16/32-bitine MAC, ühetsükliline duaalne 16-bitine MAC, 8/16-bitine SIMD aritmeetika
    • 1–240 katkestust, lisaks mitteignoreeritavad katkestused
    • 12-tsükliline katkestuslatentsus
    • Integreeritud magamislaadid
  • 1–32 katkestust, lisaks mitteignoreeritavad katkestused

Kiibid[muuda | muuda lähteteksti]

Cortex-M7 tuumal põhinevad mikrokontrollerid:

  • Atmeli SAME70, SAMS70, SAMV70
  • Freescale Semiconductori Kinetis KV5x
  • STMicroelectronicsi STM32 F7

Dokumentatsioon[muuda | muuda lähteteksti]

Kõikide ARM-i kiipide kohta on dokumentatsiooni väga palju, eriti uute tulijate jaoks. Eelmise kümnendi mikrokontrollerite dokumentatsioon mahtus vabalt ühte dokumenti, kuid koos kiipide arenguga on kasvanud ka dokumentatsiooni hulk. ARM-i mikrokontrollerite dokumentatsiooni on raske hoomata, sest see koosneb nii mikrokontrollerite disainerite dokumentatsioonist kui ka ARM-i tuumade disaineri ARM Holdingsi dokumentatsioonist.

Tüüpilise dokumentatsioonipuu näidis, kus kõige kõrgemal on kõige üldisema sisuga allikas:

  1. Mikrokontrolleri tootja veebilehekülg
  2. Mikrokontrolleri tootja turundusmaterjal
  3. Mikrokontrolleri tootja andmeleht
  4. Mikrokontrolleri tootja teatmik
  5. ARM-i tuuma veebilehekülg[16]
  6. ARM-i tuuma üldine kasutajagiid
  7. ARM-i tuuma tehniline teatmik
  8. ARM-i tuuma arhitektuuriline teatmik

Mikrokontrollerite tootjatel on tihti ka lisadokumente, nagu prototüüpimisplaatide kasutajajuhised, juhendid algajatele, tarkvarateegid, tarkvaranäited jpm.

Vaata ka[muuda | muuda lähteteksti]

Viited[muuda | muuda lähteteksti]

  1. 1,0 1,1 1,2 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0432c/DDI0432C_cortex_m0_r0p0_trm.pdf
  2. 2,0 2,1 2,2 2,3 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0484b/DDI0484B_cortex_m0p_r0p0_trm.pdf
  3. 3,0 3,1 3,2 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0413d/DDI0413D_cortexm1_r1p0_trm.pdf
  4. 4,0 4,1 4,2 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337h/DDI0337H_cortex_m3_r2p0_trm.pdf
  5. 5,0 5,1 5,2 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0439b/DDI0439B_cortex_m4_r0p0_trm.pdf
  6. 6,00 6,01 6,02 6,03 6,04 6,05 6,06 6,07 6,08 6,09 6,10 6,11 6,12 ARMv6-M Architecture Reference Manual; ARM Holdings.
  7. 7,00 7,01 7,02 7,03 7,04 7,05 7,06 7,07 7,08 7,09 7,10 ARMv7-M Architecture Reference Manual; ARM Holdings.
  8. 8,0 8,1 8,2 8,3 http://infocenter.arm.com/help/topic/com.arm.doc.dai0179b/AppsNote179.pdf
  9. Cortex-M System Design Kit; ARM Holdings.
  10. http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/Ciheijba.html
  11. http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m/l-series/kinetis-kl03-48-mhz-small-form-factor-high-integration-ultra-low-power-microcontrollers-mcus:KL03?tid=FSLConnect
  12. Sadasivan, Shyam. "An Introduction to the ARM Cortex-M3 Processor" (PDF). ARM Holdings. Originaali (PDF) arhiivikoopia seisuga 26. juuli 2014. Vaadatud 17. detsembril 2015.
  13. "The Samsung Exynos 7420 Deep Dive – Inside A Modern 14nm SoC". AnandTech. Vaadatud 15.06.2015.
  14. "Cortex-M7 Processor". ARM Holdings. Vaadatud 24.09.2014.
  15. Press Release – ARM Supercharges MCU Market with High Performance Cortex-M7 Processor; arm.com; September 24, 2014;
  16. http://www.arm.com/products/processors/cortex-m/index.php