Bachelor-/Masterarbeit: Toplevel-Integration eines CGRAs auf einer Zynq-Plattform Abb : Schematischer Aufbau des Toplevel-Moduls (rote Komponenten und Verbindungen sind neu zu implementieren) Ein Coarse Grain Reconfigurable Array (CGRA) besteht aus einer Menge von miteinander verbundenen Processing Elements (PE) mit jeweils eigenem Daten- (REGFILE) und Programmspeicher (ContextMem). Es kann Algorithmen auf Instruktionsebene parallel und damit beschleunigt ausführen. Für den produktiven Einsatz als eingebettetes System muss ein CGRA aber auch mit verschiedenen Peripheriekomponenten und einem Host-Prozessor kommunizieren: • Einlesen von Sensordaten in das CGRA • Ausgeben von Aktordaten durch das CGRA • Beschreiben der Programmspeicher durch den Host-Prozessor • Austausch von temporären Daten mit einem an den Hauptspeicher angeschlossenen Cache • Streamen von Berechnungsergebnissen/Log-Daten in den Hauptspeicher Im Rahmen einer Masterarbeit soll ein CGRA in ein Xilinx Zynq Multi-Processor System on Chip (MPSoC) integriert werden. Das MPSoC besteht aus einem Processing System (PS), der Programmable Logic (PL) sowie verschiedenen Speicher und Bussen (bspw. AXI) zum Datenaustausch zwischen PS und PL. Das ARM-basierte PS soll als Host-Prozessor verwendet werden. Folgende Komponenten werden dabei vorgegeben: • ein Xilinx Zynq Evaluationsboard (XC7Z045) inklusive Vivado Toolchain • ein vom FG RS (FB 18) entworfenes Java Programm, welches die Verilog-Beschreibung eines CGRAs inklusive dessen Anbindung an einen Daten-Cache generiert • die Verilog-Beschreibungen verschiedene Sensor-/Aktor Controller, die ihre Daten in Ein/Ausgabespeicher (BRAM) schreiben • die Verilog-Beschreibung eines exemplarischen AXI-Controller, mit dem die Programmspeicher der PEs beschrieben werden kann Diese Komponenten sollen nun um verschiedene Module erweitert werden (für eine Bachelorarbeit wird eine angemessene Teilmenge dieser Aufgaben ausgewählt): • C/C++ API und eine entsprechende AXI-Implementierung zur gezielten Modifikation der PE Programmspeicher durch den Host-Prozessor • Anschluss eines Daten-Speichers an die vorhandenen Log-Ports des CGRAs • Sortieren und Filtern der Log-Daten gemäß Vorgabe durch den Host-Prozessor • Speichercontroller zum Streamen der (selektierten) Log-Daten in den Hauptspeicher • Anschluss der vorhandenen Peripherieports des CGRAs sowie des Host-Prozessors an die Sensor/Aktor Controller • Konfigurierbarer Takt- und Zyklenzähler, der die Abtastrate für die Periherie-Komponenten vorgibt und sowohl CGRA als auch den Host-Prozessor über den Beginn einer neuen Abtastperiode informiert Alle Verilog Module (auch die bereits vorgegebenen) sollen dabei durch das (in Java implementierte) Generator-Programm gemäß verschiedener Konfigurationsparameter erzeugt werden. Ein Grundgerüst des Toplevel-Generators ist bereits vorhanden. Die erzeugten Module müssen dokumentiert und charakterisiert (Funktionsfähigkeit, Durchsatz, Latenz, etc.) werden. Der Arbeitsfortschritt ist durch regelmäßiges Einpflegen des Quellcodes in ein Versionsverwaltungssystem (Git) nachzuweisen. Benötigte Kenntnisse: Java, Verilog, C Bei Interesse melden Sie sich bei: Andreas Engel ([email protected]), S2|02 E106