Bu örnek tasarımın amacı, GEM3'te Zaman Damgası Birimi'ni (TSU) ayarlamak için basit C kodu kullanmak ve TSU kayıtlarının/sayaçlarının seri konsoldaki kayıt değerlerini artırdığını ve yazdırdığını görmektir.
Bu örnek tasarımda, Vitis™ kurulum dizininde ZCU102 Değerlendirme kartını hedefleyen Vitis™ ve sağlanan XSA dosyasını kullanacağız.
Vitis'te Uygulama Oluşturma
Öncelikle Vitis’in 2020.2 sürümünü başlatın ve “Uygulama Projesi Oluştur”a tıklayın. “Platform” sayfasında zcu102.xsa'yı seçin.
Varsayılan olarak GEM3, ZCU102 Değerlendirme panosunda etkindir ve RJ45 üzerinden geçen RGMII MIO arayüzü ile yerleşik TI PHY'ye bağlanır.
Daha sonra sondaki “Boş Uygulama”yı seçmek için “İleri”ye tıklayın.
Artık Vitis GUI'deki “src” klasörüne sağ tıklayıp ardından “Kaynakları içe aktar” seçeneğine tıklayarak xttcps_rtc_example.c dosyasını indirdiğiniz dizine giderek dosyayı ekleyebiliriz. proje.
Daha sonra uygulamayı oluşturmak için “oluştur” düğmesine tıklayın.
Koda Genel Bakış
İşte kodun hızlı bir anlık görüntüsü:
#define TSU_TIMER_INCR_GEM3 *((unsigned long *)0xff0e01dc)
#define TSU_TIMER_INCR_SUB_NS_GEM3 *((unsigned long *)0xff0e01bc)
#define TSU_TIMER_SEC_GEM3 *((unsigned long *)0xff0e01d0)
#define TSU_TIMER_NS_GEM3 *((unsigned long *)0xff0e01d4)
#define GEM_TSU_REF_CTRL *((unsigned long *)0xff5e0100) /*
* Set up the Ticker timer
*/
Status = SetupTicker();
if (Status != XST_SUCCESS) {
return Status;
} GEM_TSU_REF_CTRL = 0x00010600;
GEM_TSU_REF_CTRL |= 0x01000000;
printf("%8.8lxnn", GEM_TSU_REF_CTRL); TSU_TIMER_INCR_GEM3 = 0x4;
TSU_TIMER_INCR_SUB_NS_GEM3 = 0; Status = WaitForDutyCycleFull();
if (Status != XST_SUCCESS) {
return Status;
} printf("%8.8xn", TSU_TIMER_SEC_GEM3);
printf("%8.8xnn", TSU_TIMER_NS_GEM3); GEM_TSU_REF_CTRL &= 0x0feffffff;
/*
* Stop the counters
*/
Bu kodda yapılanlar oldukça basittir. GEM_TSU_REF_CTRL kaydı doğru bir şekilde ayarlandıktan sonra, zamanlayıcının saymaya başlayabilmesi için zamanlayıcı sn ve nsec kayıtlarını geçerli saat veya sistem saati ve ayrıca delta ile başlatmamız gerekir.
Tıpkı diğer zamanlayıcılar gibidir. Lütfen bunun Linux sürücüsünde tamamen desteklendiğini unutmayın. Burada bunu yalnızca çıplak metal ortamda gösteriyoruz.
Zamanlayıcı dolduğunda, tüm paketler/tüm PTP paketleri/PTP olay paketleri (genellikle protokol) için PTP zaman damgası eklenebilir. Zaman damgası BD'lere eklenir ve ardından bir PTP olay paketi geldiğinde PTP kaydında da yakalanır.
ZCU102 kartında çalışıyor
Uygulamaya sağ tıklayın, “Farklı Çalıştır”a ve ardından “Yapılandırmaları Çalıştır…”a tıklayın.
Seri konsolda aşağıdaki çıktıyı gözlemlemelisiniz.
MPSoC'da TSU Desteği
TSU/PTP'yi GEM ile kullanmaya başlamadan önce lütfen bkz. (Xilinx Cevap 67239) temel donanım kurulumu için.
Burada ZynqMP kullanıcılarının başvurabileceği bir yapılandırma tablosu bulunmaktadır.
TSU Saat Kaynağı | Denenmiş | Vivado Yapılandırması | Yapılandırmayı kaydedin | Sinyal Bağlantıları | ||||||
GEM_CLK_CTRL (0xFF180308) | GEM_TSU_REF_CTRL (0xFF5E0100) | MIO_PIN_XX | MIO 50/51 | emio_enet0_tsu_clk | emio_enet0_tsu_inc_ctrl[1:0] | fmio sinyal bağlantısı (GUI'de “TSU BUFG ve PL'den Saat” seçeneği etkinleştirildiğinde) | emio_enetx_tsu_timer_cmp_val | |||
PLL | Evet | Varsayılan – seçim yok. TSU frekansını değiştirebilir. Varsayılan 250MHz kaynak IOPLL'dir. | bit[22] = 0 veya 1 (fmio sinyalinin geri döngüye alınıp alınmadığına bakın) | bit[2:0] = 000 veya 010 | NA | Maruz bırakılmamalı | Maruz bırakılmamalı | 0b11 | Kullanıcıya bağlı: fmio_gem_tsu_clk_to_pl_bufg ve fmio_gem_tsu_clk_from_pl geri döngüye alınabilir veya açık bırakılabilir |
TSU zamanlayıcı karşılaştırması geçerli sinyal. Kullanıcının bağlantısı. |
bit[21:20] = 0b00 | Bölenleri saat seçimine göre ayarlayın | |||||||||
1PPS sinyali açıkta olan PLL (GEM0 kullanırken) | Evet | Varsayılan – seçim yok. TSU frekansını değiştirebilir. Varsayılan 250MHz kaynak IOPLL'dir. | bit[22] = 0 veya 1 (fmio sinyalinin geri döngüye alınıp alınmadığına bakın) | bit[2:0] = 000 veya 010 | NA | Maruz bırakılmamalı | Maruz bırakılmamalı | 0b11 | Kullanıcıya bağlıdır, genellikle fmio_gem_tsu_clk_to_pl_bufg ve fmio_gem_tsu_clk_from_pl geri döngüye alınır |
TSU zamanlayıcı karşılaştırması geçerli sinyal. Kullanıcının bağlantısı. |
bit[21:20] = 0b00 | Bölenleri saat seçimine göre ayarlayın | tsu_timer_cnt[93:0] kullanın → Bit 45'in tersi 1PPS sinyalidir | ||||||||
MIO 50 veya 51 | HAYIR, test edilecek donanım yok | G/Ç yapılandırması → Harici TSU Saati→ MIO → 50/51 | bit[22] = 0 veya 1 (fmio sinyalinin geri döngüye alınıp alınmadığına bakın) | bit[24]=0 | MIO_PIN_50/51 bit[1] = 1 kullanıcı seçimine göre | Seçilen MIO kartta mevcut olmalı ve harici kaynağa bağlanabilmelidir | Maruz bırakılmamalı | 0b11 | Kullanıcıya bağlı: fmio_gem_tsu_clk_to_pl_bufg ve fmio_gem_tsu_clk_from_pl geri döngüye alınabilir veya açık bırakılabilir |
TSU zamanlayıcı karşılaştırması geçerli sinyal. Kullanıcının bağlantısı. |
Saat konfigürasyonu → GEM_TSU_CLK → Değeri girin | bit[21:20] = 0b11 | |||||||||
EMIO | Evet | G/Ç yapılandırması → Harici TSU Saati → EMIO | bit[22] = 1 | bit[24]=0 | MIO_PIN_50/51, GEM TSU saati için YAPILANDIRILMAMALIDIR. Bu şekilde saat otomatik olarak EMIO'dan seçilir. | Maruz bırakılmamalı | DRC'de açığa çıkarılmalı ve bağlantı açısından kontrol edilmelidir | 0b11 veya kullanılan seçime göre | fmio_gem_tsu_clk_to_pl_bufg ve fmio_gem_tsu_clk_from_pl geri döngüye alınmalıdır | TSU zamanlayıcı karşılaştırması geçerli sinyal. Kullanıcının bağlantısı. |
Saat konfigürasyonu → GEM_TSU_CLK → Değeri girin | bit[21:20] = 0b11 |
- GEM_CLK_CTRL, MIO[50] veya MIO[51] olarak seçilirse ve karşılık gelen pin kaydı GEM_TSU_CLK kaynağı olarak yapılandırılmazsa, seçim ZynqMP tasarımına göre otomatik olarak varsayılan olarak EMIO'ya ayarlanacaktır.
Bu, Vivado GUI ve PCW'de ele alınmalıdır. Şu anda yukarıdaki mantığın MIO[26] için geçerli olmadığını unutmayın. GEM_CLK_CTRL'nin MIO[26] kullandığı testlerde herhangi bir çalışma yolu gözlemlenmedi. - Versal için, PMC'nin MIO[24] ve MIO[25]'i ve LPD'nin MIO[50] ve MIO[51]'i MIO TSU kaynakları olarak mevcuttur.
Bu durumda, PL/EMIO seçeneği yalnızca GEM_CLK_CTRL bit[21:20]'i 01 veya 11 olarak ayarlamak olacaktır ve MIO kayıtları yapılandırılmamalıdır.
Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.