RISC Tasarım Felsefesi

ARM çekirdekleri RISC mimarisini kullanır. Peki nedir bu RISC?

RISC = Reduced Instruction Set Computing

CISC = Complex Instruction Set Computing

RISC denilen şey aslında bir tasarım felsefesidir, yüksek hızlarda tek bir cycle (döngü) süresinde işleyen basit ancak güçlü direktifler sağlamayı amaçlar. RISC felsefesi donanım tarafından yürütülen karmaşık talimatların azaltılması konusunda yoğunlaşır, çünkü donanıma nazaran yazılımla yapılması işlerin daha anlaşılabilir ve daha esnek olmasını sağlar. Sonuç olarak, RISC tasarımı derleyicilerde daha çok talep görür. Ancak, halihazırda karmaşık komut setli bilgisayar,namıdiğer CISC mimarisi, donanım üzerinde yapıların fonksiyonelliği bakımından daha güvenilirdir, bu nedenle CISC yapıları daha karmaşıktır. Şekil-1 RISC ve CISC arasındaki temel farkları görebiliriz.

Şekil1.1_CISC_RISC_FarklarıRISC felsefesi 4 ana tasarım kuralı ile uygulanır :

1) Komutlar (Instructions) – RISC işlemcileri sayısı azaltılmış yapı sınıflarına sahiptir. Bu sınıflar tek bir cycle (döngü) süresinde çalışabilen basit işlemleri sağlar. Derleyici yada programcı basit yapıları bir araya getirerek karmaşık işlemleri sentezler (bölme işlemi gibi). Her yapı pipeline ı gerçekleştirebilmek için sabit uzunlukludur. CISC işlemcilerde ise durum tam tersine komutların uzunluğu ve işlenme süreleri değişkendir ve zaman alabilir. (Pipeline işlemler için kısaca işlemcinin bir yandan güncel bilgiyi çözümlemek bir yandanda gelecek bilgiyi fetch edebilmesi (yakalayabilmesi) özelliği diyebiliriz.)

2) İletim Hatları (Pipelines) – Komutların işlenmesi küçük birimlere ayrılır ve böylelikle pipeline lar sayesinde paralel olarak çalıştırılabilirler. Kısaca Pipeline özelliğinde her bir cycle (döngü) süresinde maksimum iş yapabilmesi amacıyla hattın genişlemesi olarak düşünebiliriz. O an girişteki bilgi işlenirken gelecek bilgiyi yakalamamız gerekiyorki anlamlı bilgiyi kaçırmayalım. Komutları pipeline aşamasında çözümleyebiliriz. CISC işlemcilerdeki gibi komutların işlenmesi için microcode denilen mini programlara ihtiyaç yoktur.

3) Kayıtçılar (Registers) – RISC makineleri oldukça fazla genel-kullanım kayıtçılarına sahiptir. Herbir kayıtçı anlamlı bilgi yada adres barındırabilir. Kayıtçılar aslında tüm veri işleme faaliyetleri için yerel hafıza birimleri gibi davranırlar. CISC makinelerde ise durum biraz daha farklıdır, burada özel amaçlar için ayrılmış kayıtçılar mevcuttur.

4) Yükleme-Depolama Mimarisi (Load-Store Architecture) – İşlemci kayıtçılarda tutulan veriler üzerinde işlem yaparlar. Ayrı olan yükleme ve depolama komutları kayıtçı kümeleri ile harici hafıza arasında veri transferini gerçekleştirir. Hafıza erişimleri daha maliyetlidir, dolayısıyla hafıza erişimlerini data işlemlerinden ayırmak bize avantaj sağlar çünkü kayıtçı kümelerinde tutulan veri parçalarını sürekli hafızaya erişim sağlamadan birçok defa kullanabiliriz. CISC tasarımda ise tersine, veri işleme faaliyetleri doğrudan hafızaya erişerek yapılabilir.

Bu tasarım kuralları RISC işlemcilerinin daha basit olmasını sağlar, ve dolayısıyla çekirdek yüksek saat frekanslarında çalışabilir. Tersine, geleneksel CISC işlemcileri daha komplekstir ve daha düşük saat frekanslarında çalışır. 20 seneden fazladır, CISC ve RISC arasındaki fark net değildir, çünkü CISC işlemcileri RISC kavramlarından daha çok şey barındırır.

Kaynak : ARM System Developer’s Guide Designing and Optimizing System Software Andrew N. Sloss,D. Symes, C. Wright

 

Nested Vector Interrupt Controller (NVIC)

NVIC, arm işlemcilerde kullanılan gelişmiş interrupt kullanımları için bir nevi yönlendiricidir. Silikon üreticilerine göre değişiklik göstermekle birlikte 240 harici interrupt desteği, bunlarında 256 farklı öncelik seviyesi mevcuttur, ki bu öncelik seviyeleri değiştirilebilir. İşlemci durumu donanım tarafından kesmeye girildiğinde korunur ve kesmeden çıktığında tekrardan eski haline getirilir. NVIC ardarda kesme işlemlerini de destekler.

 

FPU (Floating Point Unit)

Floating-Point birimi (matematik önişlemcisi), özellikle floating point sayılarla çalışabilmek için tasarlanan bilgisayar sistemlerinin bir parçasıdır. Genel kullanım alanları toplama, çıkarma, çarpma, bölme, kök alma, bit kaydırma gibi işlemlerdir. Bazı sistemler (özellikle eski, mikrokod tabanlı mimarilerde)  exponansiyel veya trigonometrik hesaplamalar gibi çeşitli soyut fonksiyonlar gerçekleştirebilir, ancak artık birçok modern işlemciler yazılımsal olarak kütüphaneleri kullanarak bu işlemleri yapabiliyorlar.

Bilgisayar mimarilerinin genel amacı, bir veya daha çok FP birimlerini merkezi işlemci birimi ile entegre haline getirmektir. ancak birçok gömülü işlemciler donanımsal olarak folating-point işlemlerini destekleyecek yetkinliğe sahip değil.

CPU (Merkezi İşlemci Birim) bir program çalıştıracağı zaman floating-point işlemini koşturur, bunu gerçekleştirmek için 3 metod vardır;

  • Floating-Point Birim Emülatörü (Floating-Point kütüphanesi)
  • FP Birimi ekleme
  • Dahili FP Birimi

Bazı sistemler entegre birimlerden daha iyi olarak, önişlemci vasıtasıyla floating point birimini implement ederler. Bu tek bir entegre devre olabilir. Floating Point hesaplamaları için donanımın yetersiz kaldığı durumlarda, bu sorun yazılım kullanılarak aşılabilir, ancak bunun daha fazla işlem zamanına neden olabileceği buna karşılıkta ekstra donanım maliyetini düşüreceği göz önünde bulundurulmalıdır.

Farklı bilgisayar mimarileri için floating-point komutları yazılım fonksiyonlarının kütüphanesi olarak benzetilmiş olabilir, bu bize floating-point donanımı ile yada donanım olmadan bazı nesne kodlarını çalıştırmamıza imkan sağlar. Benzetme işlemi çeşitli seviyelerde implement edilebilir; CPU içinde mikrokod olarak (genelde bulunmaz), işletim sistemi fonksiyonu olarak, ya da kullanıcı alanında bulunan kod olarak. Yalnızca tamsayılı fonksiyonlar mümkün olduğunda CORDIC floating point benzetim methodları daha yaygındır.

Birçok modern bilgisayar mimarisinde, tamsayılı işlemlerden floating-point işlemlere bazı ayrımlar mevcuttur. Bu ayrımlar özellikle tasarımcı tarafından çeşitlilik gösterir. Örneğin Intel x86 ayrı bir floating-point kayıtçıları barındırır, üstelik bunlar bağımsız clock bağlantılarına sahiptir.

Floating-Point İşlemleri bazen pipeline olabilirler. Büyük ölçekli mimarilerin başlarında,henüz OOE yokken, floating-point işlemleri bazı zamanlarda tamsayılı işlemlerden ayrı olarak pipeline lardı. 1990 ların başlarından ortalarına kadari masaüstü ve serverlarda bulunan birçok mikroişlemci birden fazla Floating Point Birimine sahiplerdi.

Floating Point Library

Bazı floating-point  donanımları yalnızca basit işlemleri destekler – toplama,çıkarma, ve çarpma.

CPU herhangi bir program koşturacağı zaman floating-point işlemini çağırır ancak doğrudan donanım tarafından desteklenmez, CPU basit floating-point işlemler serisini kullanır. Sistemlerde, CPU fixed-point aritmetik işlemlerini tamsayı artimetik lojik biriminde çalıştırarak floating-point donanımını taklit eder.

Yazılım, floating-point kütüphanesinde bulunan paketlenmiş floating-point işlemleri taklit etmek için ihtiyacı olan işlem serilerini listeler.

Kaynak : http://en.wikipedia.org/wiki/Floating-point_unit

Wait State

Wait State aslında bir gecikmedir. Bilgisayar işlemcileri harici hafızaya yada herhangi bir cihaza erişim esnasında zaman farkları oluşur, bunu engellemek için bekleme süresi düşünülmüştür. 2011’in sonlarına doğru, bilgisayar microişlemcileri yüksek hızlarda işlem yaparken bellek teknolojileri için aynı durum söz konusu değildi. Örneğin; PC işlemcileri GHz hızında işlem yaparken, yani bir makina saykılı 1 nanosaniyeden daha az iken(~0.3-0.5ns), ana hafıza birimi ~15-30 ns gecikmeye sahipti. Ayrıca bazı ikinci seviye CPU lar, işlemci çekirdeklerinden daha yavaştı.

İşlemci harici hafızaya erişmek istediğinde, istenen adres bilgisini adres hattına yükleyip, daha sonra da cevap için beklemesi gerekiyordu, ancak cevap için geçen süre bazen onlarca yada yüzlerce saykıl sonra olabiliryordu. Her bir saykıl için beklenen süreye wait state dendi.

Wait state ler işlemci performansının boşa harcanan durumudur. Modern tasarımlar performans düşüklüğüne sebep olan bu durumu ortadan kaldırmak yada gizlemek için çeşitli teknikler kullanıyorlar:  CPU caches, instruction pipelines, instruction prefetch, branch prediction, simultaneous multithreading ve diğerleri. Tek başına hiçbir teknik 100% başarılı değildir, ancak birleştirildiğinde problemin etkisini önemli derecede azaltmış olur.

Kaynak : http://en.wikipedia.org/wiki/Wait_state

RCC

Reset Clock Control for STM32F405xx/07xx and STM32F415xx/17xx

 

Reset : 3 çeşit reset tanımlıdır;

1. Sistem Reseti,
2. Güç Reseti,
3. Hafıza reseti (Baskup Domain Reset)

Sistem Reseti : Sistem reseti, Hafıza biriminin içindeki kayıtçılar Saat Kontrol kayıtçısı (CCR) dışındaki tüm kayıtçıları reset değerlerine set eder.

Reset Devresinin Basit Şekli

Reset Devresinin Basit Hali

Sistem reseti aşağıdaki koşullardan herhangi birisi meydana geldiğinde oluşur;

1. NRST pini düşük seviye ( Harici Reset )
2. Watchdog penceresi sayma kouşulunun bitimi ( WWDG reset )
3. Bağımsız Watchdog sayma koşulunun bitimi ( IWDG reset )
4. Yazılım reseti (SW reset)
5. Düşük-Güç Yönetim Reseti

Yazılım Reseti
Bu reset kaynağı, RCC Saat Kontrol durum kayıtçısı (RCC_CSR) içinde bulunan reset bayrakları kontrol edilerek tanımlanabilir.