FPGA

  • Aufgabe des FPGA

      Das Arbeitspaket für den FPGA-Bereich lässt sich grob in folgenden 4 Punkte gliedern.

      1.  Konfiguration des ULPI
      2. Verifikation der Konfiguration
      3. Auslesen des USB-Datenverkehrs
      4. Übergabe der Daten an einen FIFO

       
      Die Konfiguration des ULPI ist über eine FSM(=Finite-State-Machine) realisiert.Diese benutzt ein vom ULPI generiertes Taktsignal um synchron zum ULPI die Register zu schreiben. Der benutzte Bus ist Bidirektional und ist daher Tri-Statet um Kurzschlüsse zu vermeiden.
      Der ULPI gibt über eine Steuerleitung bekannt in welche Richtung der Bus zu jedem Zeitpunkt getrieben wird.

      Nachdem die Konfiguration abgeschlossen ist, wird die LED8 des DE1_SOC eingeschalten. Anschließend wird jedes geschriebene Register ausgelesen und auf seinen Inhalt geprüft. Sollte die Konfiguration den Erwartungen entsprechen so wird LED9 eingeschalten und der ULPI und das Board als Betriebsbereit signalisiert.

      Nach einer erfolgreichen Konfiguration werden die Daten des USB-Verkehrs gelesen und in einem definierten Syntax abgespeichert in der FIFO. Dazu wird ein Zeitstempel abgespeichert um die chronologische Reihenfolge der Daten zu erhalten und rekonstruieren zu können. Nur so lassen sich verwertbare USB-Daten rekonstruieren.

  • Die Start-Up Routine

      Die Start-Up Routine orientiert sich am ULPI welcher an einer seiner Steuerleitungen ein High-Low-High-Low toggelt sobald er bereit ist um Daten zu empfangen.
      Nach detektieren dieser für den ULPI einzigartigen Abfolge wird begonnen seine Register zu beschreiben. Es wird ein nicht treibender passiver Modus gewählt und über seine Register konfiguriert. In diesem Modus liest der ULPI lediglich die D+ und D- Leitung des USB-Verkehrs mit.
      Weiters wird sein Abschluss-Widerstand abgeschalten, damit er auf der Leitung vom Host nicht erkennbar ist.
      Anschließend wird über den im USB-Spezifikationen festgelegte Signalfolge an den USB-Leitungen
      gelesen ob die beiden Geräte (=Host und USB-Gerät) in niedriger(=Low Speed zu 1,5 MBit/s) oder hoher(=Full Speed zu 12 MBit/s) Übertragungsrate kommunizieren.
      Der Standart von 480 MBit/s oder gar USB 3.0 mit 5GBit/s wird nicht unterstützt.

      Nach erfassen der Geschwindigkeit wird der ULPI auf diese eingestellt, falls gültig. Nun werden die Übertragenen Daten gelesen und Übertragen.

  • Auslesen der USB-Leitungen

      Es werden die Datenleitungen ausgelesen und in 8-Bit Blöcken and das FPGA weitergereicht. Intern werden 8 Referenzbit hinzugefügt zur Überprüfung der Daten. Die restlichen bis auf das höchste Bit, welches anzeigt ob es sich um ein Datenpaket oder einen Zeitstempel handelt, sind nicht benutzt.

      Ein Paket umfasst daher 32 Bit und falls nicht hintereinander übertragen steht voran ein 31 Bit Zeitstempel.

  • Übergabe der Daten in den FIFO

      Wenn die Pakete aufbereitet sind werden sie in einen FIFO gespeichert. Dieser wird über ein Gültig-Signal informiert, ob die im Moment angliegenden Daten zu speichern sind.
  ULPI
  HPS/Linux