Vivado Simülatörü, belirli bir zaman veya zaman diliminde bir sinyali, kabloyu veya kaydı belirli bir değere zorlamak için etkileşimli bir mekanizma sağlar. Ayrıca nesneler üzerindeki değerleri belirli bir süre boyunca değişmeye zorlayabilirsiniz. Bu blog, temel arayüzlerde belirli veri modellerini zorlayarak Vivado Simulator kullanarak simülasyonda test senaryoları oluşturma tekniklerini açıklar.
PCI Express IP için Versal™ ACAP Integrated Block ile bir sistem tasarlarken, tasarımcılar, belirli bir gelen paket veya yanlış sinyal geçişi nedeniyle sistemin durduğu sorunlarla karşılaşabilir. Donanımda bu tür sorunları ayıklamak zor ve zaman alıcı olabilir, çünkü bu, ChipScope gibi araçlar kullanarak hata ayıklamayı gerektirebilir.
Hata ayıklamanın en kolay yolu, mümkünse belirli bir testbench yazarak sorunu simülasyonda yeniden oluşturmaya çalışmaktır. Bu yaklaşımla ilgili sorun, kullanıcının kapsamlı bir testbench kodu yazmak için önemli miktarda zaman harcaması gerekmesidir. Vivado Simulator'ın 'kuvvet' komut özelliği, belirli bir zamanda paketleri enjekte ederek ve sinyalleri değiştirerek sorunları yeniden oluşturmak için kullanılabilir.
PCI Express IP için Versal ACAP Entegre Bloğu, 'Kaynaklar' Penceresinde somutlaştırılmış IP üzerindeki 'Örnek Tasarımı Aç' seçeneğine sağ tıklanarak açılabilen örnek bir tasarımla birlikte gelir. Örnek tasarımı simüle etmek için kullanılan varsayılan simülatör, aşağıda 'ayarlar' bölümünde gösterildiği gibi Vivado Simülatörüdür.
Vivado'da PCI Express IP için Versal ACAP Integrated Block için oluşturulabilecek iki tür örnek tasarım vardır – BMD ve PIO. Varsayılan örnek tasarım, iki modu olan PIO'dur – Adres Hizalama Modu ve Dword Hizalama Modu. (Bkz. PG343)
- Adres Hizalama Modu için, PIO tasarımı, PCIe için Uç Noktanın arkasında ACAP blok RAM'de 8192 baytlık bir hedef alan uygular. Bu 32 bitlik hedef alana, tek Dword G/Ç Okuma, G/Ç Yazma, Bellek Okuma 64, Bellek Yazma 64, Bellek Okuma 32 ve Bellek Yazma 32 TLP aracılığıyla erişilebilir. PIO tasarımı, kendisine çekirdek tarafından sunulan geçerli bir Bellek Okuma 32 TLP, Bellek Okuma 64 TLP veya G/Ç Okuma TLP isteğine yanıt olarak bir Dword yüküyle bir tamamlama oluşturur. Ayrıca, PIO tasarımı, bir G/Ç Yazma TLP isteği için başarılı bir durumla veri içermeyen bir tamamlama döndürür.
- Dword Align Modu için, PIO tasarımı, ACAP blok RAM'inde 2048 baytlık bir hedef alan uygular. Bu hedef alan ve veri genişliği, AXI4-Stream arayüzüne göre değişir ve AXI4-Stream arayüzünün genişliğine eşittir. Bu hedef alana Memory Write 32 ve Memory Read 32 TLP'ler aracılığıyla erişilebilir. PIO, çekirdekten gelen geçerli bir Bellek Okuma 32 TLP isteğine yanıt olarak yük boyutuyla bir tamamlama oluşturur.
Aşağıdaki ekran görüntüsü, Dword Align Modu için oluşturulan PIO Örnek Tasarımından simülasyon dalga biçimi yakalamasını gösterir.
RP'nin RQ arayüzünde ilk paket MWr ve ikinci paket MRd'dir. Bu paketler, aşağıda gösterildiği gibi Uç Noktanın CQ arayüzünde görünür.
Aşağıdaki ekran görüntüsü, Kök Bağlantı Noktası (RP) RQ arabiriminde bir MWr paketinin Yakınlaştırılmış bir yakalamasını gösterir:
Aşağıdaki ekran görüntüsü, RP RQ arabiriminde bir MRd paketinin Yakınlaştırılmış bir şekilde yakalanmasını gösterir:
Aşağıdaki ekran görüntüsü, RP RQ arabiriminde bir MRd paketinin Yakınlaştırılmış bir şekilde yakalanmasını gösterir:
Benzer şekilde, Endpoint CQ arabirimindeki MWr ve MRd paketlerinin yakınlaştırılmış görünümleri aşağıda gösterilmiştir.
Bellek Yazma (MWr):
m_axis_cq_tuser:
Bellek Okuma (MRd):
m_axis_cq_tuser:
Vivado Simulator'ın 'force' komutu, Hafıza Okuma paketinden sonra ikinci Hafıza Yazma paketini göndermek için kullanılabilir.
Bu, bir Tcl dosyasına aşağıdaki komutu ekleyerek yapılabilir:
add_force {/board/RP/s_axis_rq_tlast} {1 355.260us} {0 355.264us}
add_force {/board/RP/s_axis_rq_tdata} -radix hex {00000000000000000000000000000000000000000000000000000000000000000f0e0d0c0b0a090805060708010203040101a00900af08010000000000000010 355.260us} {0 355.264us}
add_force {/board/RP/s_axis_rq_tuser} -radix hex {00000000000000000000000000015540000000f410000f 355.260us} {0 355.264us}
add_force {/board/RP/s_axis_rq_tkeep} -radix hex {001f 355.260us} {0 355.264us}
add_force {/board/RP/s_axis_rq_tvalid} {1 355.260us} {0 355.264us}
Tcl dosyasının konumu, xsim.simulate.tcl.post* Aşağıda gösterildiği gibi Simulation Settings GUI'deki alan:
Aşağıdaki ekran görüntüsü, eklenen kuvvet komutlarının bir sonucu olarak 355.260 ns'de ikinci MWr paketini göstermektedir.
Aşağıda, RP RQ arabiriminde zorlama komutu tarafından oluşturulan MWr paketinin Yakınlaştırılmış görünümü verilmiştir:
EP CQ arabirimindeki aynı paket aşağıda gösterilmiştir:
Yukarıdakiler, simülasyonda özel tasarım donanım sorununu yeniden üreterek, PCI Express sorunları için Versal ACAP Integrated Block'ta hata ayıklamak için Vivado Simulator 'force' komutunun yeteneğinin yalnızca bir örneğidir. 'Zorla' komutlarını kullanarak hata ayıklamak için kullanılabilecek diğer senaryolardan bazıları şunlardır:
- Uç Noktadan okumak ve yazmak için birden çok MWr paketi oluşturun.
- Uç Noktadan Kök Bağlantı Noktasına yukarı akışta paketler oluşturun.
- IP'ye hatalı paket enjekte edin ve donanım davranışını taklit etmek için IP davranışını gözlemleyin
- Test amacıyla 'tready' ve 'tvalid' gibi sinyallerin onaylanmasını veya onaylanmasını zorlayın
Notlar:
- Yukarıda PCI Express IP için Versal ACAP Integrated Block'a atıfta bulunulmasına rağmen, benzer teknikler diğer IP çekirdeklerine ve özel tasarımlara uygulanabilir.
- ModelSim'de 'force' komut kullanımı hakkında bilgi edinmek için bkz. (Xilinx Cevap 53776)
Vivado Simulator 'kuvvet' komutları hakkında daha fazla bilgi için bkz. (UG900).
Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.