Firmware'iniz kart gelmeden çalışsın. Hatta silikon gelmeden.
CARME, Cortex-M0'lı bir sensör düğümünden 16 çekirdekli bir Linux sunucusuna kadar kartları ve SoC'leri bütünüyle emüle eder ve derlemenizin ürettiği ikili dosyayı hiç değiştirmeden çalıştırır. Gömülü ekipler donanımı beklemeden geliştirir, hata ayıklar ve test eder. Silikon ekipleri istedikleri bloğu RTL olarak koyar; sürücü, işletim sistemi ve donanım tape-out'tan çok önce buluşur.
- 250+
- kart ve SoC: Arm, RISC-V, SPARC, Power, x86, Xtensa ve MSP430
- 650+
- yazmaç düzeyinde birebir çevre birimi modeli, UART'lardan PCIe ve UFS'ye
- Tek zaman çizgisi
- CPU'lar, çevre birimleri, ağlar ve RTL, her çalıştırmada aynı
- 0 kart
- masanızda ya da CI çiftliğinizde gereken kart sayısı
# NUCLEO-H753ZI üzerinde bir Zephyr imajı, konsol USART3'te$ carme boards/nucleo_h753zi.cmboard --firmware build/zephyr/zephyr.elf --uart usart3# aynı kart, kripto bloğu SystemVerilog RTL'i ile$ carme boards/nucleo_h753zi.cmboard --firmware build/zephyr/zephyr.elf \ --rtl crypto0=-f rtl/aes_gcm.f --waves aes.fst --coverage cov/# her commit'te, her kartta, her test$ carme-test tests/ -j 32 --junit results.xmlParçanın seçildiği günden ürünün çıktığı güne.
- Başlangıç
Gömülü geliştiricilerKartın geldiği gün değil, seçildiği gün
Silikon ekipleriSilikonun döndüğü gün değil, RTL'in başladığı gün
- Çalıştırma
Gömülü geliştiricilerZephyr, FreeRTOS, Linux ya da bare-metal imajınız 250+ kartta
Silikon ekipleriBoot ROM'unuz, sürücüleriniz ve işletim sisteminiz kendi SoC'nizde, blok blok RTL ile
- Hata ayıklama
Gömülü geliştiricilerHer çekirdekte GDB ve IDE'niz; prob yok, zamanı istediğiniz an durdurun
Silikon ekipleriFirmware satırları ve RTL dalga biçimleri tek zaman ekseninde
- Test
Gömülü geliştiricilerHer commit her kartta; donanım rafı yok
Silikon ekipleriUyaran olarak firmware, her çalıştırmadan RTL kapsamı
- Teslim
Gömülü geliştiricilerDonanımın ilk gününde test edilmiş firmware
Silikon ekipleriMüşterilerinizin numuneden önce kullandığı sanal geliştirme kiti
Teslim ettiğiniz ikili dosya, sistemin tamamında.
Teslim ettiğiniz ikili dosya
ELF, ham ikili, Intel HEX ya da S-record; araç zinciriniz nasıl yazıyorsa öyle. Özel derleme yok, saplama yok, simülasyon HAL'iyle değiştirilmiş HAL yok. Linux, Zephyr, FreeRTOS, NuttX, Tock, seL4, bare metal: kartta açılıyorsa CARME'de de açılır.
Tek bir CPU değil, sistemin tamamı
Bir makine; CPU'lar, veri yolları, bellek ve yonga üzerindeki her çevre biriminden oluşur ve veri sayfasında yazdığı gibi bağlanır. Farklı parçalar birlikte çalışır: Linux çalıştıran Cortex-A53 kümesi, RTOS çalıştıran Cortex-R5F, gücü yöneten M çekirdeği.
Herhangi bir modelin yerine RTL'iniz
İstediğiniz çevre birimini, hızlandırıcıyı ya da CPU'yu SystemVerilog, Verilog veya VHDL karşılığıyla değiştirin. Lumina Sim onu emüle edilen sistemle adım adım, 4 durumlu çalıştırır; firmware farkı anlamaz.
Birçok makine, tek ağ
Kartları Ethernet, CAN, BLE, 802.15.4, LoRa ve UART üzerinden bağlayın. Bir ağ geçidi, yirmi sensör düğümü ve buluta giden bağlantı tek emülasyonda, tek saatle çalışır; böylece bir mesh ya da araç ağı her çalıştırmada aynı davranır.
Her seferinde deterministik
Aynı girdiler aynı komut akışını, aynı anlarda aynı kesmeleri ve aynı çıktıyı verir. CI'da bir kez görülen bir hata, yeniden oynatabileceğiniz, geriye doğru adımlayabileceğiniz ve düzeltebileceğiniz bir hatadır.
İstediğinizde karttan hızlı
Çevrilmiş yürütme, mikrodenetleyici firmware'inin çoğunu gerçek zamandan hızlı çalıştırır. Zamanı durdurabilir, yavaşlatabilir ya da ana makinenin izin verdiği kadar hızlandırabilirsiniz; bir checkpoint ile yüz test tek bir açılışın sonundan başlar.
Her blok model ya da RTL olabilir. Firmware farkı anlamaz.
Sürücüyü modelde tam hızda geliştirin. Bloğun RTL'i derlendiğinde tek bir seçenekle onu devreye alın ve aynı testleri çalıştırın. Lumina Sim yalnızca o bloğu çevrim çevrim çalıştırır; sistemin geri kalanı emülasyon hızında kalır.
def on_write_CTRL(p, v): if p.CTRL.START: p.DATA = aes_gcm(p.KEY, p.IN) p.STATUS.DONE = 1 p.irq.done.pulse()
Bir ağ geçidi ve düğümleri, tek emülasyonda.
Her düğüm kendi firmware'ini çalıştırır ve her çalıştırma aynı şekilde ilerler. Paket kaybını, menzili ve paraziti siz belirleyin; bir mesh ağındaki zamanlama hatası, yeniden oynatıp düzeltebileceğiniz bir hataya dönüşür.
Kartın size veremeyeceği hata ayıklama.
Hata ayıklayın:GDB ya da IDE'nizle, tüm çekirdeklerde aynı anda, prob olmadan. Koda, veriye, çevre birimi yazmaçlarına ve veri yolu işlemlerine breakpoint koyun.
İzleyin:her komutu, bellek erişimini, kesmeyi ve veri yolu aktarımını .cmtrace dosyasına yazın ve RTL dalga biçimlerinin yanında açın.
Kapsamı ölçün:firmware'in satır kapsamı çalıştırmanın kendisinden gelir; enstrümantasyon da yeniden derleme de gerekmez.
Profil çıkarın:çevrimlerin nereye gittiğini fonksiyon ve çekirdek bazında görün.
Hata enjekte edin:bit çevirin, paket düşürün, saati bozun, gücü kesin ve firmware'in toparlandığını doğrulayın.
Kaydedin ve geri yükleyin:sistemin tamamını .cmsnap olarak kaydedin ve istediğiniz yerden devam edin.
Her işlemin bir komutu, bir Python çağrısı ve bir soket API'si var.
Betikler ve testler düz Python'dur. Ajanlar bir kartı açabilir, imaj yükleyebilir, breakpoint koyabilir, yazmaçları okuyabilir ve olanı raporlayabilir; bir insanın elde ettiği determinizmle.
Sonuçlar, pipeline'ınızın zaten okuduğu JUnit XML, kapsam raporları ve izler olarak çıkar.
- runtest_beacon_seen_by_gatewaynrf52840dk
- ···test_node_survives_brownoutnrf52840dk
- ···test_aes_gcm_vectorsnucleo_h753zi
- ···test_ota_power_cutnucleo_h753zi
- ···test_linux_boot_from_snapzcu102
- ···test_can_bus_off_recoveryramn
- ···test_watchdog_resethifive1
Deponuzda düz YAML ve Python.
- .cmboard
İçeriğiBir kart: SoC'si, belleği, harici aygıtları, pinleri, firmware'i
BiçimYAML
- .cmsoc
İçeriğiBir SoC: çekirdekler, veri yolları, bellek haritası, çevre birimleri, kesmeler
BiçimYAML
- .cmperiph
İçeriğiBir çevre birimi: yazmaçlar, alanlar, kesmeler ve modeli ya da RTL'i
BiçimYAML
- .cmsystem
İçeriğiBirden çok makine ve aralarındaki bağlantılar
BiçimYAML
- .cmscript
İçeriğiBir çalıştırma: ne yükleneceği, nerede durulacağı, neyin kontrol edileceği
BiçimPython
- .cmtest
İçeriğipytest tarzı testler
BiçimPython
- .cmsnap
İçeriğiKaydedilmiş sistem durumu
Biçimİkili, sürümlü
- .cmtrace
İçeriğiYürütme ya da veri yolu izi
Biçimİkili, belgelenmiş
CARME'de neler var.
- Arm Cortex-M, Cortex-R, Cortex-A (32 ve 64 bit)Önizleme
- RISC-V RV32 ve RV64, vektör, özel komutlarÖnizleme
- SPARC, Power, x86, x86-64, Xtensa, MSP430Önizleme
- Lumina Sim ile RTL eş simülasyonu (SystemVerilog, Verilog, VHDL)Önizleme
- Çok düğümlü sistemler: Ethernet, CAN, BLE, 802.15.4, UARTÖnizleme
- GDB sunucusu, izleme, kapsam, profil, hata enjeksiyonuÖnizleme
- Kaydetme ve geri yükleme, checkpoint'lerÖnizleme
- Python betikleri ve testleri, soket API'siÖnizleme
- Linux x86-64Önizleme
Lumees Lab akışının bir parçası.
Sık sorulan sorular.
Firmware'imi değiştirmem ya da yeniden derlemem gerekir mi?
Hayır. CARME, karta yüklediğiniz ELF dosyasının aynısını yükler. Çevre birimleri yazmaç düzeyinde modellendiği için üretici HAL'leri, RTOS sürücüleri ve Linux sürücüleri olduğu gibi çalışır.
Çevre birimi modelleri ne kadar doğru?
Her model, üreticinin başvuru kılavuzundaki yazmaç haritasını ve davranışı izler ve onu kullanan gerçek firmware ile test edilir: üretici SDK örnekleri, Zephyr ve Linux sürücüleri. Modelden fazlasına ihtiyacınız olduğunda bloğun RTL'ini çalıştırın.
Çevrim doğruluğunda mı?
CARME komut düzeyinde doğru ve deterministiktir; firmware geliştirme ve CI'ın ihtiyacı budur ve hızlıdır. Zamanlamanın saat kenarında önemli olduğu yerde o bloğu RTL olarak koyun: Lumina Sim onu aynı emülasyonda çevrim çevrim çalıştırır.
Kartım listede yok. Yine de CARME'yi kullanabilir miyim?
Evet. Çoğu kart bilinen bir SoC ile harici parçalardan oluşur: birkaç düzine satırlık bir .cmboard yazın. Yeni bir SoC, çevre birimi kütüphanesinden kurulan bir .cmsoc dosyasıdır. Özel bir SoC'yi hizmet ekibimiz sizinle birlikte kurar ve bakımını yapar.
Bir çevre birimini kendim modelleyebilir miyim?
Evet. Yazmaçları bir .cmperiph dosyasında tanımlayın ve davranışı Python ile yazın ya da RTL'inize yönlendirin. İkisi de CARME yeniden derlenmeden yüklenir.
Hangi platformlarda çalışır?
Linux x86-64.
Gömülü ve silikon ekipleri için tam sistem emülasyonu
Gömülü geliştiriciler için
Donanım olmadan geliştirin, hata ayıklayın, test edin
Silikon ekipleri için
Silikon hazır olduğunda yazılım da hazır
Döngüde RTL
HDL ve firmware birlikte test edilir
Lumina entegrasyonu
RTL'den çalışan firmware'e tek akış
Test ve CI
Her test, her kart, her commit
Kartlar ve SoC'ler
250+ kart ve SoC, açılmaya hazır
CPU'lar
Arm, RISC-V, SPARC, Power, x86, Xtensa, MSP430, TriCore
Çevre birimleri
Yazmaç düzeyinde birebir 650+ model
Firmware'inizi önce CARME'de çalıştırın.
Teslim ettiğiniz bir kartı, derlediğiniz bir imajı ve önemli bir testi getirin. Onu sizinle birlikte CARME'de ve donanımda yan yana çalıştıralım.