projekte:das:dvbs
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
projekte:das:dvbs [2015/01/30 23:03] – Bitratenberechnung thasti | projekte:das:dvbs [2015/02/02 10:36] (aktuell) – [Netzwerkprotokoll] thasti | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== FPGA DVB-S Encoder ====== | ====== FPGA DVB-S Encoder ====== | ||
Die Idee ist, einen DVB-S-Encoder in VHDL zu realisieren. | Die Idee ist, einen DVB-S-Encoder in VHDL zu realisieren. | ||
+ | |||
+ | ===== Links / Referenzen ===== | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | ==== Schnittstellen ==== | ||
+ | * Schnittstelle zum PC: Ethernet (UDP) | ||
+ | * Schnittstelle zum I/ | ||
+ | |||
+ | ==== Komponenten ==== | ||
+ | Die geplante Komponentenstruktur wurde in KiCAD erstellt, was bei der Planung ungemein hilft: | ||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | Designfragen: | ||
+ | * Können die FrameSync-Eingänge einfach durch den Reset ersetzt werden / sind sie notwendig? | ||
+ | |||
+ | Bis nach dem Interleaver ist die Struktur byteweise, danach arbeitet sie bit-seriell. Die Pipeline muss vor dem RS-Encoder aller 188 Byte angehalten werden können, damit der RS-Encoder seine sechs Paritätsbytes einschieben kann. Die Spezifikation jedes Einzelmoduls ist im Git-Repository zu finden. | ||
==== Berechnung Bitrate des MPEG2-TS ==== | ==== Berechnung Bitrate des MPEG2-TS ==== | ||
Zeile 17: | Zeile 36: | ||
* 6 Mbit/s * 0,921 = 5,529 Mbit/ | * 6 Mbit/s * 0,921 = 5,529 Mbit/ | ||
* Also Gesamtechnung: | * Also Gesamtechnung: | ||
- | ===== Software ===== | ||
- | |||
- | * [[http:// | ||
- | * [[https:// | ||
- | * [[http:// | ||
- | ==== Schnittstellen ==== | ||
- | * Schnittstelle zum PC: Ethernet (UDP) | ||
- | * Schnittstelle zum I/ | ||
- | |||
- | ==== Komponenten ==== | ||
- | Ethernet - FIFO - Scrambler - RS-Encoder - Interleaver - P/ | ||
- | |||
- | Bis nach dem Interleaver ist die Struktur byteweise aufgebaut, danach arbeitet sie bit-seriell. Die Pipeline muss vor dem RS-Encoder aller 188 Byte angehalten werden können, damit der RS-Encoder seine sechs Paritätsbytes einschieben kann. | ||
- | |||
- | === Controller === | ||
- | Aufgabe: | ||
- | * Datenstrom überwachen (Frame-Syncronität) | ||
- | * Steuersignal für die einzelnen Komponenten erzeugen | ||
- | * Sync-Signal für Framestart an Scrambler | ||
- | * Data Valid für Scrambler | ||
- | * Reset für den Interleaver | ||
- | * Reset für den RS-Encoder | ||
- | * Reset für den Convoluational Coder | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Datenstrom aus FIFO (Byte) | ||
- | * Ausgang: FIFO read enable (Bit) | ||
- | * TBC... | ||
- | |||
- | === Netzwerk-RX === | ||
- | Aufgabe: | ||
- | * Empfang von UDP-Paketen (Sanity-Check) | ||
- | * Weiterreichen der Nutzdaten an FIFO | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Netzwerk-Pins (Bits) | ||
- | * Ausgang: Datenstrom (Byte) | ||
- | * Ausgang: Daten valid (Bit) | ||
- | |||
- | === Netzwerk-TX === | ||
- | Aufgabe: | ||
- | * Auswerten der FIFO-Signale und Erzeugung von UDP-Nachichten zur Datenflusskontrolle | ||
- | * Wenn FIFO fast leer: "Mach schneller" | ||
- | * Wenn FIFO fast voll: "Mach langsamer" | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: FIFO fast voll (Bit) | ||
- | * Eingang: FIFO fast leer (Bit) | ||
- | |||
- | === FIFO === | ||
- | Aufgabe: | ||
- | * MPEG-Datenstrom von Ethernet entgegennehmen und an Encoder weitergeben | ||
- | * Signalisierung der noch vorhandenen Daten (zu viel / zu wenig) | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Daten von Ethernet (Byte) | ||
- | * Eingang: Schreiben aktiv (Bit) | ||
- | * Eingang: Lesen aktiv (Bit) | ||
- | * Ausgang: Daten an Encoder (Byte) | ||
- | * Ausgang: Fast voll (Bit) | ||
- | * Ausgang: Fast leer (Bit) | ||
- | |||
- | === Scrambler === | ||
- | Aufgabe: | ||
- | * Entsprechend der Position im Frame Scrambling anwenden | ||
- | * MUX Adaptation (7 von 8 Sync Words invertieren) | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Reset-Sync-Logik (Byte) | ||
- | * Eingang: valide Daten vorhanden (Clock Enable) (Byte) | ||
- | * Eingang: Datenstrom von FIFO (Byte) | ||
- | * Ausgang: Angepasster Datenstrom (Byte) | ||
- | |||
- | === RS-Encoder === | ||
- | Aufgabe: | ||
- | * Verkürzten RS-Code auf jeweils einen MPEG-Frame anwenden | ||
- | * Paritätsbytes einfügen | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Daten ohne RS (Byte) | ||
- | * Ausgang: Daten mit RS (Byte) | ||
- | |||
- | === Interleaver === | ||
- | Aufgabe: | ||
- | * Vertauschen der Byte-Reihenfolge | ||
- | |||
- | Schnittstelle: | ||
- | * Eingang: Daten (Byte) | ||
- | * Ausgang: Daten (Byte) | ||
- | |||
- | === P/ | ||
- | Aufgabe: | ||
- | * Byteweisen Datenstrom in Bitweisen Datenstrom wandeln | ||
- | Schnittstelle: | + | Bei Weglassen des Puncturing |
- | * Eingang: Daten (Byte) | + | |
- | * Ausgang: Daten (Bit, MSB first) | + | |
- | === Convolutional Coder === | + | ^ Clock-Divider ^ Brutto-Datenrate ^ Netto-(TS)-Datenrate ^ |
- | Aufgabe: | + | | 1 | 50 MSym/s | 46,08 MBit/s | |
- | * Faltungskode auf serielle Daten anwenden | + | | 2 | 25 MSym/s | 23,04 MBit/s | |
+ | | 3 | 16,67 MSym/s | 15,36 MBit/s | | ||
+ | | 4 | 12,5 MSym/s | 11,51 MBit/s | | ||
+ | | 5 | 10 MSym/s | 9,22 MBit/s | | ||
+ | | 6 | 8,33 MSym/s | 7,68 MBit/s | | ||
+ | | 7 | 7,14 MSym/s | 6,58 MBit/s | | ||
+ | | 8 | 6,25 MSym/s | 6,76 MBit/s | | ||
- | Schnittstelle: | + | Es muss bedacht werden: Der Interpolator am Ausgang |
- | * Eingang: Daten (Bit) | + | |
- | * Ausgang: X (Bit) | + | |
- | | + | |
- | === Puncturing/ | ||
- | Aufgabe: | ||
- | * Weglassen definierter Bits aus dem convolutional Coder | ||
- | * Mapping auf I/Q-Symbole | ||
- | Schnittstelle: | + | ==== Netzwerkprotokoll ==== |
- | * Eingang: X (Bit) | + | Eine aufwendige Stack-Implementierung soll vermieden werden - diese Aufgabe könnte später mal ein IP-Stack übernehmen. Im Moment ist es wichtig, eine stabile, Datenflusskontrollierte Verbindung in den FPGA aufzubauen. Es wird daher eine einfache Zwei-Wege-Kommunikation definiert. |
- | * Eingang: Y (Bit) | + | |
- | * Ausgang: I (Bit) | + | |
- | * Ausgang: Q (Bit) | + | |
- | === (Interpolator) === | + | Allgemeiner Paketaufbau: |
- | Aufgabe: | + | | Ethernet-Header | IP-Header | UDP-Header | UDP-Daten | Ethernet-Footer | |
- | * Einfügen von Nullen in den Datenstrom | + | |
- | Schnittstelle: | + | Folgende Anforderungen werden spezifiziert: |
- | * Eingang: I (Bit) | + | * Im Ethernet-Header sollen beliebige Quellen- und Ziel-MAC-Adresse stehen dürfen |
- | * Eingang: Q (Bit) | + | * Im IP-Header sollen beliebige Ziel- und Quell-Adressen stehen dürfen - kein Feld wird überprüft |
- | * Ausgang: I (Bit) | + | * Im UDP-Header wird der Ziel-Port überprüft. Die Länge kann optional überprüft werden |
- | * Ausgang: Q (Bit) | + | * Das Längen-Feld aller Protokollebenen wird ignoriert |
+ | * Zum Senden werden feste (vorher definierte) Pakete mit vorher berechneten Checksummen genutzt. | ||
- | === Baseband Filter | + | === Pakete PC -> FPGA === |
- | Aufgabe: | + | * UDP-Pakete, Ziel-Port 40000 |
- | * Spectral Shaping mit RRC-Filter | + | * Payload: 7*188 Byte Daten (7 MPEG-Frames) |
+ | * optional: variable Länge, kann vom FPGA überprüft werden | ||
- | Schnittstelle: | + | === Pakete FPGA -> PC === |
- | * Eingang: I (Bit) | + | * UDP-Pakete, Ziel-Port 40001 |
- | * Eingang: Q (Bit) | + | * Payload: 1 Byte |
- | * Ausgang: I (Bit-Vektor) | + | * 0x00: FIFO hat unteren Schwellwert erreicht |
- | * Ausgang: Q (Bit-Vektor) | + | * 0x01: FIFO hat oberen Schwellwert erreicht - Datenrate erniedrigen |
+ | * 0x02: FIFO hat normalen Füllstand erreicht | ||
+ | * 0x02: (optional) FIFO ist leer, einmalig | ||
+ | * 0x03: (optional) FIFO ist voll, einmalig | ||
+ | Pakete werden nicht wiederholt, bevor die entsprechende Bedingung nicht verlassen wurde. | ||
projekte/das/dvbs.1422659019.txt.gz · Zuletzt geändert: 2015/01/30 23:03 von thasti