ARM (αρχιτεκτονική)

Η ARM είναι μια αρχιτεκτονική συνόλου εντολών RISC των 32-bit, η οποία έχει αναπτυχθεί από την ARM Holdings. Τα αρχικά σημαίνουν Προχωρημένη Μηχανή RISC (Advanced RISC Machine), ενώ παλαιότερα σήμαιναν Μηχανή RISC Acorn (Acorn RISC Machine). Η αρχιτεκτονική ARM είναι η πιο συχνά χρησιμοποιούμενη αρχιτεκτονική συνόλου εντολών 32-bit όσον αφορά τους επεξεργαστές που παράγονται. Η αρχιτεκτονική δημιουργήθηκε αρχικά από την Acorn Computers για χρήση στους προσωπικούς υπολογιστές της, με τα πρώτα προϊόντα που βασίζονταν στην αρχιτεκτονική ARM να είναι η σειρά Acorn Archimedes που εμφανίστηκε το 1987. Οι επεξεργαστές ARM είναι σχετικά απλοί, κάτι που τους κάνει κατάλληλους για εφαρμογές χαμηλής ισχύος. Αυτό έχει ως αποτέλεσμα να έχουν υπερισχύσει στις αγορές των κινητών και των ενσωματωμένων συστημάτων, σαν μικροί και σχετικά χαμηλού κόστους μικροεπεξεργαστές και μικροελεγκτές. Το 2005, περίπου το 98% των πάνω από ένα δισεκατομμύριο κινητών τηλεφώνων που πωλούνται κάθε χρόνο είχαν τουλάχιστον έναν επεξεργαστή ARM. Το 2009 οι επεξεργαστές ARM αντιστοιχούσαν περίπου στο 90% όλων των ενσωματωμένων επεξεργαστών RISC 32-bit και χρησιμοποιούνται σε μεγάλο βαθμό σε καταναλωτικά ηλεκτρονικά προϊόντα, συμπεριλαμβανομένων των προσωπικών ψηφιακών βοηθών (personal digital assistants, PDAs), των κινητών τηλεφώνων, των συσκευών ψηφιακής μουσικής και πολυμέσων, των φορητών κονσολών βιντεοπαιχνιδιών, των αριθμομηχανών και περιφερειακών υπολογιστών όπως οι σκληροί δίσκοι και οι δρομολογητές. Η αρχιτεκτονική ARM έχει άδεια χρήσης που δίνεται σε όποιον θέλει να τη χρησιμοποιήσει. Κάποιες από τις εταιρείες που την έχουν ή την είχαν αγοράσει είναι η Alcatel-Lucent, η Apple, η Atmel, η Broadcom, η Cirrus Logic, η Digital Equipment Corporation, η Energy Micro, η Freescale, η Intel (μέσω της DEC), η LG, η Marvell Technology Group, η Microsoft, η NEC, η Nintendo, η Nuvoton, η Nvidia, η Sony, η NXP (πρώην Philips), η Oki, η ON Semiconductor, η Psion, η Qualcomm, η Samsung, η Sharp, η STMicroelectronics, η Symbios Logic, η Texas Instruments, η VLSI Technology, η Yamaha και η ZiiLABS. Οι επεξεργαστές ARM αναπτύσσονται από την ARM και τις εταιρείες που έχουν άδεια από την ARM. Σημαντικές οικογένειες επεξεργαστών ARM που έχουν αναπτυχθεί από την ARM Holdings είναι οι ARM7, οι ARM9, οι ARM11 και οι Cortex. Σημαντικοί επεξεργαστές ARM που έχουν αναπτυχθεί από τις εταιρείες με άδεια είναι ο StrongARM της DEC, ο i.MX της Freescale, ο XScale της Marvell (πρώην Intel), ο Tegra της Nvidia, ο Nova και ο NovaThor της ST-Ericsson, ο Snapdragon της Qualcomm, η σειρά προϊόντων OMAP της Texas Instruments, ο Hummingbird της Samsung και οι A4 και A5 της Apple.

 Μετά την επιτυχία του υπολογιστή BBC Micro, η Acorn Computers Ltd εξέτασε την μετάβαση από τον απλό επεξεργαστή MOS Technology 6502 ώστε να ικανοποιήσει τις ανάγκες των εταιρικών πελατών, μια αγορά στην οποία αργότερα θα κυριαρχούσε ο IBM PC, που κυκλοφόρησε το 1981. Το σχέδιο Acorn Business Computer (ABC) απαιτούσε έναν αριθμό δεύτερων επεξεργαστών που θα συνδυάζονταν με την πλατφόρμα του BBC Micro, αλλά οι επεξεργαστές όπως ο Motorola 68000 και ο National Semiconductor 32016 ήταν ακατάλληλοι, ενώ ο 6502 δεν ήταν αρκετά ισχυρός για να υποστηρίζει γραφική διεπαφή χρήστη. Η Acorn θα χρειαζόταν μια νέα αρχιτεκτονική, γιατί είχε δοκιμάσει όλους τους υπάρχοντες επεξεργαστές και δεν την ικανοποιούσαν. Η Acorn εξέτασε τότε το ενδεχόμενο να σχεδιάσει τον δικό της επεξεργαστή και οι μηχανικοί της βρήκαν κάποιες δημοσιεύσεις του εγχειρήματος Berkeley RISC. Θεώρησαν ότι αφού μια τάξη από μεταπτυχιακούς φοιτητές μπορούσε να σχεδιάσει έναν ανταγωνιστικό επεξεργαστή 32-bit, τότε η Acorn δεν θα συναντούσε πρόβλημα. Ένα ταξίδι στο Western Design Center στο Φοίνιξ, όπου ο 6502 ανανεωνόταν πρακτικά από μια εταιρεία ενός ατόμου, έδειξε στους μηχανικούς της Acorn, Steve Furber και Sophie Wilson ότι δε χρειάζονταν τεράστιους πόρους και υποδομές έρευνας και ανάπτυξης τελευταίας γενιάς. Η Wilson άρχισε να αναπτύσσει το σύνολο εντολών, γράφοντας μια προσομοίωση του επεξεργαστή σε BBC Basic, η οποία έτρεχε σε έναν BBC Micro που είχε έναν δεύτερο επεξεργαστή 6502. Αυτό έπεισε τους μηχανικούς της Acorn ότι έκαναν το σωστό αλλά για να συνεχίσουν χρειάζονταν κάποιους χρηματικούς πόρους. Η Wilson τότε επικοινώνησε με τον CEO της Acorn, Hermann Hauser, και εξήγησε τι συνέβαινε. Όταν δόθηκε έγκριση για συνέχεια, δημιουργήθηκε μια μικρή ομάδα για να υλοποιήσει το μοντέλο της Wilson σε υλικό. Το επίσημο εγχείρημα Acorn RISC Machine άρχισε τον Οκτώβριο του 1983. Επιλέχθηκε η εταιρεία VLSI Technology σαν συνεργάτης πυριτίου, επειδή ήδη προμήθευε την Acorn με μνήμες ROM και κάποια ειδικά τσιπ. Τη σχεδίαση διηύθυναν οι Wilson και Furber, έχοντας σαν βασικό σκοπό να πετύχουν τον χειρισμό των διακοπών εισόδου/εξόδου (input/output (interrupt) handling) με χαμηλή καθυστέρηση, όπως ο 6502. Η αρχιτεκτονική πρόσβασης στη μνήμη του 6502 είχε επιτρέψει την παραγωγή γρήγορων υπολογιστών χωρίς τη χρήση ακριβού υλικού απευθείας πρόσβασης στη μνήμη (direct memory access). Η VLSI παρήγαγε το πρώτο πυρίτιο ARM στις 26 Απριλίου 1985 – αυτό λειτούργησε κατευθείαν και ονομάστηκε ARM1. Τα πρώτα «πραγματικά» συστήματα για χρήση στην παραγωγή κυκλοφόρησαν τον επόμενο χρόνο, με το όνομα ARM2. Η πρώτη πρακτική εφαρμογή ήταν σαν δεύτερος επεξεργαστής του BBC Micro, όπου χρησιμοποιήθηκε για την ανάπτυξη του λογισμικού προσομοίωσης που θα ολοκλήρωνε τη δουλειά σχετικά με τα τσιπ υποστήριξης (VIDC, IOC, MEMC) και για την επιτάχυνση του λογισμικού CAD που χρησιμοποιήθηκε στην ανάπτυξη του ARM2. Η Wilson έγραψε στη συνέχεια την BBC Basic σε συμβολική γλώσσα ARM, και οι γνώσεις σε βάθος που προέκυψαν από τη σχεδίαση του σύνολο εντολών επέτρεψαν στον κώδικα να είναι πολύ πυκνός, με αποτέλεσμα η ARM BBC Basic να είναι μια πολύ καλή δοκιμή για έναν προσομοιωτή ARM. Ο αρχικός σκοπός της κατασκευής ενός υπολογιστή βασισμένου στην αρχιτεκτονική ARM επιτεύχθηκε το 1987 με την κυκλοφορία του Acorn Archimedes. Γύρω από το εγχείρημα της κεντρικής μονάδας επεξεργασίας ARM επικρατούσε τέτοια μυστικότητα που, όταν η Olivetti άρχισε τις διαπραγματεύσεις για να αγοράσει πλειοψηφικό πακέτο μετοχών της Acorn το 1985, δεν πληροφορήθηκε από την ομάδα ανάπτυξης, παρά μόνο μετά το τέλος των διαπραγματεύσεων. Το 1992 η Acorn κέρδισε πάλι το βραβείο Queen's Award for Technology για την αρχιτεκτονική ARM. Ο ARM2 είχε έναν δίαυλο δεδομένων 32-bit (data bus), χώρο διευθύνσεων 26-bit (address space) και 27 καταχωρητές 32-bit. Ο κώδικας του προγράμματος έπρεπε να βρίσκεται μέσα στα πρώτα 64 Mbyte της μνήμης, επειδή ο μετρητής προγράμματος (program counter) είχε μόνο 24 bit – τα 6 πρώτα και τα 2 τελευταία bit του καταχωρητή 32-bit λειτουργούσαν σαν σημαίες κατάστασης (status flags). Ο ARM2 ήταν ίσως ο απλούστερος χρήσιμος μικροεπεξεργαστής 32-bit στον κόσμο, έχοντας μόνο 30.000 τρανζίστορ (συγκριτικά ο 68000 της Motorola ήταν 6 χρόνια παλαιότερος αλλά, όπως φαίνεται και από την ονομασία του, περιείχε 68.000 τρανζίστορ). Μεγάλο μέρος αυτής της απλότητας οφειλόταν στο ότι ο επεξεργαστής δεν είχε μικροκώδικα (που αναλογούσε στο ένα τέταρτο με ένα τρίτο του 68000) και, όπως οι περισσότεροι επεξεργαστές της εποχής, δεν είχε καθόλου κρυφή μνήμη (cache). Συνέπεια αυτής της απλότητας ήταν η χαμηλή κατανάλωση ισχύος, ενώ ήταν πιο γρήγορος από τον Intel 80286. Ακολούθησε ο ARM3, ο οποίος είχε κρυφή μνήμη 4 KB, βελτιώνοντας και άλλο την ταχύτητα. Κατά το τέλος της δεκαετίας του 1980 η Apple Computer και η VLSI Technology άρχισαν να εργάζονται με την Acorn πάνω σε νεότερες εκδόσεις του πυρήνα του επεξεργαστή ARM. Η δουλειά αυτή ήταν τόσο σημαντική που η Acorn έκανε τη σχεδιαστική ομάδα ξεχωριστή εταιρεία του 1990, με τίτλο Advanced RISC Machines Ltd. Η Advanced RISC Machines έγινε ARM Ltd όταν η μητρική της εταιρεία, η ARM Holdings plc, μπήκε στο χρηματιστήριο του Λονδίνου και στον δείκτη NASDAQ το 1998.Το έργο των Apple-ARM τελικά έγινε ο ARM6, ο οποίος κυκλοφόρησε στις αρχές του 1992. Η Apple χρησιμοποίησε τον, βασισμένο στον ARM6, ARM 610 σαν βάση για το PDA Apple Newton. Το 1994, η Acorn χρησιμοποίησε τον ARM 610 σαν την κεντρική μονάδα επεξεργασίας (CPU) τους υπολογιστές Risc PC. Η DEC αγόρασε τα δικαιώματα της αρχιτεκτονικής ARM6 και παρήγαγε τον StrongARM. Με συχνότητα 233 MHz η CPU αυτή κατανάλωνε μόνο 1 W (και οι πιο πρόσφατες εκδόσεις καταναλώνουν ακόμα λιγότερο). Αυτή η δουλειά στη συνέχεια πέρασε στην Intel, λόγω κάποιου νομικού συμβιβασμού, η οποία συμπλήρωσε τη σειρά των σχετικά παλιών i960 με τους StrongARM. Η Intel αργότερα ανέπτυξε τη δική της υλοποίηση υψηλής ταχύτητας με το όνομα XScale, η οποία έχει πωληθεί στη Marvell. Ο πυρήνας ARM έχει παραμείνει σχεδόν στο ίδιο μέγεθος παρά τις αλλαγές σε αυτόν. Ο ARM2 είχε 30.000 τρανζίστορ ενώ ο ARM6 αυξήθηκε μόλις σε 35.000. Η ARM εστιάζει στην πώληση πυρήνων IP (IP cores), που χρησιμοποιούνται από τις εταιρείες που αγοράζουν τα δικαιώματα για να κατασκευάζουν μικροελεγκτές και CPU που βασίζονται σε αυτόν τον πυρήνα. Η πιο επιτυχημένη υλοποίηση είναι ο ARM7TDMI που έχει πουλήσει εκατομμύρια τεμάχια. Η βασική ιδέα είναι ότι ο κατασκευαστής της σχεδίασης (original design manufacturer) συνδυάζει τον πυρήνα ARM με κάποια επιπλέον μέρη για να παράγει μια πλήρη CPU, η οποία να μπορεί να κατασκευαστεί σε παλιά εργοστάσια κατασκευής ημιαγωγών αλλά να έχει καλή ταχύτητα με χαμηλό κόστος. Η Atmel προϋπήρξε κέντρο σχεδίασης για το ενσωματωμένο σύστημα με βάση τον ARM7TDMI (ARM7TDMI-Based Embedded System). Η ARM έδωσε τα δικαιώματα χρήσης για 1,6 δισεκατομμύρια πυρήνες το 2005. Επίσης, το 2005, περίπου 1 δισεκατομμύριο πυρήνες ARM χρησιμοποιήθηκαν σε κινητά τηλέφωνα. Μέχρι τον Ιανουάριο του 2008 είχαν κατασκευαστεί πάνω από 10 δισεκατομμύρια πυρήνες ARM και η iSuppli προέβλεψε το 2008 ότι μέχρι το 2011, θα κυκλοφορούσαν 5 δισεκατομμύρια πυρήνες ARM κάθε χρόνο. Η ARM δηλώνει ότι έχουν κυκλοφορήσει πάνω από 15 δισεκατομμύρια επεξεργαστές ARM (Ιανουάριος 2011).Χρησιμοποιούνται διάφορες αρχιτεκτονικές ARM στα έξυπνα τηλέφωνα (smartphones), στους προσωπικούς ψηφιακούς βοηθούς και σε άλλες κινητές συσκευές, από την ARMv5, σε ξεπερασμένες ή απλές συσκευές, μέχρι την σειρά ARM M, σε πιο προχωρημένες συσκευές. Οι επεξεργαστές XScale και ARM926 είναι ARMv5TE, και χρησιμοποιούνται πιο συχνά σε ακριβές συσκευές από τους βασισμένους σε ARMv4, StrongARM, ARM9TDMI και ARM7TDMI, αλλά οι φτηνότερες συσκευές μπορεί να χρησιμοποιούν παλαιότερους πυρήνες, λόγω του χαμηλότερου κόστους της άδειάς τους. Οι επεξεργαστές ARMv6 είναι πιο γρήγοροι σε σχέση με τους κανονικούς πυρήνες ARMv5, και χρησιμοποιούνται κάποιες φορές, αλλά οι επεξεργαστές Cortex (ARMv7) πια είναι πιο γρήγοροι και με μικρότερη κατανάλωση ενέργειας σε σχέση με τις προηγούμενες γενιές. Οι Cortex-A στοχεύουν σε επεξεργαστές εφαρμογών, όπως είναι οι απαιτήσεις των έξυπνων τηλεφώνων που πριν χρησιμοποιούσαν ARM9 ή ARM11. Οι Cortex-R προορίζονται για εφαρμογές πραγματικού χρόνου, και οι Cortex-M προορίζονται για μικροελεγκτές. Το 2009, κάποιοι κατασκευαστές κυκλοφόρησαν μικρούς δικτυακούς φορητούς (netbooks) που βασίζονταν σε επεξεργαστές αρχιτεκτονικής ARM, ως ανταγωνιστές των netbooks που βασίζονταν στον επεξεργαστή Intel Atom. Σύμφωνα με την εταιρεία αναλύσεων IHS iSuppli, μέχρι το 2015, τα ολοκληρωμένα κυκλώματα τύπου ARM εκτιμάται ότι θα βρίσκονται στο 23% όλων των φορητών υπολογιστών.Το 2011, η HiSilicon Technologies Co. Ltd. αγόρασε την άδεια για αρκετά στοιχεία της αρχιτεκτονικής ARM, για να τα χρησιμοποιήσει σε σχεδιάσεις τσιπ επικοινωνιών. Ανάμεσα σε αυτά ήταν σταθμοί βάσης 3G/4G, δικτυακές υποδομές και κινητές υπολογιστικές εφαρμογές. Η ARM παρέχει έναν κατάλογο όλων των εταιρειών που υλοποιούν πυρήνες ARM. Οι πυρήνες ARM χρησιμοποιούνται σε αρκετά προϊόντα, όπως τα έξυπνα τηλέφωνα (smartphones). Παραδείγματα χρήσης τους σε υπολογιστές είναι ο Acorn Archimedes, το Apple iPad και το ASUS Eee Pad Transformer. Χρησιμοποιείται επίσης στον φορητό αναπαραγωγέα πολυμέσων iPod της Apple, στην ψηφιακή μηχανή PowerShot A470 της Canon, στη φορητή κονσόλα βιντεοπαιχνιδιών Nintendo DS και στο σύστημα πλοήγησης TomTom. Από το 2005, η ARM συνεργάζεται με το Πανεπιστήμιο του Μάντσεστερ, πάνω στον υπολογιστή SpiNNaker του τελευταίου, ο οποίος χρησιμοποιούσε πυρήνες ARM για να προσομοιώσει το ανθρώπινο μυαλό. Από το 1995 μέχρι σήμερα, το ARM Architecture Reference Manual είναι η βασική πηγή τεκμηρίωσης πάνω στην αρχιτεκτονική του επεξεργαστή ARM και του συνόλου εντολών του, ενώ διακρίνει μεταξύ διεπαφών που όλοι οι επεξεργαστές πρέπει να υποστηρίζουν (όπως η σημασία των εντολών) και λεπτομερειών υλοποίησης, οι οποίες μπορούν να διαφέρουν ανά περίπτωση. Η αρχιτεκτονική έχει εξελιχθεί και, αρχίζοντας από τη σειρά πυρήνων Cortex, ορίζονται τρία «προφιλ» ("profiles"): «Εφαρμογής» ("Application"): σειρά Cortex-A «Πραγματικού χρόνου» ("Real-time"): σειρά Cortex-R «Μικροελεγκτή» ("Microcontroller"): σειρά Cortex-MΤα προφίλ μπορεί να αποτελούν υποσύνολο της αρχιτεκτονικής. Για παράδειγμα, το προφίλ ARMv7-M που χρησιμοποιείται από τον πυρήνα Cortex-M3 υποστηρίζει μόνο το σύνολο εντολών Thumb-2, και το προφίλ ARMv6-M (που χρησιμοποιείται από τον Cortex-M0) είναι υποσύνολο του προφίλ ARMv7-M (υποστηρίζει λιγότερες εντολές). Για να διατηρηθεί η σχεδίαση καθαρή, απλή και γρήγορη, η αρχική υλοποίηση ARM είχε κατασκευαστεί κατευθείαν, χωρίς τη χρήση μικροκώδικα, όπως ο απλούστερος επεξεργαστής 6502 των 8-bit που χρησιμοποιούνταν πριν στους μικροϋπολογιστές Acorn. Η αρχιτεκτονική ARM περιλαμβάνει τα εξής χαρακτηριστικά RISC: Αρχιτεκτονική φόρτωσης/αποθήκευσης (load/store). Δεν υποστηρίζει μη-ευθυγραμμισμένη (misaligned) πρόσβαση στη μνήμη (υποστηρίζεται στους πυρήνες ARMv6, με εξαιρέσεις όσον αφορά τις εντολές φόρτωσης/αποθήκευσης πολλών λέξεων). Ομοιόμορφο αρχείο 16 × 32-bit καταχωρητών. Σταθερό εύρος εντολών 32-bit για εύκολη αποκωδικοποίηση και διοχέτευση (pipelining), με μειονέκτημα την μικρότερη πυκνότητα κώδικα. Αργότερα, το σύνολο εντολών Thumb αύξησε την πυκνότητα του κώδικα. Συνήθως η εκτέλεση γίνεται σε έναν κύκλο.Η απλή σχεδίαση, σε σχέση με τους επεξεργαστές Intel 80286 και Motorola 68020, που κυκλοφόρησαν την ίδια εποχή, διορθώθηκε με προσθήκη των εξής χαρακτηριστικών: Εκτέλεση υπό συνθήκη των περισσότερων εντολών, που μειώνει την επιβάρυνση διακλάδωσης (branch overhead) και αντιμετωπίζει την έλλειψη μηχανισμού πρόβλεψης διακλάδωσης (branch predictor). Οι αριθμητικές εντολές αλλάζουν τον κώδικα κατάστασης μόνο όταν χρειάζεται. Ολισθητής βαρελιού (barrel shifter) των 32-bit, που μπορεί να χρησιμοποιηθεί χωρίς επιβάρυνση στην ταχύτητα, στις περισσότερες εντολές αριθμητικής και υπολογισμού διευθύνσεων. Ισχυροί τρόποι σχηματισμού διευθύνσεων με δείκτες (indexed addressing modes). Ένας καταχωρητής συνδέσμου (link register) για γρήγορες κλήσεις συναρτήσεων-φύλλων (leaf function calls). Απλό αλλά γρήγορο υποσύστημα διακοπών 2 επιπέδων προτεραιοτήτων, με εναλλασσόμενους πίνακες καταχωρητών (switched register banks). Εκτέλεση υπό συνθήκη Η εκτέλεση υπό συνθήκη (που ονομάζεται και predication) υλοποιείται με έναν επιλογέα κωδικού διακλάδωσης 4-bit (που ονομάζεται predicate) σε κάθε εντολή - ένας από τους κωδικούς αυτούς των 4 bit θεωρείται «κωδικός διαφυγής» ("escape code") και χρησιμοποιείται για κάποιες εντολές χωρίς συνθήκη, αλλά σχεδόν όλες οι συνηθισμένες εντολές είναι υπό συνθήκη. Οι περισσότερες αρχιτεκτονικές επεξεργαστών έχουν κωδικούς συνθήκης μόνο στις εντολές διακλάδωσης. Αυτό μειώνει σε σημαντικό βαθμό τα bit κωδικοποίησης που μπορούν να χρησιμοποιηθούν για τη μετατόπιση (displacement) στις εντολές πρόσβασης στη μνήμη, αλλά αποφεύγει και τις εντολές διακλάδωσης όταν παράγεται κώδικας για μικρές εντολές if. Ένα κλασικό παράδειγμα είναι ο αλγόριθμος του Ευκλείδη με αφαιρέσεις: Στη γλώσσα προγραμματισμού C, η επαναληπτική δομή του αλγορίθμου είναι: Σε συμβολική γλώσσα ARM, η επαναληπτική δομή είναι: που αποφεύγει τις διακλαδώσεις στο then και στο else . Αν ο Ri και ο Rj είναι ίσοι, τότε δε θα εκτελεστεί καμία από τις εντολές SUB, με αποτέλεσμα να μη χρειάζεται μια διακλάδωση υπό συνθήκη για να υλοποιηθεί ο έλεγχος της while στην αρχή της επανάληψης, αν είχε χρησιμοποιηθεί για παράδειγμα η SUBLE (μικρότερο ή ίσο). Ένας από τους τρόπους με τους οποίους ο κώδικας Thumb παρέχει μια πυκνότερη κωδικοποίηση είναι να αφαιρέσει αυτόν τον επιλογέα των 4 bit από τις εντολές που δεν είναι διακλαδώσεις. Άλλα χαρακτηριστικά Ένα άλλο χαρακτηριστικό του συνόλου εντολών είναι η δυνατότητα να ενσωματώνονται ολισθήσεις (shifts) και περιστροφές (rotates) στις εντολές επεξεργασίας δεδομένων (αριθμητικών, λογικών ή μετακινήσεων από καταχωρητή σε καταχωρητή), ώστε η εντολή C: να μπορεί να εκτελεστεί με μια εντολή μιας λέξης και ενός κύκλου εκτέλεσης στον ARM: Αυτό έχει σαν αποτέλεσμα τα προγράμματα για ARM να τείνουν να είναι πιο πυκνά από όσο θα αναμενόταν με αραιότερη πρόσβαση στη μνήμη και επομένως η διοχέτευση χρησιμοποιείται πιο αποδοτικά. Αν και οι ARM τρέχουν σε σχετικά χαμηλές ταχύτητες, έχουν καλές επιδόσεις σε σχέση με πιο πολύπλοκες σχεδιάσεις επεξεργαστών. Ο επεξεργαστής ARM έχει επίσης κάποια χαρακτηριστικά που δεν εμφανίζονται συχνά σε άλλες αρχιτεκτονικές RISC, όπως η διευθυνσιοδότηση με βάση τον μετρητή προγράμματος (στην πραγματικότητα, στον ARM 32-bit, ο μετρητής προγράμματος είναι ένας από τους 16 καταχωρητές) και τρόπους σχηματισμού διευθύνσεων με αύξηση πριν ή μετά την εντολή. Επειδή η αρχιτεκτονική υπάρχει για πολλά χρόνια, το σύνολο εντολών έχει αυξηθεί με την πάροδο του χρόνου. Κάποιοι από τους αρχικούς επεξεργαστές ARM (πριν τον ARM7TDMI), για παράδειγμα, δεν έχουν εντολή για να αποθηκεύουν δεδομένα των two-byte, με αποτέλεσμα να είναι δύσκολο να παραχθεί γρήγορος κώδικας για αντικείμενα της C τύπου int16_t. Διοχετεύσεις και άλλα θέματα υλοποίησης Ο ARM7 και οι υλοποιήσεις πριν από αυτόν είχαν μια διοχέτευση τριών σταδίων, τα οποία ήταν φόρτωση (fetch), αποκωδικοποίηση (decode) και εκτέλεση (execute). Ταχύτερες σχεδιάσεις, όπως ο ARM9, έχουν πιο βαθιές διοχετεύσεις, όπως ο Cortex-A8, ο οποίος έχει 13 στάδια. Επιπλέον αλλαγές που οδηγούν σε καλύτερη απόδοση είναι η χρήση ενός γρήγορου αθροιστή και μια πιο εκτεταμένη λογική πρόβλεψης διακλάδωσης. Η διαφορά μεταξύ των πυρήνων ARM7DI και ARM7DMI, για παράδειγμα, ήταν ένας βελτιωμένος πολλαπλασιαστής (στον οποίο και οφείλεται το "M" που προστέθηκε στην ονομασία). Συνεπεξεργαστές Η αρχιτεκτονική παρέχει έναν τρόπο να επεκταθεί το σύνολο εντολών χωρίς επέμβαση στον ίδιο τον επεξεργαστή, με τη χρήση «συνεπεξεργαστών» ("coprocessors"), οι οποίοι μπορούν να χρησιμοποιηθούν μέσω εντολών όπως η MCR, η MRC, η MRRC και η MCRR. Ο χώρος των συνεπεξεργαστών διαιρείται λογικά σε 16 συνεπεξεργαστές αριθμημένους από το 0 έως το 15, με τον συνεπεξεργαστή 15 (cp15) να κρατείται για κάποιες λειτουργίες ελέγχου όπως ο χειρισμός των κρυφών μνημών (caches) και η λειτουργία της μονάδας διαχείρισης μνήμης (memory management unit, MMU), σε όσους επεξεργαστές είναι διαθέσιμη. Στους υπολογιστές που βασίζονται στον ARM, οι περιφερειακές συσκευές συνήθως συνδέονται στον επεξεργαστή αντιστοιχίζοντας τους πραγματικούς τους καταχωρητές σε θέσεις στο χώρο μνήμης του ARM ή στο χώρο των συνεπεξεργαστών ή συνδέοντάς τους σε μια άλλη συσκευή - έναν δίαυλο (bus) - που συνδέεται στον επεξεργαστή. Η πρόσβαση σε συνεπεξεργαστή έχει μικρή καθυστέρηση και κάποια περιφερειακά (όπως ο ελεγκτής διακοπών του XScale) έχουν σχεδιαστεί ώστε να είναι προσβάσιμα και με τους δύο τρόπους (μέσω μνήμης ή μέσω συνεπεξεργαστών). Υπάρχουν επίσης περιπτώσεις που το υλικό σχεδιάζεται ώστε να ενσωματώνεται μόνο στον μηχανισμό συνεπεξεργαστών. Για παράδειγμα, μια μηχανή επεξεργασίας εικόνας μπορεί να είναι ένας μικρός πυρήνας ARM7TDMI που συνδυάζεται με έναν συνεπεξεργαστή που διαθέτει ειδικές λειτουργίες για την επεξεργασία βίντεο υψηλής ευκρίνειας (HDTV). Όλοι οι σύγχρονοι επεξεργαστές ARM περιλαμβάνουν υποστήριξη στο υλικό για αποσφαλμάτωση, που είναι απαραίτητη ώστε οι αποσφαλματωτές σε λογισμικό να μπορούν να σταματούν κώδικα, να τον εκτελούν βηματικά και να τοποθετούν σημεία διακοπής (breakpoints) σε αυτόν. Η υποστήριξη αυτή υλοποιείται μέσω JTAG, αν και κάποιοι νεότεροι πυρήνες υποστηρίζουν το πρωτόκολλο δύο γραμμών «SWD» του ARM. Στους πυρήνες ARM7TDMI, το «D» δείχνει την υποστήριξη αποσφαλμάτωσης μέσω JTAG, ενώ το «I» δείχνει την παρουσία του αρθρώματος αποσφαλμάτωσης «EmbeddedICE». Στις σειρές πυρήνων ARM7 και ARM9, ο ντε φάκτο τρόπος αποσφαλμάτωσης ήταν το EmbeddedICE μέσω JTAG, αν και αυτό δεν το εξασφάλιζε η αρχιτεκτονική. Η αρχιτεκτονική ARMv7 ορίζει βασικά βοηθήματα αποσφαλμάτωσης σε επίπεδο αρχιτεκτονικής, όπως τα σημεία διακοπής, τα σημεία παρακολούθησης (watchpoints) και η εκτέλεση εντολών σε «κατάσταση αποσφαλμάτωσης» ("Debug Mode"), ενώ παρόμοια βοηθήματα παρέχει και το EmbeddedICE. Υποστηρίζεται η αποσφαλμάτωση τόσο «κατάστασης παύσης» ("halt mode") όσο και «κατάστασης παρακολούθησης» ("monitor mode"). Ο πραγματικός μηχανισμός επικοινωνίας που δίνει πρόσβαση στα βοηθήματα αποσφαλμάτωσης δεν ορίζεται στην αρχιτεκτονική αλλά συνήθως οι υλοποιήσεις περιλαμβάνουν υποστήριξη μέσω JTAG. Υπάρχει επίσης μια ξεχωριστή αρχιτεκτονική αποσφαλμάτωσης για ARM με τον τίτλο CoreSight, η οποία δεν είναι υποχρεωτική στην αρχιτεκτονική των επεξεργαστών ARMv7. Για να βελτιωθεί η αρχιτεκτονική ARM όσον αφορά τις δυνατότητες ψηφιακής επεξεργασίας σήματος και τις εφαρμογές πολυμέσων, προστέθηκαν κάποιες νέες εντολές στο σύνολο εντολών. Αυτές ξεχωρίζουν από το «E» στο όνομα των αρχιτεκτονικών ARMv5TE και ARMv5TEJ. Οι εκδόσεις τύπου E περιλαμβάνουν τις δυνατότητες T,D,M και I (που αναφέρθηκαν παραπάνω). Οι νέες εντολές συναντώνται συχνά σε αρχιτεκτονικές ψηφιακών επεξεργαστών σήματος. Αποτελούν παραλλαγές των εντολών πολλαπλασιασμού-συσσώρευσης με πρόσημο, της κορεσμένης πρόσθεσης και αφαίρεσης (saturated add / subtract), και της μέτρησης των αρχικών μηδενικών. Για να βελτιωθεί η πυκνότητα του κώδικα, οι επεξεργαστές από τον ARM7TDMI και ύστερα περιλαμβάνουν την κατάσταση συνόλου εντολών Thumb. (Το «T» στο «TDMI» δείχνει το χαρακτηριστικό Thumb.) Όταν ο επεξεργαστής βρίσκεται σε αυτήν την κατάσταση εκτελεί το σύνολο εντολών Thumb, το οποίο είναι μια πιο συμπαγής κωδικοποίηση 16-bit ενός υποσυνόλου του συνόλου εντολών του ARM. Οι περισσότερες από τις εντολές Thumb αντιστοιχίζονται απευθείας σε κανονικές εντολές ARM. Η οικονομία χώρου προκύπτει με το να εννοούνται κάποιοι τελεστές και με τις εντολές να μπορούν να έχουν λιγότερα πιθανά αποτελέσματα σε σχέση με τις εντολές ARM που εκτελούνται στην κατάσταση συνόλου εντολών ARM. Στο Thumb, οι κωδικοί των εντολών (opcodes) των 16-bit έχουν λιγότερες λειτουργίες. Για παράδειγμα, μόνο οι εντολές διακλάδωσης μπορούν να είναι υπό συνθήκη και πολλοί κωδικοί περιορίζονται στο να μπορούν να έχουν πρόσβαση μόνο στους μισούς από τους καταχωρητές γενικής χρήσης του επεξεργαστή. Οι πιο σύντομοι κωδικοί εντολών βελτιώνουν τη συνολική πυκνότητα του κώδικα, αν και κάποιες λειτουργίες απαιτούν επιπλέον εντολές. Σε περιπτώσεις που η θύρα της μνήμης ή ο δίαυλος έχουν λιγότερα από 32 bit, οι συντομότερες εντολές του Thumb επιτρέπουν βελτιωμένη ταχύτητα σε σχέση με τον κώδικα ARM 32-bit, καθώς χρειάζεται να φορτωθεί λιγότερος κώδικας στον επεξεργαστή μέσω του περιορισμένου εύρους της μνήμης. Το ενσωματωμένο υλικό, όπως το Game Boy Advance, συνήθως έχει ένα μικρό ποσό μνήμης RAM προσβάσιμο στο πλήρως 32-bit μονοπάτι δεδομένων (datapath) - η πρόσβαση στο μεγαλύτερο μέρος της μνήμης γίνεται μέσω ενός δεύτερου μονοπατιού δεδομένων εύρους 16 bit ή και λιγότερο. Σε αυτήν την περίπτωση είναι συνήθως καλύτερο να προκύπτει κώδικας Thumb από τη μεταγλώττιση και να βελτιστοποιούνται με το χέρι τα λίγα μέρη του κώδικα που απαιτούν επεξεργαστική ισχύ σε πλήρως 32-bit εντολές ARM, τοποθετώντας αυτές τις πιο μεγάλες εντολές στη μνήμη που φαίνεται από το δίαυλο των 32-bit. Ο πρώτος επεξεργαστής που μπορούσε να αποκωδικοποιήσει εντολές Thumb ήταν ο ARM7TDMI. Όλοι οι ARM9 και οι σειρές επεξεργαστών που ακολούθησαν, συμπεριλαμβανομένου του XScale, περιλαμβάνουν αποκωδικοποιητή εντολών Thumb. Η τεχνολογία Thumb-2 εμφανίστηκε πρώτη φορά στον πυρήνα ARM1156, ο οποίος ανακοινώθηκε το 2003. Η Thumb-2 επεκτείνει το περιορισμένο σύνολο εντολών 16-bit του Thumb με επιπλέον εντολές 32-bit που δίνουν μεγαλύτερο εύρος στο σύνολο εντολών, με αποτέλεσμα να προκύπτει ένα σύνολο εντολών μεταβλητού μήκους. Ένας δηλωμένος σκοπός της Thumb-2 είναι να πετύχει πυκνότητα κώδικα όπως η Thumb με την ταχύτητα που έχει το σύνολο εντολών ARM στη μνήμη 32-bit. Αυτό θεωρείται ότι επιτεύχθηκε στον ARMv7. Η Thumb-2 επεκτείνει τα σύνολα εντολών ARM και Thumb με ακόμα περισσότερες εντολές, οι οποίες περιλαμβάνουν την επεξεργασία πεδίων bit (bit-fields), πίνακες διακλάδωσης (table branches) και εκτέλεση υπό συνθήκη. Μια νέα «ενοποιημένη συμβολική γλώσσα», η Unified Assembly Language (UAL) υποστηρίζει την παραγωγή εντολών είτε Thumb-2 είτε ARM από τον ίδιο πηγαίο κώδικα - οι εκδόσεις του Thumb που εμφανίστηκαν στους επεξεργαστές ARMv7 είναι σχεδόν το ίδιο ισχυρές όσο ο κώδικας ARM, περιλαμβάνοντας τη δυνατότητα συγγραφής χειριστών διακοπών (interrupt handlers). Αυτό απαιτεί κάποια προσοχή και τη χρήση της νέας εντολής «IT» (if-then), η οποία επιτρέπει την εκτέλεση μέχρι τεσσάρων συνεχόμενων εντολών με βάση μια συνθήκη. Αυτή αγνοείται όταν η έξοδος της μεταγλώττισης είναι κώδικας ARM αλλά η μεταγλώττιση σε Thumb-2 την παράγει. Για παράδειγμα: Όλα τα τσιπ ARMv7 υποστηρίζουν το σύνολο εντολών Thumb-2. Κάποια τσιπ, όπως ο Cortex-M3, υποστηρίζουν μόνο το σύνολο εντολών Thumb-2. Άλλα τσιπ των σειρών Cortex και ARM11 υποστηρίζουν τόσο την «κατάσταση συνόλου εντολών ARM», όσο και την «κατάσταση συνόλου εντολών Thumb-2». Η Jazelle είναι μια τεχνική που επιτρέπει σε κώδικα byte της Java (Java Bytecode) να εκτελείται απευθείας στην αρχιτεκτονική ARM σαν τρίτη κατάσταση εκτέλεσης (και σύνολο εντολών) εκτός των καταστάσεων ARM και Thumb. Η υποστήριξη για αυτήν την κατάσταση δηλώνεται από το «J» της αρχιτεκτονικής ARMv5TEJ, και από τα ονόματα των πυρήνων ARM9EJ-S και ARM7EJ-S. Η υποστήριξη αυτής της κατάστασης ξεκίνησε από τον ARMv6 (εκτός από το προφίλ ARMv7-M), αν και οι πιο πρόσφατοι πυρήνες περιλαμβάνουν μια πιο απλή υλοποίηση που δεν παρέχει επιτάχυνση μέσω υλικού. Το ThumbEE, γνωστό και ως Thumb-2EE, με την εμπορική ονομασία Jazelle RCT, ανακοινώθηκε το 2005 και εμφανίστηκε πρώτη φορά στον επεξεργαστή Cortex-A8. Το ThumbEE είναι μια τέταρτη κατάσταση του επεξεργαστή, που εισάγει μικρές αλλαγές στο εκτεταμένο σύνολο εντολών Thumb-2. Αυτές οι αλλαγές κάνουν το σύνολο εντολών κατάλληλο για δυναμική παραγωγή κώδικα στο χρόνο εκτέλεσης (όπως η μεταγλώττιση JIT) σε ελεγχόμενα περιβάλλοντα εκτέλεσης (Execution Environments). Το ThumbEE χρησιμοποιείται από γλώσσες όπως η Limbo, η Java, η C#, η Perl και η Python, και επιτρέπει σε μεταγλωττιστές JIT να παράγουν μικρότερο κώδικα χωρίς να επηρεάζεται η ταχύτητα. Κάποια νέα χαρακτηριστικά του ThumbEE περιλαμβάνουν τους αυτόματους ελέγχους για μηδενικούς δείκτες (automatic null pointer checks) σε κάθε εντολή φόρτωσης και αποθήκευσης, μια εντολή για τον έλεγχο ορίων πινάκων, πρόσβαση στους καταχωρητές r8-r15 (όπου κρατούνται πληροφορίες του Jazelle/DBX Java VM), και ειδικές εντολές που καλούν χειριστές. Οι χειριστές είναι μικρά τμήματα κώδικα που καλείται συχνά και συνήθως υλοποιούν κάποιο χαρακτηριστικό μιας γλώσσας υψηλού επιπέδου, όπως η δέσμευση μνήμης για ένα νέο αντικείμενο. Αυτές οι αλλαγές προέκυψαν από την αλλαγή της χρήσης κάποιων κωδικών εντολών, όταν ο πυρήνας είναι σε κατάσταση ThumbEE. Η τεχνολογία VFP (Vector Floating Point, Κινητή Υποδιαστολή Διανυσμάτων) είναι μια επέκταση συνεπεξεργαστή για την αρχιτεκτονική ARM. Παρέχει φτηνές λειτουργίες υπολογισμών κινητής υποδιαστολής απλής και διπλής ακρίβειας σύμφωνα με το πρότυπο IEEE 754 (ANSI/IEEE Std 754-1985 Standard for Binary Floating-Point Arithmetic). Η VFP δίνει τη δυνατότητα υπολογισμών κινητής υποδιαστολής για διάφορες εφαρμογές (PDA, έξυπνα κινητά, συμπίεση και αποσυμπίεση φωνής, γραφικά τριών διαστάσεων και ψηφιακό ήχο, εκτυπωτές, συσκευές set-top, και εφαρμογές σε αυτοκίνητα). Η αρχιτεκτονική VFP υποστηρίζει επίσης την εκτέλεση σύντομων διανυσματικών εντολών, οι οποίες όμως εκτελούνται ακολουθιακά σε κάθε στοιχείο του διανύσματος και άρα δεν προσφέρουν την ταχύτητα του πραγματικού παραλληλισμού SIMD (Single Instruction Multiple Data). Η κατάσταση αυτή μπορεί να είναι όμως χρήσιμη στα γραφικά και σε άλλες εφαρμογές επεξεργασίας σήματος γιατί μειώνει το μέγεθος του κώδικα και της επιβάρυνσης στη φόρτωση και την αποκωδικοποίηση των εντολών. Άλλοι συνεπεξεργαστές κινητής υποδιαστολής ή SIMD των επεξεργαστών ARM είναι οι FPA, FPE και iwMMXt. Παρέχουν λειτουργικότητα παρόμοια με αυτήν της VFP αλλά οι κωδικοί των εντολών τους δεν είναι συμβατοί. Η επέκταση προχωρημένης SIMD (Advanced SIMD), με την εμπορική ονομασία NEON, είναι ένα σύνολο εντολών μονής εντολής-πολλών δεδομένων (single instruction multiple data, SIMD) που συνδυάζει 64 και 128 bit και παρέχει επιτάχυνση για εφαρμογές πολυμέσων και επεξεργασίας σήματος. Η τεχνολογία NEON μπορεί να αποκωδικοποιήσει ήχο MP3 σε επεξεργαστές που τρέχουν στα 10 MHz και μπορεί να εκτελεί το codec φωνής GSM AMR (Adaptive Multi-Rate) ακόμα και σε 13 MHz. Περιέχει ένα πλήρες σύνολο εντολών, ξεχωριστά αρχεία καταχωρητών και ανεξάρτητο υλικό εκτέλεσης. Η NEON υποστηρίζει δεδομένα ακεραίων 8-, 16-, 32- και 64-bit και αριθμούς κινητής υποδιαστολής απλής ακρίβειας (32-bit), και χρησιμοποιεί λειτουργίες SIMD για τον χειρισμό δεδομένων εικόνας ή ήχου, γραφικών ή υπολογισμούς ηλεκτρονικών παιχνιδιών. Η υποστήριξη SIMD της NEON υποστηρίζει μέχρι 16 λειτουργίες την ίδια στιγμή. Το υλικό NEON έχει τους ίδιους καταχωρητές κινητής υποδιαστολής με την VFP. Οι επεκτάσεις ασφαλείας (Security Extensions), με την εμπορική ονομασία TrustZone Technology, εμφανίστηκαν στον ARMv6KZ και σε προφίλ της αρχιτεκτονικής που ακολούθησαν. Είναι μια εναλλακτική λύση χαμηλού κόστους σε σχέση με την προσθήκη ενός επιπλέον εξειδικευμένου πυρήνα σε ένα SoC, δημιουργώντας δύο εικονικούς επεξεργαστές που υποστηρίζονται από έλεγχο πρόσβασης σε επίπεδο υλικού. Αυτό επιτρέπει στον πυρήνα της εφαρμογής να αλλάζει μεταξύ δύο καταστάσεων, οι οποίες ονομάζονται κόσμοι (worlds), για να μην ξεφεύγει πληροφορία από τον πιο ασφαλή κόσμο προς τον λιγότερο ασφαλή κόσμο. Η εναλλαγή μεταξύ κόσμων συνήθως δεν αλληλεπιδρά με τις άλλες δυνατότητες του επεξεργαστή, και κάθε κόσμος μπορεί να λειτουργεί ανεξάρτητα από τον άλλο, χρησιμοποιώντας παρόλα αυτά τον ίδιο πυρήνα. Η μνήμη και τα περιφερειακά γνωρίζουν τον κόσμο στον οποίο λειτουργεί ο πυρήνας και μπορούν να τον χρησιμοποιήσουν για να ελέγξουν την πρόσβαση σε μυστικές πληροφορίες και κώδικα της συσκευής. Μια κλασική εφαρμογή της τεχνολογίας TrustZone είναι η εκτέλεση ενός πλούσιου λειτουργικού συστήματος στον λιγότερο ασφαλή κόσμο, και ενός μικρότερου και πιο εξειδικευμένου κώδικα στον πιο ασφαλή κόσμο, ώστε να μην επιτρέπεται μη εγκεκριμένη χρήση της συσκευής. Στην πράξη, επειδή οι λεπτομέρειες της υλοποίησης της τεχνολογίας TrustZone δεν έχουν δημοσιευτεί και αναλυθεί, δεν είναι ξεκάθαρο πόση ακριβώς ασφάλεια παρέχει το μοντέλο τους. Από τον ARMv6, η αρχιτεκτονική ARM υποστηρίζει την προστασία σελίδων από εκτέλεση (no-execute page protection), η οποία ονομάζεται XN (eXecute Never). Οι πρώτοι προσωπικοί υπολογιστές Acorn Archimedes με βάση τον ARM έτρεχαν ένα προσωρινό λειτουργικό σύστημα που ονομαζόταν Arthur, το οποίο εξελίχθηκε στο RISC OS, που χρησιμοποιήθηκε αργότερα σε συστήματα ARM από την Acorn και άλλες εταιρείες. Η αρχιτεκτονική ARM υποστηρίζεται από πολλά ενσωματωμένα λειτουργικά συστήματα και λειτουργικά συστήματα πραγματικού χρόνου, όπως τα Windows CE, το .NET Micro Framework, το Symbian, το ChibiOS/RT, το FreeRTOS, το eCos, το Integrity, το Nucleus PLUS, το MicroC/OS-II, το QNX, το RTEMS, το BRTOS, το RTXC Quadros, το ThreadX, το Unison Operating System, το uTasker, το VxWorks, το MQX και το OSE. Η αρχιτεκτονική ARM υποστηρίζεται από λειτουργικά συστήματα τύπου Unix όπως τα εξής: Android BSD Linux iOS Plan 9 from Bell Labs Inferno Solaris webOS Linux Οι εξής διανομές Linux υποστηρίζουν επεξεργαστές ARM: Android Arch Linux Ångström CRUX ARM BackTrack Chrome OS DSLinux Debian ELinOS Fedora Gentoo GoboLinux iPodLinux Maemo MeeGo MontaVista Slackware T2 SDE TimeSys Ubuntu webOS Wind River Linux BSD Οι εξής εκδόσεις του BSD υποστηρίζουν επεξεργαστές ARM: RISC iX (μόνο συστήματα Acorn ARM2/ARM3) FreeBSD NetBSD OpenBSD iOS Solaris OpenSolaris Η Microsoft ανακοίνωσε στις 5 Ιανουαρίου 2011 ότι η επόμενη μεγάλη έκδοση της οικογένειας των Windows NT (με την ονομασία Windows 8) θα περιλαμβάνει υποστήριξη για επεξεργαστές ARM. Η Microsoft έκανε επίδειξη μιας πρώτης έκδοσης των Windows (έκδοση 6.2.7867) που εκτελείται σε υπολογιστές ARM στο Consumer Electronics Show το 2011. Η αρχιτεκτονική ARM υποστηρίζεται επίσης από τα λειτουργικά συστήματα για κινητά της Microsoft, Windows Phone and Windows Mobile. Amber (πυρήνας επεξεργαστή) – πυρήνας ARM ανοιχτού κώδικα σε γλώσσα περιγραφής υλικού Verilog Texas Instruments OMAP – πυρήνας ARM με επιπλέον πυρήνες DSP και επιτάχυνσης εφαρμογών Symbian Windows CE και Windows Phone iOS Inferno Android Επίσημη ιστοσελίδα, ARM Ltd. (Αγγλικά)