Zephyrnet-Logo

GEM TSU-Beispieldesign

Datum:

Das Ziel dieses Beispieldesigns ist es, einfachen C-Code zu verwenden, um die Zeitstempeleinheit (TSU) auf GEM3 einzurichten und zu sehen, wie die TSU-Register/Zähler die Registerwerte in der seriellen Konsole inkrementieren und ausgeben. 

In diesem Beispieldesign verwenden wir Vitis™ und die bereitgestellte XSA-Datei im Vitis-Installationsverzeichnis für ein ZCU102 Evaluation Board.

Erstellen der Anwendung in Vitis

Starten Sie zunächst die Version 2020.2 von Vitis und klicken Sie auf „Anwendungsprojekt erstellen“. Wählen Sie auf der Seite „Plattform“ zcu102.xsa aus.

GEM3 ist standardmäßig auf dem ZCU102-Evaluierungsboard aktiviert und mit der RGMII MIO-Schnittstelle über RJ45 mit dem integrierten TI PHY verbunden.

image2021-7-1_15-15-50.png

Klicken Sie dann auf „Weiter“, um am Ende „Anwendung leeren“ auszuwählen.

image2021-7-1_15-23-52.png

Jetzt können wir den angehängten Code hinzufügen, indem wir mit der rechten Maustaste auf den Ordner „src“ in der Vitis-GUI klicken und dann auf „Quellen importieren“ klicken, um zu dem Verzeichnis zu navigieren, in das Sie die Datei xttcps_rtc_example.c heruntergeladen haben, und die Datei zu hinzufügen das Projekt.

Klicken Sie dann auf die Schaltfläche „Build“, um die Anwendung zu erstellen.

image2021-7-1_15-33-44.png

Codeübersicht

Hier ist eine kurze Momentaufnahme des Codes:

#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
*/

Was in diesem Code gemacht wurde, ist ganz einfach. Nachdem das GEM_TSU_REF_CTRL-Register korrekt eingerichtet ist, sollten wir die Timer-Register sec und nsec mit der aktuellen Zeit oder Systemzeit sowie dem Delta initialisieren, damit der Timer mit dem Zählen beginnen kann.

Es ist wie jeder andere Timer. Bitte beachten Sie, dass dies vom Linux-Treiber vollständig unterstützt wird. Hier demonstrieren wir es einfach in einer Bare-Metal-Umgebung. 

Sobald der Timer abgelaufen ist, kann der PTP-Zeitstempel für alle Pakete/alle PTP-Pakete/PTP-Ereignispakete (normalerweise das Protokoll) eingefügt werden. Der Zeitstempel wird in die BDs eingefügt und dann auch im PTP-Register erfasst, wenn ein PTP-Ereignispaket ankommt.

Läuft auf einem ZCU102-Board

Klicken Sie mit der rechten Maustaste auf die Anwendung, klicken Sie auf „Ausführen als“ und dann auf „Konfigurationen ausführen…“.

image2021-7-1_15-43-26.png

Sie sollten die folgende Ausgabe in der seriellen Konsole beobachten. 

image2021-7-1_15-50-9.png

TSU-Unterstützung auf MPSoC

Bevor Sie TSU/PTP mit GEM verwenden, lesen Sie bitte (Xilinx Antwort 67239) für das grundlegende Hardware-Setup. 

Hier ist eine Konfigurationstabelle, auf die sich ZynqMP-Benutzer beziehen können. 

TSU-Taktquelle Geprüft Vivado-Konfiguration Konfiguration registrieren Signalanschlüsse
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-Signalverbindung (Wenn die Option „TSU BUFG and Clock From PL“ in der GUI aktiviert ist) emio_enetx_tsu_timer_cmp_val
PLL Ja Standard – keine Auswahl. Kann die TSU-Frequenz ändern. Der Standardwert ist 250MHz-Quell-IOPLL. bit[22] = 0 oder 1 (prüfen ob fmio-Signal zurückgeschleift wird) bit[2:0] = 000 oder 010 NA Sollte nicht ausgesetzt werden Sollte nicht ausgesetzt werden 0b11 Benutzerabhängig:
fmio_gem_tsu_clk_to_pl_bufg und fmio_gem_tsu_clk_from_pl können zurückgeschleift oder offen gelassen werden
TSU-Timervergleich gültiges Signal. Verbindung des Benutzers. 
bit[21:20] = 0b00 Stellen Sie die Teiler entsprechend der Uhrenauswahl ein
PLL mit 1PPS-Signal ausgesetzt (bei Verwendung von GEM0)  Ja Standard – keine Auswahl. Kann die TSU-Frequenz ändern. Der Standardwert ist 250MHz-Quell-IOPLL. bit[22] = 0 oder 1 (prüfen ob fmio-Signal zurückgeschleift wird) bit[2:0] = 000 oder 010 NA Sollte nicht ausgesetzt werden Sollte nicht ausgesetzt werden 0b11 Benutzerabhängig, normalerweise werden fmio_gem_tsu_clk_to_pl_bufg und fmio_gem_tsu_clk_from_pl zurückgeschleift

TSU-Timervergleich gültiges Signal. Verbindung des Benutzers.

bit[21:20] = 0b00 Stellen Sie die Teiler entsprechend der Uhrenauswahl ein Verwenden Sie tsu_timer_cnt[93:0] → Inverse von Bit 45 ist das 1PPS-Signal
MIO 50 oder 51 NEIN, keine HW zum Testen I/O-Konfiguration → Externer TSU-Takt → MIO → 50/51 bit[22] = 0 oder 1 (prüfen ob fmio-Signal zurückgeschleift wird) Bit[24]=0 MIO_PIN_50/51 Bit[1] = 1 gemäß Benutzerauswahl Ausgewählte MIO an Bord sollten an Bord verfügbar sein und können mit einer externen Quelle verbunden werden Sollte nicht ausgesetzt werden 0b11 Benutzerabhängig:
fmio_gem_tsu_clk_to_pl_bufg und fmio_gem_tsu_clk_from_pl können zurückgeschleift oder offen gelassen werden
TSU-Timervergleich gültiges Signal. Verbindung des Benutzers.
Uhrenkonfiguration → GEM_TSU_CLK → Wert eingeben bit[21:20] = 0b11
EMI Ja I/O-Konfiguration → Externer TSU-Takt → EMIO Bit[22] = 1 Bit[24]=0 MIO_PIN_50/51 sollte NICHT für die GEM TSU-Uhr konfiguriert werden. Auf diese Weise wird die Uhr automatisch von EMIO ausgewählt. Sollte nicht ausgesetzt werden Sollte in der DRC freigelegt und auf Verbindung geprüft werden 0b11 oder basierend auf verwendeter Auswahl fmio_gem_tsu_clk_to_pl_bufg und fmio_gem_tsu_clk_from_pl sollten zurückgeschleift werden TSU-Timervergleich gültiges Signal. Verbindung des Benutzers.
Uhrenkonfiguration → GEM_TSU_CLK → Wert eingeben bit[21:20] = 0b11
  • Wenn GEM_CLK_CTRL als MIO[50] oder MIO[51] ausgewählt ist und das entsprechende Pin-Register nicht als GEM_TSU_CLK-Quelle konfiguriert ist, wird die Auswahl automatisch gemäß dem ZynqMP-Design auf EMIO gesetzt.
    Dies sollte in der Vivado-GUI und im PCW gehandhabt werden. Beachten Sie, dass die obige Logik derzeit nicht für MIO[26] gilt. In den Tests wurde kein Arbeitspfad beobachtet, als GEM_CLK_CTRL MIO verwendet[26].
  • Für Versal sind MIO[24] und MIO[25] von PMC und MIO[50] und MIO[51] von LPD als MIO-TSU-Quellen verfügbar.
    In diesem Fall besteht die PL/EMIO-Option einfach darin, das GEM_CLK_CTRL-Bit[21:20] auf 01 oder 11 zu setzen und die MIO-Register sollten nicht konfiguriert werden. 

PlatonAi. Web3 neu erfunden. Datenintelligenz verstärkt.
Klicken Sie hier, um darauf zuzugreifen.

Quelle: https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/GEM-TSU-Example-Design/ba-p/1259619

spot_img

Neueste Intelligenz

spot_img

Chat mit uns

Hallo! Wie kann ich dir helfen?