ARM çekirdekleri, 32 bitlik bir RISC RISC mimarisi kullanır. Bu, çekirdeğin hafızayı doğrudan manipüle edemeyeceği anlamına gelir. Tüm veri manipülasyonları, hafızaya yerleştirilmiş bilgi ile kayıtların yüklenmesi, veri çalışmasının gerçekleştirilmesi ve sonra belleğe geri kaydedilmesi ile gerçekleştirilmelidir. İşlemcide 37 toplam register vardır. Ancak, bu sayı yedi farklı işlemci modu arasında bölünmüştür.
Yedi işlemci modu, kullanıcı görevlerini, işletim sistemini çalıştırmak ve kesintiler (interrupt) gibi istisnaları etkin bir şekilde işlemek için kullanılır. Her modda bulunan yazmaçlardan bazıları çekirdeğin belirli kullanımı için ayrılırken, çoğu genel kullanıma açıktır. Özgün işlevler için çekirdek tarafında ayrılan registerlar, R13: yığın işaretçisi (SP), r14: bağlantı yazıcısı olarak (LR), r15: program sayacı olarak (PC), Geçerli Program Durumu Kaydı (CPSR) ve Kayıtlı Program Durum Kaydı (SPSR) olarak kullanılır.
SPSR ve CPSR, işlemci çekirdeğinin altında çalıştığı özelliklere özgü durum ve kontrol bitlerini içerir. Bu özellikler, çalışma modunu, ALU durum bayraklarını, kesme devre dışı bırak/etkinleştirme işaretlerini ve çekirdeğin 32 bit ARM veya 16 bit “Thumb State” çalışıp çalışmadığını tanımlar.
ARM ve Thumb, ARM çekirdeklerinin isimleriyle bir “T” ile desteklenen iki farklı komut setidir. Örneğin, ARM7 TDMI Thumb modunu destekler. ARM talimatları 32 bit genişliğinde ve Thumb talimatları 16 bit genişliğindedir. Thumb modu, kodun daha küçük olmasına izin verir ve hedefin hafızası yavaşsa, potansiyel olarak daha hızlı olabilir. “D” ve “I” birlikte tüm ARM çekirdeklerinde sunulan çip üzerinde hata ayıklama olanaklarını içerir. Bunlar sırasıyla Debug sinyallerini ve EmbeddedICE mantığını temsil eder. M, 64 bitlik sonuçların ve geliştirilmiş bir çarpan desteğinin yüksek performansa neden olduğunu gösterir. Bu çarpan şimdi tüm ARMv4 ve üstündeki mimarilerde kullanılan bir standarttır.
Yedi farklı işlemci modu arasında 37 toplam kayıt var. Yukarıdaki şekilde her modda görünen registerlerin listesini gösterir.
Kullanıcı modu, ayrıcalıklı olmayan tek mod, görünür en az toplam kayıt sayısına sahiptir. SPSR’ye ve CPSR’ye sınırlı erişime sahip değildir. FIQ ve IRQ, CPU’nun iki kesme modudur. Yönetici modu, başlatılırken veya sıfırlandığında işlemcinin varsayılan modudur. Tanımsız mod, bilinmeyen veya illegal talimatları yakalar. İptal modu, talimatların alınması veya verilere erişilmesi sonucunda illegal hafıza erişimini yakalar. Son olarak, “Bank Register” kullanan sistem modu, iç içe geçmiş kesintilerle uğraşırken ek bir ayrıcalıklı mod sağlamak için tanımlanmıştır. Bununla birlikte FIQ modu, kritik kesintileri ele alırken daha fazla esneklik ve daha yüksek performans sağlamak için beş tane daha eklenmiş “Bank Register”‘a sahiptir.
ARM çekirdeği Thumb durumunda olduğunda, “Register Bank” düşük ve yüksek kayıt alanlarına ayrılır. Thumb durumundaki komutların çoğunun 3 bit kayıt belirteci vardır. Sonuç olarak, bu talimatlar yalnızca düşük kayıtlara yalnızca R0 ile R7 arasındaki bölümlere erişebilir. R8 ile R15 arasındaki yüksek yazmaçların daha kısıtlı kullanımı vardır. Bu kayıtlara sadece birkaç komut girebilir.
Thumb 16-bit Talimatları
Büyüyen kod ve veri büyüklüğü ile bellek, sistem maliyetini etkiler. Bellek maliyetini azaltma ihtiyacı, daha küçük kod büyüklüğüne ve daha dar belleğin kullanılmasına yol açar. Bu nedenle ARM, derlenmiş standart C dili için değiştirilmiş bir talimat seti geliştirdi. Ayrıca, 32 bit işlemci ile 16 bit bellek yolu gibi dar bir bellek yolu kullanıldığında performans kaybı sorunu oluşmaktadır.
İşlemci, bir talimat almak veya veri okumak ve yazmak için iki bellek erişim döngüsü almalıdır. Bu sorunu çözmek için, ARM standart ARM 32-bit komut setine bağlı olarak, Thumb etiketli indirgenmiş 16-bitlik başka bir set geliştirdi. Kullanılan Thumb için, işlemcinin 16 bit kodu çalıştırmaya başlaması için ARM’dan Thum’a bir durum değişikliği yapması gerekir. Bunun nedeni, çekirdeğin varsayılan durumunun ARM olmasıdır. Bu nedenle, her uygulamanın ARM’da yazılan önyükleme koduna sahip olması gerekir. Uygulama kodu tamamen Thumb için derlenecekse, ARM önyükleme kodunun segmenti işlemcinin durumunu değiştirmelidir. Bu işlem tamamlandıktan sonra, herhangi bir sonuç olmadan 16 bitlik talimatlar yerine sorunsuzca getirilir. Bu değişimde mimarinin aynı kaldığını unutmamak önemlidir. Komut seti, ARM komut setinin azaltılmış bir setidir ve sadece talimatlar 16-bittir; çekirdekteki her şey hala 32-bit olarak çalışır. Thumb’da derlenen bir uygulama kodu, ARM’da derlenen koddan ortalama olarak %30 daha küçüktür ve dar 16-bit bellek sistemlerini kullanırken normalde %30 daha hızlıdır.
Örnek olarak; ARM7TDMI Blok Diyagramını inceleyelim.
Yandaki şekilde, şemanın ortasındaki “Register Bank”, gerekli adres veriyolu ve veri yolunu göstermektedir. Bu işlem, 16 bitlik Thumb komutundan 32 bit ARM eşdeğer bir komut oluşturur, yönergenin kodunu çözer ve yürütme aşamasına geçirir.
Hata Ayıklama (Debug) Uzantıları
Çekirdeğin Hata Ayıklama uzantıları, CPU’nun veri yolunda ne olduğunu izlemek için tarama zincirlerini ekler. Sinyaller ayrıca çekirdeğe eklenmiştir, böylece bir kesme noktası veya izleme noktasına ulaşıldığında işlemci kontrolü hata ayıklayıcıya verilebilir. Bu işlem, kullanıcının kayıt içeriği, bellek bölgeleri ve işlemci durumu gibi özellikleri görmesini sağlayan işlemciyi durdurur.
EmbeddedICE Logic
ARM tabanlı uygulamalar için güçlü bir hata ayıklama ortamı sağlamak için EmbeddedICE mantığı geliştirilmiş ve ARM çekirdek mimarisine entegre edilmiştir. Kod veya verilerde donanım kesme noktaları veya izleme noktaları belirleme yeteneği sağlayan bir yazmaç kümesidir. EmbeddedICE mantığı, bir kesme noktası veya izleme noktasını kontrol etmek için her çekirdek döngüsünü ARM çekirdek sinyallerini izler. Son olarak, kullanıcı ve EmbeddedICE mantığı arasında iletişim kurmak için ek bir tarama zinciri kullanılır.
EmbeddedICE mantığı ile dış ortam ile iletişim, test erişim portu veya TAP, kontrolör ve standart IEEE 1149.1 JTAG bağlantısı üzerinden sağlanır.
Çip üzerinde hata ayıklama çözümlerinin avantajı, özellikle yazılımın ROM’da bulunduğu durumlarda, yazılımı hızla ayıklama yeteneğidir. Bu gelişme döngüsünü kısaltmak için çok önemlidir. Multi-ICE ve EmbeddedICE kullanımı, bir tüketici ürününün üretim sürümünde bile bir ASIC’in içine entegre edilmiş bir işlemci için tam hata ayıklama yetenekleri sağlar.