Zeitbasis für FPGA/PPC?

OP #1767496
Lesenswert?

Hi

Ich habe mir einen einfachen Zähler in VHDL geschrieben und den in mein 
EDK Design eingebunden (Xilinx). Nun möchte ich einfach mittels C 
Programm und den Funktionen aus dem Header "time.h", die laut 
Dokumentation implementiert sein sollen, den Wert des Zählers auslesen, 
diesen mit einem Zeitstempel versehen und an einen anderen Rechner 
schicken. Das klappte soweit auch alles ganz schön, nur leider stimmt 
die Zeit nicht. Ich bekomme also immer schön den 1.1.1970 00:00:xx 
angezeigt. Wobei die Sekunden dem ersten Anschein nach auch nur bis 40 
hochgezählt werden und danach kommt es irgendwie zu einem Reset. 
Möglich, dass der "Reset" beim aufruf der time() Funktion an den Reset 
meines Zählers geknüpft ist...warum, weiß ich aber nicht. Hier mal ein 
bisschen Code:
1
    while(1)
2
    {
3
      CounterValue = MY_COUNTER_mReadSlaveReg2(MY_COUNTER,0);
4
      //printf("%u\r\n",CounterValue);
5
      if(CounterValue >= CompareValueMin && CounterValue <= CompareValueMax)
6
      {
7
        //Uhrzeit und Zählerstand an den Host Schicken
8
        now = time(0);
9
        strftime(TimeAndCounter, 22, "%d.%m.%Y - %H:%M:%S : ", localtime(&now));
10
        sprintf(TimerValueStr, " %u\n", CounterValue);
11
        strcat(TimeAndCounter, TimerValueStr);
12
        if(Output_Socket_Thread(TimeAndCounter) < 0)
13
        {
14
          printf("Error: Output_Socket_Thread()\r\n");
15
        }
16
        printf("%s\r\n",TimeAndCounter);      
17
      }
18
      if(CounterValue >= 3345)
19
      {
20
        ResetCounter();
21
        StartCounter();
22
      }
23
    }

Von diesem Reset mal abgesehen, ist halt die Frage, wie ich wirklich zur 
realen Uhrzeit komme. Nun hat der FPGA offensichtlich keine eigene 
Zeitbasis und ich vermute, der PPC Kern dadurch auch nicht. Gibt es aber 
eine Möglichkeit trotzdem die aktuelle Zeit zu bekommen? Im weiteren 
Projektverlauf wäre sowas schon recht wichtig und deswegen wäre es gut, 
wenn es eine Lösung gibt.

Vielen Dank schonmal für eure Antworten und bitte ruhig fragen Stellen, 
wenn noch was fehlt oder offen ist.
Moderator (Firma: Titel) Persönliche Seite #1767598
Lesenswert?

Üblicherweise wird beim Systemstart die Zeit aus einer Echtzeituhr 
geladen und in einen long umgerechnet. Dann läuft dieser Zähler ohne 
weiteren Zugriff auf die Echtzeituhr (RTC) hoch. Und mit deinen 
C-Funktionen greifst du nur auf diesen internen Zähler zu.
Du hast jetzt erst mal das Problem, nämlich dass deine Uhr (dieser 
interne Zähler) überhaupt nicht funktioniert. Dabei kann ich dir nicht 
helfen.

> Mh, so einen Echtzeitbaustein wird es aber
> nicht zufällig als kostenlosen Softcore geben, oder wüsstest du da was?
Das bringt nichts. Denn dann dürftest du dein System niemals 
ausschalten. RTCs sind darauf getrimmt, dass sie mit geringster 
Stromaufnahme weiterlaufen. Das kann dein FPGA garantiert nicht.
OP #1767619
Lesenswert?

Lothar Miller schrieb:
> Üblicherweise wird beim Systemstart die Zeit aus einer Echtzeituhr
> geladen und in einen long umgerechnet. Dann läuft dieser Zähler ohne
> weiteren Zugriff auf die Echtzeituhr (RTC) hoch. Und mit deinen
> C-Funktionen greifst du nur auf diesen internen Zähler zu.
> Du hast jetzt erst mal das Problem, nämlich dass deine Uhr (dieser
> interne Zähler) überhaupt nicht funktioniert. Dabei kann ich dir nicht
> helfen.

Ich habe mich mit der Echtzeit bei Computern bisher nicht beschäftigt, 
aber ähnlich läuft es ja doch auf auf einem stinknormalen Heimcomputer 
ja auch, oder irre ich? Jetzt ist eben die Frage, ob es sowas auch auf 
meinem Board (Xilinx ML410) vorhanden ist. Ich habe in einem Thread im 
Xilinx Forum was davon gelesen, dass es da einen Registersatz des PPC 
geben soll, dessen Wert mit jedem Prozessorzyklus hochgezählt wird ( 
http://forums.xilinx.com/t5/EDK-and-Platform-Studio/Time-Stamp-PPC/m-p/17345#M4723 
). Zum einen wird das aber auch nur laufen, wenn Strom an ist und zum 
anderen habe ich dazu nichts weiter gefunden.

Lothar Miller schrieb:
> Das bringt nichts. Denn dann dürftest du dein System niemals
> ausschalten. RTCs sind darauf getrimmt, dass sie mit geringster
> Stromaufnahme weiterlaufen. Das kann dein FPGA garantiert nicht.

Daran habe ich mich sowieso die ganze Zeit gestoßen und bin deswegen 
davon ausgegangen, dass es keine nachrüstbare Lösung geben wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren