Kurzdokumentation SIO-Board (Hotlink 2) Version 1.1 vom

Größe: px
Ab Seite anzeigen:

Download "Kurzdokumentation SIO-Board (Hotlink 2) Version 1.1 vom 22.03.2007"

Transkript

1 Kurzdokumentation SIO-Board (Hotlink 2) Version 1.1 vom

2 Einleitung Das SIO-Board (SIO: Serial Input/Output) dient zum Anschluss von IPP-eigenen ADC-Crates, bei denen 16-Bit Messdaten seriell gemäß dem Hotlink-Standard zu einem Diagnostik-Rechner übertragen werden. Das Board muss auf max. vier voneinander unabhängigen Links zwei verschiedene Meß-Modi unterstützen: o Einen schnellen Modus: dabei werden Daten von rel. wenigen Kanälen schnell gemessen. Typisch: 4 Kanäle pro Link bei einer Abtastrate von 2 MHz. o Einen langsamen Modus: dabei werden viele Kanäle langsamer betrieben. Typisch: 16 Kanäle pro Link bei einer Abtastrate von 300 KHz. Da mit diesen Karten hochkanalige Diagnostiken realisiert werden sollen, also eine Vielzahl von Karten parallel betrieben werden müssen, und zudem jedes Crate getrennt getriggert werden muss(kann), ist ein Mechanismus vorzusehen, der die Crates möglichst genau synchronisiert, wenn möglich auch über Rechnergrenzen hinweg. Außerdem sollen die Kanäle der Links eines Boards zu einem Frame zusammengefasst werden und, zusammen mit der Information über die Triggerzeit, in den Diagnostikrechner übertragen werden. Dabei ist ein kontinuierlicher Betrieb vorzusehen, der bestenfalls durch den verfügbaren Speicher im Rechner begrenzt ist. Der Zeitstempel muss auf Basis der utdc-zeit erfolgen, die als experimentweite Zeit sowohl bei Asdex Upgrade (AUG) als auch bei Wendelstein7X (W7X) Gültigkeit hat. Die Diagnostik-Rechner sind dabei in der Regel schnelle Server unter Solaris oder Linux, die über Bus-to-Bus-Bridges mit IO-Extension-Chassis verbunden sind, die die Messkarten (SIO) aufnehmen. Bewährt haben sich IO-Extension-Chassis auf Compact-PCI-Basis (cpci), die momentan von Nachfolgern auf Compact-PCI- Express-Basis abgelöst werden. 1

3 Architektur des Boards Voraussetzungen Für den kontinuierlichen Messbetrieb ist erforderlich, dass die Daten-Frames mit DMA-Unterstützung in den Speicher des Rechners geschrieben werden, wobei der Rechner immer dann mit einem Interrupt informiert werden soll, wenn ein größerer Datenblock im Speicher verfügbar ist. Dies ergibt bei max. Belegung der ADC-Crates folgende Transferraten: o Schneller Modus: 4 Links zu 4 Kanälen mit 2 Byte Werten plus 8 Bytes Zeitstempel ergibt 40 Bytes pro Trigger. Bei 2 MHz Abtastrate: 80MB/sec. o Langsamer Modus: 4 Links zu 16 Kanälen mit 2 Byte Werten plus 8 Bytes Zeitstempel ergibt 136 Bytes pro Trigger: Bei 300 KHz Abtastrate: ca. 45 MB/sec. Da die reale Transferrate im DMA-Betrieb für den cpci-bus bei ca. 78 MB/sec liegt, ist zumindest im schnellen Modus der Betrieb einer SIO-Karte damit nicht möglich. Hier muss der cpcie-bus zum Einsatz kommen, der Transferraten von ca. 200 MB/sec (1*Lane) bis ca. 2 GB/sec (8*Lane) verspricht. Die Bandbreite eines cpcie- Anschlusses mit 1*Lane ist dabei ausreichend. Dabei stören sich mehrere Karten nicht gegenseitig, da sie zumindest in guten Bridge- bzw. Host-Systemen - über unanhängige Lane(-paare) angeschlossen sind. Zumindest im langsamen Modus kann eine Karte noch am cpci-bus betrieben werden. Bei mehreren Karten an einem Bus muß dann die Abtastrate entsprechend angeglichen werden. Es entsteht die Forderung an die SIO-Architektur, die Busschnittstelle flexibel zu halten, so dass je nach Anwendung entweder der cpci- oder der cpcie-bus zum Einsatz kommen kann. Das Hotlink-Interface bietet eine bidirektionale Schnittstelle, die neben den Daten auch die Clock überträgt. In der Input-Richtungen werden die Messdaten in fester, durch die Crate-Backplane vorgebener Reihenfolge gesendet (auch leere Slots liefern einen Wert). Die Output-Richtung kann zur Programmierung der ADCs und auch zur Triggerung genutzt werden. Dazu wird auf den 8 parallelen, seriell übertragenen Bits in dieser Richtung ein SPI-artiger Bus (gemäß IPP-Spezifikation als 3-Wire Bus ohne Selektion [?]) mit zusätzlichen Steuerleitungen (Reset, Trigger) realisiert. Wird auf dem SIO-Board zusätzlich eine utdc-schnittstelle vorgesehen, ist dort neben der utdc-zeit selbst und den synchronisierten Timermarken eine 50 MHz- Clock verfügbar, die dann zwischen allen Boards synchronisiert ist (mit PLL- Genauigkeit). Diese Clock kann wiederum als Hotlink-Basisclock dienen, die dann auf allen ADC-Crates anliegt (ebenfalls unter PLL-Kontrolle). Somit können alle SIO- Boards unabhängig von ihren Hostrechnern und alle ADC-Crates synchronisiert werden. 2

4 Wird neben dem utdc-timing-teil auch der utdc-trigger- und Timing-Prozessor (mit seinen beiden Kanälen TTP0 und TTP1) auf einem SIO-Board vorgesehen, kann davon die Triggersequenz abgeleitet (z.b. äquidistante Triggerung mit einer programmierbaren Frequenz, startend und endend jeweils mit einer Timermarke) und über den Hotlink zu den ADC-Crates übertragen werden. Die gewünschte Synchronisierung auch über Rechnergrenzen hinweg ist damit möglich und ein korrekter Zeitstempel für jeden Datenframe verfügbar. Blockschaltbild Obige Überlegungen führen zu folgendem Blockschaltbild: 3

5 Das SIO-Board zerfällt in 2 Boards, die über einen hochpoligen Stecker verbunden sind. Dies ist möglich, da als Kontroller sowohl für cpci (PLX9056) als auch für cpcie (PEX8311) Bauteile von PLX verfügbar sind, die intern dieselbe Schnittstelle (von PLX C-Bus genannt) besitzen. Somit kann für jeden Bus ein spezifisches Adapterboard entwickelt werden, das mit einem SIO-spezifischen IO-Teil verbunden wird, der in beiden Fällen identisch gehalten werden kann. Dieser Aufbau kommt dem Wunsch entgegen, bei AUG/W7X generische IO- Lösungen einzusetzen (identische Busadapter mit individuellen IO-Extensions), bei denen auch die Treiber weitgehend wieder verwendbar sind. Die Busadapter bestimmen weitgehend die Treiberstruktur, auch wenn die eigentliche IO-Logik, immer verpackt in einem FPGA, jeweils spezifisch an die IO-Schnittstelle angepasst ist (Speicher- und Registerlayout). SIO-FPGA In diesem FPGA (aus der Cyclone II Familie von Altera) ist die gesamte Logik incl. der diversen Speicher implementiert. Er besteht aus folgenden Komponenten: 4

6 Logischer Aufbau Der FPGA gliedert sich in logische Blöcke (Komponenten), in denen einzelne, voneinander unabhängige Funktionen angesiedelt sind. Diese Gliederung spiegelt sich in der Unterteilung der AHDL-Beschreibung in entsprechende Subkomponenten wieder. Komponente PLX Die Komponente PLX steuert den C-Bus und dekodiert die Zugriffe auf die restlichen Komponenten. Komponente CTL CTL realisiert die zentrale Steuerung von SIO. Hier sind die zentralen Kontrollregister beheimatet. Hauptaufgabe von CTL ist es, den Datenfluss von den Hotlinks zum Hostrechner zu organisieren. 5

7 Die Messdaten treffen byteweise von den Hotlinks bei CTL ein. Da bereits das Board-interne Delay der Hotlink-Interface-Bauteile undefiniert ist und durchaus größer sein kann als die maximale, gewünschte Abtastrate (2 MHz), geht intern jeder zeitliche Bezug zwischen dem Triggerzeitpunkt und dem Eintreffen eines Datenpaketes verloren. Deshalb wird der Start eines jeden Datenpaketes durch ein eindeutiges Startbyte gekennzeichnet. Als Startbyte wird ein Kontrollbyte (K28.0) verwendet, das im normalen Datenstrom nicht vorkommen kann. Die Daten, die dem Startbyte folgen, werden zunächst auf ihre originären 16-Bits gebracht (TmpFifo). Im nächsten Schritt werden die Daten herausgefiltert, die nicht im Datenframe abgelegt werden sollen. Dazu ist jedem Link ein Maskenregister zugeordnet, in dem jedem Wert in Bit entspricht (Bit 0 zu Datenwert 0, usw.). Ist dort ein Bit gesetzt, so bedeutet dies, dass das zugeordnete Datum nicht in den Frame aufgenommen werden soll. Die Filterung erfolgt beim Umkopieren der Daten in einen großen FIFO (FifoM), der zur Zwischenspeicherung dient. Werden der/die Hotlinks getriggert, so wird die Triggerzeit als utdc-zeit festgehalten. Diese wird zuerst als 64-Bit Wert in den FifoM geschrieben und steht damit am Anfang eines jeden Datenframes. Bei der Umspeicherung in die Fifo s wird der Datenpfad auf 32 Bits gebracht. Dies ist die geeignete Datenbreite für DMA-Bursts. Durch die Möglichkeit, einzelne Datenworte aus dem Frame auszublenden, ist es möglich, dass ein Frame, schlussendlich mit den Daten aus allen Kanälen, nicht auf 32 Bit Grenze abschließt. In diesen Fällen muss noch ein 16-Bit Datenwort nachgereicht werden, um den Frame per DMA transportieren zu können. Der Inhalt dieses Wortes kommt aus einem weiteren Register (Fill), um hierfür ein einstellbares Muster verwenden zu können. Um am PCI-Bus möglichst mit Burstzyklen operieren zu können, versuchen die PCI- Kontroller immer sofort 2-4 Lesezyklen für minimal 64 Bits auf den Fifo s auszuführen (die genaue Anzahl ist Adreßabhängig). Folglich dürfen DMA-Zyklen erst dann gestartet werden (DMA-Request), wenn mindestens 4 Datenworte im Fifo stehen. E Dies wiederum hat zur Folge, dass am Ende eines kompletten Transfers noch mehrere Datenworte im Fifo verbleiben können, das nicht mehr transportiert wurden. Auch um die internen Fifo s des DMA-Kontrollers zu leeren, muss in den Fällen, in denen ein DMA-Transfer durch Softwareintervention gestoppt werden soll, ein letzter Transfer explizit gestartet und dann der gesamte Transfer für beendet erklärt werden (EOT). Um dies zu veranlassen, ist dem DMA-Kanal 0 ein Stop-Bit zugeordnet, das bei externer Beendigung eines DMA-Transfers gesetzt werden soll. Durch Setzen dieses Bits initiiert den geschilderte Vorgang. Wenn der DMA-Kontroller anschließend den Transfer als gestoppt kennzeichnet, kann über die Zählerstände die Anzahl der transferierten Daten ermittelt werden, die zur Weiterbearbeitung sicherlich benötigt wird. Es können allerdings noch einige Restdaten im FifoM verblieben sein. Zu deren Transfer ist der Füllstand des FifoM lesbar. Diese Daten können dann nach dem DMA-Transfer per Software gelesen werden. Die Kontrollregister von CTL umfassen auch ein ganze Reihe von Status- und InterruptKontroll-Registern, die die Zustände aller anderen Komponenten zusammenfassen und sichtbar machen. 6

8 Komponenten Hotlink Diese Komponenten bilden die Schnittstelle zu den eigentlichen Hotlink-Interfaces, die in einem externen Bauteil untergebracht sind. Auf der Eingabeseite werden die Clock-Domains zwischen dem Hotlink und der internen FPGA-Clock (50 MHz) hier aufgetrennt. Dazu dient pro Schnittstelle ein kleiner DualClock-Fifo, den die Daten mit den Statusleitungen durchlaufen. Die Statusleitungen werden dann dekodiert und nur die gültigen Datenbytes weitergegeben. Dies ist eine reine Sicherheitsmaßnahme, denn wenn auch die Rx- Clock in den ADC-Crates sauber von der Tx-Clock, unserer experimentweit synchronisierten Clock, die auch am FPGA anliegt, erzeugt wird, sind Abweichungen nicht zu erwarten. Die ADC s in den externen Crates benötigen eine Einstellung und müssen zur Laufzeit getriggert werden. Auf der Ausgabeseite wird deshalb eine Programmierund Kontrollschnittstelle für die ADC s realisiert. Um dort die Logik möglichst einfach zu halten, wird eine SPI-ähnliche Schnittstelle (nach Absprache mit Hrn. Eixenberger, IPP) geschaffen, die mit 4 Leitungen auskommt: o Eine Enable-Leitung qualifiziert eine Datenübertragung o Eine Clock-Leitung triggert die serielle Übertragung o Über eine Master-Out-Slave-In-Leitung (MOSI) fliesen die Daten vom Host zu den Crates. o Über eine Leitung Master-In-Slave-Out (MISO) können Daten der ADC s gelesen werden. Im Unterschied zum standardisierten SPI-Interface, bei dem nur Daten an zuvor selektierte Geräte übertragen werden, wird hier auch eine Adresse mitgesandt, anhand derer ein Gerät sich selbst identifizieren muss. Nicht identifizierte Geräte bleiben passiv. Die Enable- und Clock-Leitung wird von alle Teilnehmern abgegriffen. Die MISO-MOSI werden nicht daisy-chain artig von Teilnehmer zu Teilnehmer durchgeschleift, sonder sind echte Busleitungen. Mit jeder steigenden Flanke kann das Gerät gültige Bits auf MOSI erkennen. Ist es selektiert, muss es seine Daten bitweise auf MISO mit der fallenden Flanke anlegen. Mit der steigenden Flanke der Clock wird das gerade auf MISO anliegende Bit an den Host übertragen. Das hat zur Folge, dass während der Adressübertragung undefinierte Bits beim Host ankommen. 7