www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Zeitbasis für FPGA/PPC?


Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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:
    while(1)
    {
      CounterValue = MY_COUNTER_mReadSlaveReg2(MY_COUNTER,0);
      //printf("%u\r\n",CounterValue);
      if(CounterValue >= CompareValueMin && CounterValue <= CompareValueMax)
      {
        //Uhrzeit und Zählerstand an den Host Schicken
        now = time(0);
        strftime(TimeAndCounter, 22, "%d.%m.%Y - %H:%M:%S : ", localtime(&now));
        sprintf(TimerValueStr, " %u\n", CounterValue);
        strcat(TimeAndCounter, TimerValueStr);
        if(Output_Socket_Thread(TimeAndCounter) < 0)
        {
          printf("Error: Output_Socket_Thread()\r\n");
        }
        printf("%s\r\n",TimeAndCounter);      
      }
      if(CounterValue >= 3345)
      {
        ResetCounter();
        StartCounter();
      }
    }

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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es aber eine Möglichkeit trotzdem die aktuelle Zeit zu bekommen?
Es gibt Echtzeituhrenbausteine. Die mußt du dann auslesen und den Wert 
in deinen internen Timer eintragen. Der sollte dann aber schon vorher 
funktionieren...

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort. Mh, so einen Echtzeitbaustein wird es aber 
nicht zufällig als kostenlosen Softcore geben, oder wüsstest du da was?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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-Studi... 
). 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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habe nochmal genau nachgeschaut und dabei entdeckt, dass auf dem 
ML410 ein "Real Time Clock Module" verbaut ist. Nun steht nur noch die 
Frage im Raum, wie ich dieses Modul auslesen kann.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die RTC klemmt am SMBus, also I2C. Du musst also entweder direkt über 
das XPS I2C Modul gehen oder laut Plan auf Seite 71 oder so des User 
Guides geht es auch über einen PCI-SMBUS Baustein da drin...Variante 1 
ist sicher für so Standalone Designs, Variante 2 eher für Linux und so.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.