6.6 KiB
RISC-V Linux-Workstation auf dem ML507
Dieses Repository enthält die Implementierung einer RISC-V-Workstation für das Xilinx ML507-Entwicklungsboard mit Unterstützung für das Booten von Linux von einer SD-Karte. Die Workstation wurde im Rahmen einer Masterarbeit an der Universität Leipzig entwickelt.
Kompilieren der RISC-V-Toolchain und des Linux-Bootimage
Da für die Synthese der Workstation aufgrund der Kompilierung des enthaltenen Bootloaders ebenfalls eine RISC-V-Toolchain nötig ist, wird diese zuerst zusammen mit dem Linux-Bootimage erzeugt.
cd freedom-u-sdk
make
Falls dabei bei einem „Bleeding edge“-System wie Arch-Linux Fehler auftreten,
können nach Bedarf die im patches
-Ordner verfügbaren Patches angewendet
werden. Weitere Details zum Freedom-SDK finden sich u.a. im
Freedom U500 VC707 FPGA Dev Kit Getting Started Guide.
Anschließend wird das erzeugte Bootimage auf eine SD-Karte übertragen. Dabei darf kein Partitionslayout vorhanden sein.
sudo dd if=work/bbl.bin of=/dev/sd-card bs=1M
sudo sync
Während des Kompilierens wird im Ordner freedom-u-sdk/toolchain
eine RISC-V
GCC-Toolchain erstellt. Der Unterordner bin
sollte für die folgenden
Schritte zur PATH
-Umgebungsvariablen hinzugefügt werden.
Synthese der Workstation für das ML507-Entwicklungsboard
Erzeugen des Rocket-SOC
Zuerst wird der Rocket-SoC ohne das BootROM erzeugt:
cd freedom
make -f Makefile.u500ml507devkit verilog
Anschließend muss der dabei generierte DeviceTree
sifive.freedom.unleashed.u500ml507devkit.U500ML507DevKitConfig.dts
im Ordner builds/u500ml507devkit
wie folgt angepasst werden:
-
Der verwendete Systemtakt muss zuerst im
soc
-Abschnitt definiert werden: sysclk: sysclk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <60000000>; }; -
Anschließend wird er über
clocks = <&sysclk 0>;
in denserial
undspi
Abschnitten referenziert. -
Es muss ein Alias für den UART-Controller im Hauptlevel hinzugefügt werden: aliases { serial0 = &L8; };
-
Die
dts
-Datei muss mit Hilfe desdtc
-Programms kompiliert werden. Mit dem Ergebniss sollte die inbuilds/u500ml507devkit
vorhandenendtb
- Datei überschrieben werden.
Um diese Schritte zu vereinfachen, enthält der patches
-Ordner bereits
fertig angepasste dts
und dtb
-Dateien, mit denen die vorhandenen
ersetzt werden können.
Schließlich wird das noch fehlende BootROM erzeugt, wobei dabei auch der Bootloader kompiliert wird:
make -f Makefile.u500ml507devkit romgen
Erzeugen des MIG-Speichercontrollers
Da der von MIG erzeugte Speichercontroller nicht ohne weiteres weitergegeben werden darf, muss er von Hand dem ISE-Projekt hinzugefügt werden. Falls beim öffnen des ISE-Projektes eine Meldung bezüglich fehlender Dateien erscheint, wurde entweder der Rocket-SoC nicht korrekt erzeugt oder nicht alle git- Submodule korrekt geklont.
- Rechtsklick auf das Projekt, New Source…
- IP (Core Generator & Architecture Wizard) auswählen
- Als Dateinamen
ddr2_controller
angeben, Location übernehmen - MIG auswählen (zB über die Suche), Next, Finish -> MIG startet
- Prüfen, ob der korrekte FPGA ausgewählt ist
- Bei den Ausgabeoptionen nochmals den Namen überprüfen und Create Design auswählen
- Es sollten keine PIN-kompatiblen FPGAs oder der PPC440 ausgewählt werden
DDR2 SDRAM
als Speichertyp auswählen- 5000 ps / 200 MHz als Takt, bei Memory Type
SODIMMs
, bei Memory Part das gewünschte Speichermodul (zBMT4HTF3264HY-667
auf dem ML507) und bei Date Width64
auswählen; Prüfen, ob Data Mask aktiviert ist - Prüfen, ob als Burst Length
4
ausgewählt ist - Den Haken bei Use PLL deaktivieren
- Auf der nächsten Seite muss nichts verändert werden
- Bei der Pin-Auswahl New Design auswählen und zwei mal bestätigen
- Die Zusammenfassung sollte wie unten lauten
- Das Memory-Modell über Decline nicht erzeugen lassen
- Die PCB-Informationen bestätigen und den Controller generieren
Anschließend kann die Workstation mit einem Doppelklick auf "Generate
Programming File" synthetisiert werden. Der erzeugte FPGA-Bitstream befindet
sich im Ordner project/ise/work
und kann per Impact auf das FPGA geladen
werden. Details zum Anschluss der SD-Karte befinden sich im Unterordner
sd-breakout
.
CORE Generator Options:
Target Device : xc5vfx70t-ff1136
Speed Grade : -1
HDL : verilog
Synthesis Tool : ISE
MIG Output Options:
Module Name : ddr2_controller
No of Controllers : 1
Selected Compatible Device(s) : --
PPC440 : --
PowerPC440 Block Selection : --
FPGA Options:
PLL : disabled
Debug Signals : Disable
System Clock : Single-Ended
Limit to 2 Bytes per Bank : disabled
Extended FPGA Options:
DCI for DQ/DQS : enabled
DCI for Address/Control : disabled
Class for Address and Control : Class II
Controller Options:
Memory : DDR2_SDRAM
Design Clock Frequency : 5000 ps(200.00 MHz)
Memory Type : SODIMMs
Memory Part : MT4HTF3264HY-667
Equivalent Part(s) : --
Data Width : 64
Memory Depth : 1
ECC : ECC Disabled
Data Mask : enabled
Memory Options:
Burst Length (MR[2:0]) : 4(010)
Burst Type (MR[3]) : sequential(0)
CAS Latency (MR[6:4]) : 4(100)
Output Drive Strength (EMR[1]) : Fullstrength(0)
RTT (nominal) - ODT (EMR[6,2]) : 75ohms(01)
Additive Latency (EMR[5:3]) : 0(000)
FPGA Options:
IODELAY Performance Mode : HIGH
Lizenzen
Alle Komponenten der Workstation sind, wenn nicht anders gekennzeichnet, unter GPLv3 lizenziert. Der für den FPGA erzeugte Bitstream darf jedoch nicht unter GPLv3 und damit gar nicht weitergegeben werden, da er den MIG-Speichercontroller enthält, dessen Quellcode nur unter ganz bestimmten Bedingungen modifiziert und weitergegeben werden darf.
Die Freedom-Platform ist unter der GPLv3-kompatiblen Apache2 Lizenz und Rocket außerdem unter der BSD-Lizenz lizenziert. Linux ist ausschließlich unter GPLv2 lizenziert.