RISC’inizle girin! – RISC-V ve ESP32-C3 ile Intermezzo

semaver

New member


  1. RISC’inizle girin! – RISC-V ve ESP32-C3 ile Intermezzo

Raspberry Pi Pico’dan son bölümlerde bahsedildi. Pico blogu devam etmeden önce, bu ek gönderi Espressif’in yeni ESP32-C3 mikrodenetleyicisi hakkında. Çip, açık RISC-V mimarisini temel aldığından, makale aynı zamanda onun temellerini de ele alıyor.


İster Linux, OpenOffice, ister çok sayıda IDE, kitaplık veya gömülü geliştirme örnekleri olsun, açık kaynaklı yazılımların yoğun kullanımı uzun zamandır günlük hayatımızın bir parçası olmuştur. Açık donanım bir süredir ortalıkta dolaşırken, çok daha az yaygın. Açık RISC-V mimarisi ile açık kaynaklı donanım daha fazla ivme kazanabilir.

Bu makale ilk önce RISC-V’nin temellerini tanıtıyor ve ardından Espressif’in RISC-V’yi uygulayan yeni ESP32-C3 mikrodenetleyicisine geçiyor.

ARM alanı


BT topluluğundaki herkes, üreticilerin lisans ücretlerini ödedikten sonra kendi işlemcilerini geliştirmek için kullanabilecekleri ARM mimari sistemleri ailesine aşinadır. ARM uzun zamandır gömülü sistemler, mobil cihazlar ve SBC’ler (tek kartlı bilgisayarlar) alanında kurulmuştur. Ve Apple kısa süre önce dizüstü ve masaüstü sistemlerinde de kendi geliştirdiği ARM yongalarını oluşturmaya başladı.

ARM iş modelinin dezavantajlarından biri, özellikle küçük üreticiler için geçerli olan lisans ücretleridir. Ne de olsa, her şirket kendi kullanım durumlarına en uygun işlemcileri tasarlamayı göze alamaz. Serbest mimari RISC-V (“RISC-Five” olarak telaffuz edilir) ile, piyasada ciddi bir rekabet kendini kabul ettirebilir.

CISC yerine RISC


Çalışmalarım sırasında RISC (Reduced Instruction Set Computer) önemli bir rol oynadı. Sonuç olarak, çalışma hayatımın başlangıcını, altında SPARC yongaları olan RISC tabanlı Sun iş istasyonlarının önünde geçirdim. 80:20 kuralına göre, RISC, diğer özelliklerinin yanı sıra, birkaç sık kullanılan makine komutuyla sınırlı olması, geniş bir kayıt kümesine sahip olması ve komutların genellikle bir makine sözcüğü genişliğinde, örneğin 32 ile karakterize edilmesiyle karakterize edilir. bir CPU döngüsünde işlenen bit veya 64 bit. Bu, bu tür CPU’ları geliştirmeyi kolaylaştırır, ancak derleyicileri oluşturmayı daha karmaşık hale getirir. Buna karşılık, AMD ve Intel’den gelenler gibi CISC CPU’ları (CISC = Karmaşık Komut Seti Bilgisayarı) çok güçlü ve dolayısıyla karmaşık bir komut setine sahiptir. Diğer bir olumlu “yan etki”: Üreticiler, Intel veya AMD gibi yarı iletken devleri için deneyimin zor olduğunu gösterdiği, enerji açısından oldukça verimli RISC CPU’lar üretebilirler.


Herhangi bir işlemci ailesinin temel bileşeni, donanım mimarisi ile yazılım arasındaki arabirimi tanımladığı için kullanılan komut setidir. Özellikle Arduino çekirdeği, JVM, CLR veya bir Python yorumlayıcısı gibi donanım soyutlama katmanları donanımı gizlemek için kullanılabildiğinden, bu genellikle yazılım geliştiricileri çok az etkiler veya hiç etkilemez. Ancak, her bir donanım parçası için uygun araçları sağlaması gereken derleyici veya yorumlayıcı geliştiricileri etkiler. Bu nedenle, işlemciler için tek tip bir komut seti olması faydalı olacaktır. Bu açıkça gerçekçi değil, ancak en azından kısmen başarılabilir, bu da bizi RISC-V’ye getirir.

RISC-V nedir?


RISC-V, patentli olmayan ve bunun yerine bir BSD lisansı aracılığıyla serbestçe kullanılabilen bir açık komut seti tanımlar. Gelişimi 2010 yılında Berkeley’deki California Üniversitesi’nde başladı. Amaç, diğer şeylerin yanı sıra, özellikle sınıfta paralelliği öğretmek için eğitim amaçlı ayrı bir mimari sağlamaktı. US DARPA ve Microsoft ve ST Microelectronics gibi şirketler potansiyelini fark ettiğinde, akademik konseptten üniversiteler ve endüstri için bir çözüm doğdu.

Ana neden esnekliktir: RISC-V’nin Komut Seti Mimarisi (ISA), hem 32 bit hem de 64 bit işlemciler oluşturmak için kullanılabilir. RISC-V’nin geleceğe hazır olmasını sağlayan 128 bit işlemci mimarileri bile mümkündür. Ayrıca, altta yatan komut seti, hipervizörler aracılığıyla sanallaştırma, çıplak metal sistemler veya Linux gibi işletim sistemleri için ideal bir platform olarak çok uygundur.

RISC-V tabanlı bir donanım platformu, bazıları RISC-V uyumlu olmayanları içerebilen birkaç işlemci çekirdeği içerir. Ayrıca, komut setini genişleten ve RISC-V komut akışına entegre olan yardımcı işlemciler olabilir. Ayrıca, kapalı bir işlevi veya çekirdeğini tanımlayan ve G/Ç işleme gibi otonom görevleri gerçekleştiren hızlandırıcılar da vardır.

Bu modüler konseptin yardımıyla, tek çekirdekli mikrodenetleyicilerden çok çekirdekli sistemlere ve büyük paylaşılan bellek tabanlı ağ düğümleri kümelerine kadar değişen donanım uygulamaları düşünülebilir.

Modülerlik anahtardır


RISC-V’nin temeli, daha önceki RISC mimarilerinden büyük ölçüde ödünç alan bir tamsayı komut setidir. Aslında, biri 32 bit bilgi işlemde ve diğeri 64 bit bilgi işlemde uzmanlaşmış dört komut seti vardır. Başka bir talimat seti, yerleşik denetleyicilerde kullanılacak kayıt sayısını azaltırken, dördüncüsü 128 bit mimarileri destekler. Bahsedilen tüm temel komut setleri genişletilebilir. Değişken uzunluklu komutlar da mümkündür (bkz. RISC-V spesifikasyonu).

Standart uzantılar şunları içerir:

  • M: Tam sayılarda çarpma ve bölme
  • A: Atomik işlemler
  • F: Tek kesinlikli kayan noktalı sayılar
  • D: Çift duyarlıklı kayan noktalı sayılar
  • D: Dörtlü hassas kayan noktalı sayılar
  • L: ondalık kayan noktalı sayılar
  • B: Bitleri manipüle etmek için talimatlar
  • J: Dinamik olarak derlenmiş programlama dilleri için talimatlar
  • T: İşlemsel bellek
  • V: Vektör işlemleri için talimatlar
Bu arada, yukarıdaki liste tam değil.

Komut setine daha yakından bakmak isterseniz, örneğin burada bulabilirsiniz.

Tüm standart uzantıları uygulayan bir RISC-V işlemci çekirdeğinin karmaşıklığı, kesinlikle genel bir CPU’nun en yüksek noktalarına ulaşabilir.

RISC-V’nin başka bir heyecan verici boyutu daha var. Şimdiye kadar tartışılan “ayrıcalıksız” bir mimariye ek olarak, makineden başlayarak gözetmen aracılığıyla uygulamalara ve kullanıcılara kadar farklı düzeylerde ayrıcalıklar tanımlayan “ayrıcalıklı” bir mimari vardır. Geliştiriciler çoğunlukla bu katmanlardan biri için kod yazarlar. Makine düzeyinde kod (mode M) genellikle güvenilirdir ve en yüksek ayrıcalıklara sahiptir. Bunun yerine kod, daha az ayrıcalıkla gözetmen düzeyinde (S modu) çalışır. Burada örneğin işletim sistemleri atlıyor. Yukarı – yoksa aşağı mı demeliyim?! – Uygulamalar “ayrıcalıklı” U modunda çalışır (U=kullanıcı). Komut seti mimarisine ilişkin RISC-V kılavuzunun II. Cildi, ayrıcalıklı mimariyi ele alır ve farklı ayrıcalık seviyelerine sahip makine komutlarını desteklemek için uygun uzantıları sunar.

teori ve pratik


RISC-V “yalnızca” bir spesifikasyonu temsil ettiğinden, soru onu uygulamakla ilgilenen olup olmadığıdır. Elbette, cevap evet, aksi takdirde bu yazı onu ele almazdı. Örneğin, Western Digital ve Nvidia uygun uygulamalar geliştiriyor. RISC-V tabanlı PULPino kartı, ETH Zürih’ten geliyor.

Daha fazlası olabilir mi? Çok sayıda başka ürün ve geliştirme RISC-V web sitesinde bulunabilir. Buradan RISC-V’nin hem akademi hem de endüstride birçok destekçisi olduğu görülebilir (listeye bakın). RISC-V komut setini uygulamak için, Venüs simülatörünü kullanan bir Visual Studio Code uzantısı vardır (buraya bakın).

RISC-V entegre oluyor


Gömülü alan artık “ev kullanımı” için bazı ürünler de sunmaktadır, örneğin:

  • Espressif’in ESP32-C3’ü
  • SiFive’ın çeşitli panoları
  • M5Stack’in M5StickV’si
  • SiPEED Maix-Bit, Maixduino, Longan Nano kartları



SiFive



SiFive’ın HiFi kartı ayrıca RISC-V tabanlı bir mikrodenetleyici içerir


(Resim: SiFive)



Longan Nano, Aliexpress üzerinden yaklaşık 2,70 Euro’dan başlayan fiyatlarla satın alınabilir ve ayrıca Arduino kartlarıyla da uyumludur (bkz. SiPEED web sitesi).

Sonuç olarak, geliştiriciler ilgili ürünleri uygun ve cazip fiyatlarla satın alabilirler. Sonuç olarak, RISC-V artık yalnızca bir özellikler koleksiyonu değil, bir gerçektir. Böylece keşif başlayabilir.




RISC-V uluslararası



Birçok şirket ve üniversite zaten RISC-V’yi desteklemektedir. İşte sadece küçük bir alıntı.


(Resim: RISC-V Uluslararası)



Espresso ESP32-C3


Neyse ki, Espressif bana kartlarının ESP32-C3-DevKitM-1 adlı bir üretim öncesi modelini sağladı. Buradaki odak noktası bu olmalı. Adındaki ESP32’ye rağmen, ESP32-C3 mikro denetleyicisi daha çok ESP8266’nın bir evrimi olarak görülmelidir. Daha spesifik olarak, performans ve kapasite açısından ESP8266 ve ESP32 arasındadır.




espresso



Espressif tarafından ESP32-C3 DevkitM-1


(Resim: Etkileyici)



Ayrıca oldukça rekabetçi fiyatlarla piyasaya çıktığı ve kardeşleri gibi Bluetooth 5.0 ve 2.4GHz WiFi sayesinde son derece iletişimsel olduğu da söyleniyor.40nm teknolojisi ile üretilen RISC-V işlemci tek çekirdeğe sahip ve tek çekirdeğe sahip. 160 MHz’e kadar saat frekansı 384 Kbyte ROM’a ek olarak, 16 Kbyte’ı önbellek olmak üzere 400 Kbyte SRAM mevcuttur. Gerçek zaman saati ayrıca 8 Kbyte belleğe sahiptir.

Ek olarak, bir ESP32-C3 aşağıdaki bağlantı noktalarını ve arabirimleri uygular:

  • 22× programlanabilir GPIO’lar
  • 2 × 12 bit SAR ADC, altı kanala kadar
  • 1 × sıcaklık sensörü
  • 3 × SPİ
  • 2 × UART
  • 1 × I2C
  • 1 × I2S
  • İki iletim kanalı ve iki alım kanalı ile uzaktan kumanda
  • Altı kanala kadar PWM LED denetleyici
  • Üç iletim kanallı ve üç alıcı kanallı DMA kontrolörü
  • 1 × CAN veri yolu denetleyicisi (ISO 11898-1 ile uyumlu)
  • entegre güvenlik donanımı



RISC-V tabanlı ESP32-C3'ün blok diyagramı



RISC-V tabanlı ESP32-C3’ün blok diyagramı



Beş enerji düzeyine sahip entegre bir PMU (Güç Yönetim Birimi), mümkün olan en düşük güç tüketimiyle derin uyku modu gibi ihtiyaçlarınıza uyum sağlamanıza olanak tanır. ESP32-C3 hakkında daha fazla ayrıntı öğrenmek istiyorsanız, web’de ilgili bir veri sayfası bulacaksınız.

programlama araçları


ESP32-C3 veya ESP32-C3-DevKitM-1 kartıyla deneme yapmak için iyi Espressif belgeleri var. İlgilenen geliştiriciler, ESP IDF araçlarını (buradaki önceki makaleme bakın) kullanarak veya Eclipse veya Visual Studio Code’daki uygun eklentileri kullanarak komut satırında programlayabilirler.

program örneği


Aşağıdaki örnek yerleşik LED’in yanıp sönmesine neden olur. Program, tek iş parçacığını her seferinde bir saniyeliğine kapatmak için FreeRTOS üretici yazılımının çoklu iş parçacığı desteğini kullanır. Uygulamanın geri kalanı yerleşik LED için GPIO’yu bir çıkış olarak tanımlar (gpio_set_direction())), ile koyar reset()belirli bir durumda ve sonra dönüşümlü olarak gpio_set_level() önce bir 0 sinyali ve ardından bir 1 sinyali verir. printf()-Aramalar, seri terminalde metin çıkışı sağlar.

/* Blink Beispiel */
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
/* Genutzt wird der konfigurierte GPIO für die eingebaute LED */
#define BLINK_GPIO CONFIG_BLINK_GPIO

void app_main(void) {
/* GPIO zurücksetzen */
gpio_reset_pin(BLINK_GPIO);
/* GPIO für die LED ist ein Ausgang */
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
while(1) {
/* LED aus */
printf("LED ausgeschalten");
/* das heisst 0 am GPIO ausgeben */
gpio_set_level(BLINK_GPIO, 0);
/* 1 Sekunde Wartezeit des Threads */
vTaskDelay(1000 / portTICK_PERIOD_MS);
/* LED ein */
printf("LED eingeschalten");
/* das heisst 1 am GPIO ausgeben */
gpio_set_level(BLINK_GPIO, 1);
/* 1 Sekunde Wartezeit des Threads */
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

Çözüm


RISC-V, bir başarı öyküsü olma yolunda büyük bir potansiyele sahiptir. Özellikle yarı iletken üreticileri, açık komut mimarisi fırsatını değerlendiriyor, ancak gömülü üreticiler de ivmeden yararlanıyor. Mimarinin masaüstü veya dizüstü bilgisayarlarda da kullanılıp kullanılamayacağı henüz belli değil. Geliştiriciler için başlangıçta bir sistemin sunduğu donanımın önemi yoktur. Bununla birlikte, dolaylı olarak, tek tip bir komut mimarisi, geniş bir donanım ve yazılım ekosisteminden fayda sağlayacaktır. Ve böylece RISC-V’nin daha da geliştirilmesi heyecan verici olmaya devam ediyor.

Bir sonraki taksitte, bu blog Raspberry Pi Pico IDE’lerini ve projelerini yeniden ele alacak.


()



Haberin Sonu
 
Üst