Sürücü ile donanım arasındaki hatayı, silikona girmeden bulun.
Gözden kaçan SoC hatalarının çoğu ne RTL'de ne de firmware'dedir. Birinin diğeri hakkında varsaydığı şeydedir. CARME ikisini, herhangi birinin ilk commit'inden itibaren birlikte çalıştırır ve sonraki her commit'te çalıştırmaya devam eder.
41void dma_start(void) {42 DMA0->SRC = (uint32_t)buf;43 DMA0->LEN = 256;44 DMA0->CTRL = DMA_EN | DMA_IRQ;45 while (!done) __WFI();46}
Tek bir çevre biriminden SoC'nin tamamına.
Tek bir çevre birimi
Yeni bir UART, bir DMA motoru, bir kripto çekirdeği. Blok RTL'dir; CPU, bellek ve diğer çevre birimleri emüle edilir. Sürücü neredeyse tam hızda çalışır, yalnızca blok çevrim çevrim ilerler.
Bir hızlandırıcı alt sistemi
Bir NPU, bir video hattı, kendi belleği olan bir paket motoru. Alt sistem, ara bağlantısıyla birlikte RTL'dir; Linux ve kullanıcı alanı yığını emüle edilen Cortex-A ya da RISC-V çekirdeklerinde çalışır.
CPU
Kendi çekirdeğiniz RTL olarak, CARME'nin bellek ve çevre birimi modellerine karşı gerçek firmware çalıştırır. Emekliye ayrılan her komutu CARME'nin aynı ISA için başvuru modeliyle karşılaştırın ve farklı olan ilk komutta durun.
SoC'nin tamamı, parça parça
Tüm bloklar emüle edilerek başlayın. Yazıldıkça onları RTL ile değiştirin. Aynı testler geçmeye devam eder ya da hangi bloğun onları bozduğunu tam olarak söyler.
Donanım ile yazılım arasındaki varsayımları.
- Yeni IP'ye karşı sürücüler
NasılÜreticinin ya da ekibinizin sürücüsü RTL üzerinde, daha FPGA'ya geçmeden
- Açılış akışı
NasılROM, önyükleyici, güvenli açılış ve işletim sistemi açılışı RTL açılış yolunda
- Yazmaç haritaları
NasılFirmware başlık dosyaları ve RTL yazmaç haritası tek bir .cmperiph'e karşı kontrol edilir
- Kesmeler ve DMA
NasılFirmware ile donanım arasındaki gecikme, sıralama ve yarış durumları
- Düşük güç
NasılSaat kapılama, güç alanları ve uyanma; bunları yöneten firmware ile birlikte
- Hata yönetimi
NasılRTL'e ya da veri yoluna hata enjekte edilir; firmware toparlanmak zorundadır
- Performans
NasılGerçek yazılım yükü altında RTL'in çevrim sayıları
- Güvenlik
NasılGerçek boot koduyla anahtar yönetimi, yaşam döngüsü ve debug kilidi
Her commit'te RTL'e karşı firmware.
carme-test, .cmtest dosyalarını çekirdekler ve makineler arasında paralel çalıştırır. Her test bir checkpoint'ten başlar, firmware'i RTL'e karşı çalıştırır ve UART çıktısını, yazmaçları, belleği, veri yolu trafiğini ya da sinyalleri kontrol eder. Sonuçlar JUnit XML olarak çıkar; hatalar iz, dalga biçimleri ve onları birebir yeniden oynatan komut satırıyla gelir.
from carme import boarddef test_dma_burst_to_ddr(rtl): b = board("boards/my_soc.cmboard", rtl={"dma0": "-f rtl/dma.f"}) b.load("build/dma_selftest.elf") b.uart("uart0").expect("DMA: 64 bursts OK", timeout_ms=200) assert b.signal("dma0.u_ctrl.err_q") == 0Projeyi baştan sona izleyen kapsam, hata ayıklama ve testler.
Firmware'den kapsam
Her firmware çalıştırması RTL kapsamına eklenir: kod, toggle, FSM ve fonksiyonel. Her çalıştırma firmware'i de ölçer: testlerin hangi satırlara ulaştığını. Tek çalıştırma, iki rapor; ikisindeki boşluk da yazılacak bir sonraki testi gösterir.
İkisi için tek hata ayıklayıcı
CPU'yu bir C satırında durdurun ve RTL'i o anda görün. Bir RTL sinyaline breakpoint koyun ve ona yol açan firmware'e inin. İzler ve dalga biçimleri Debug görünümünde tek zaman eksenini paylaşır.
RTL'den FPGA'ya ve silikona, aynı testler
RTL'e karşı çalışan .cmtest dosyaları, döngüdeki FPGA prototipine karşı ve daha sonra karta karşı hiç değişmeden çalışır. Projenin ilk günü yazılan bir test, son gününde de onu korumaya devam eder.
Sık sorulan sorular.
Hangi HDL'ler döngüde olabilir?
SystemVerilog, Verilog ve VHDL, Lumina Sim ile serbestçe karışık. SystemC ve C++ modelleri de bağlanabilir.
RTL'i sisteme hangi veri yolları bağlar?
AXI4, AXI4-Lite, AXI-Stream, AHB, APB, Wishbone ve TileLink; ayrıca kesmeler, resetler, saatler ve GPIO. Özel arayüzler küçük bir adaptör kullanır.
RTL gerçek zamanı mı görür, emüle edilen zamanı mı?
CPU'larla paylaşılan emüle edilen zamanı. Her RTL saat kenarı bu zaman çizgisinde sabit bir noktaya karşılık gelir; bu yüzden çalıştırmalar tekrarlanabilir.
UVM ortamımı da kullanabilir miyim?
Evet. UVM ajanlarını CARME'nin sürmediği arayüzlerde tutun, geri kalanını firmware sürsün.
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
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