Zephyrnet-logo

GEM TSU Voorbeeldontwerp

Datum:

Het doel van dit voorbeeldontwerp is om eenvoudige C-code te gebruiken om de Time-stamp Unit (TSU) op GEM3 in te stellen en de TSU-registers / tellers te zien toenemen en de registerwaarden in de seriële console af te drukken. 

In dit voorbeeldontwerp gebruiken we Vitis™ en het meegeleverde XSA-bestand in de Vitis-installatiemap gericht op een ZCU102 Evaluation-bord.

De applicatie maken in Vitis

Start eerst de 2020.2-versie van Vitis en klik op "Applicatieproject maken". Selecteer op de pagina "Platform" zcu102.xsa.

Standaard is GEM3 ingeschakeld op het ZCU102 Evaluation-bord en is het verbonden met de TI PHY aan boord met een RGMII MIO-interface die via RJ45 gaat.

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

Klik vervolgens op "Volgende" om aan het einde "Lege toepassing" te kiezen.

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

Nu kunnen we de bijgevoegde code toevoegen door met de rechtermuisknop op de map "src" in de Vitis GUI te klikken en vervolgens op "Bronnen importeren" te klikken om naar de map te gaan waarnaar u het bestand xttcps_rtc_example.c hebt gedownload en het bestand toe te voegen aan het project.

Klik vervolgens op de knop “bouwen” om de applicatie te bouwen.

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

Code overzicht

Hier is een snelle momentopname van de code:

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

Wat er in deze code is gedaan, is vrij eenvoudig. Nadat het GEM_TSU_REF_CTRL register correct is ingesteld, moeten we de timer sec en nsec registers initialiseren met de huidige tijd of systeemtijd, en ook de delta zodat de timer kan beginnen met tellen.

Het is net als elke andere timer. Let op, dit wordt volledig ondersteund in de Linux-driver. Hier demonstreren we het gewoon in een bare-metal omgeving. 

Zodra de timer is afgelopen, kan een PTP-tijdstempel worden ingevoegd voor alle pakketten/alle PTP-pakketten/PTP-gebeurtenispakketten (meestal het protocol). De tijdstempel wordt in de BD's ingevoegd en vervolgens ook vastgelegd in het PTP-register wanneer een PTP-gebeurtenispakket arriveert.

Draait op een ZCU102-bord

Klik met de rechtermuisknop op de toepassing, klik op "Uitvoeren als" en vervolgens op "Configuraties uitvoeren...".

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

U dient de volgende uitvoer in de seriële console in acht te nemen. 

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

TSU-ondersteuning op MPSoC

Voordat u TSU/PTP met GEM gaat gebruiken, raadpleegt u: (Xilinx Antwoord 67239) voor de basishardwareconfiguratie. 

Hier is een configuratietabel waarnaar ZynqMP-gebruikers kunnen verwijzen. 

TSU-klokbron Geteste Vivado-configuratie Configuratie registreren Signaalaansluitingen
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-signaalverbinding (wanneer de optie "TSU BUFG en klok van PL" is ingeschakeld in GUI) emio_enetx_tsu_timer_cmp_val
PLL Ja Standaard - geen selectie. Kan de TSU-frequentie wijzigen. Standaard is 250MHz bron IOPLL. bit[22] = 0 of 1 (kijk of het fmio-signaal wordt teruggelust) bit[2:0] = 000 of 010 NA Mag niet worden blootgesteld Mag niet worden blootgesteld 0b11 Gebruiker afhankelijk:
fmio_gem_tsu_clk_to_pl_bufg en fmio_gem_tsu_clk_from_pl kunnen worden teruggelust of opengelaten
TSU timer vergelijking geldig signaal. De verbinding van de gebruiker. 
bit[21:20] = 0b00 Delers instellen volgens klokselectie
PLL met 1PPS-signaal zichtbaar (bij gebruik van GEM0)  Ja Standaard - geen selectie. Kan de TSU-frequentie wijzigen. Standaard is 250MHz bron IOPLL. bit[22] = 0 of 1 (kijk of het fmio-signaal wordt teruggelust) bit[2:0] = 000 of 010 NA Mag niet worden blootgesteld Mag niet worden blootgesteld 0b11 Gebruikersafhankelijk, meestal worden fmio_gem_tsu_clk_to_pl_bufg en fmio_gem_tsu_clk_from_pl teruggelust

TSU timer vergelijking geldig signaal. De verbinding van de gebruiker.

bit[21:20] = 0b00 Delers instellen volgens klokselectie Gebruik tsu_timer_cnt[93:0] → Inverse van bit 45 is het 1PPS-signaal
MIO 50 of 51 NEE, geen HW om te testen I/O-configuratie → Externe TSU-klok → MIO → 50/51 bit[22] = 0 of 1 (kijk of het fmio-signaal wordt teruggelust) beetje[24]=0 MIO_PIN_50/51 bit [1] = 1 volgens gebruikersselectie Geselecteerde MIO aan boord moet aan boord beschikbaar zijn en kan worden aangesloten op een externe bron Mag niet worden blootgesteld 0b11 Gebruiker afhankelijk:
fmio_gem_tsu_clk_to_pl_bufg en fmio_gem_tsu_clk_from_pl kunnen worden teruggelust of opengelaten
TSU timer vergelijking geldig signaal. De verbinding van de gebruiker.
Klokconfiguratie → GEM_TSU_CLK → Waarde invoeren bit[21:20] = 0b11
EMIO Ja I/O-configuratie → Externe TSU-klok → EMIO beetje[22] = 1 beetje[24]=0 MIO_PIN_50/51 mag NIET worden geconfigureerd voor GEM TSU-klok. Op deze manier wordt de klok automatisch uit EMIO gehaald. Mag niet worden blootgesteld Moet worden blootgesteld en gecontroleerd op verbinding in DRC 0b11 of op basis van gebruikte selectie fmio_gem_tsu_clk_to_pl_bufg en fmio_gem_tsu_clk_from_pl moeten teruggelust worden TSU timer vergelijking geldig signaal. De verbinding van de gebruiker.
Klokconfiguratie → GEM_TSU_CLK → Waarde invoeren bit[21:20] = 0b11
  • Als GEM_CLK_CTRL is geselecteerd als MIO[50] of MIO[51] en het bijbehorende pinregister niet is geconfigureerd als de GEM_TSU_CLK-bron, wordt de selectie automatisch standaard ingesteld op EMIO volgens het ZynqMP-ontwerp.
    Dit moet worden afgehandeld in de Vivado GUI en PCW. Merk op dat de bovenstaande logica momenteel niet van toepassing is op MIO[26]. Er werd geen werkpad waargenomen in de tests toen GEM_CLK_CTRL MIO[26] gebruikte.
  • Voor Versal zijn MIO[24] en MIO[25] van PMC en MIO[50] en MIO[51] van LPD beschikbaar als MIO TSU-bronnen.
    In dit geval is de PL/EMIO-optie gewoon om GEM_CLK_CTRL bit [21:20] in te stellen op 01 of 11 en de MIO-registers mogen niet worden geconfigureerd. 

PlatoAi. Web3 opnieuw uitgevonden. Gegevensintelligentie versterkt.
Klik hier om toegang te krijgen.

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

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?