RISC-V Linux-Workstation auf dem ML507
Go to file
2018-06-06 01:03:38 +02:00
freedom@2c74ef7f03 Import freedom repos as submodules 2018-06-05 15:11:52 +02:00
freedom-u-sdk@0e61cba991 Import freedom repos as submodules 2018-06-05 15:11:52 +02:00
patches Add path for binutils gdb compilation failure 2018-06-06 01:03:38 +02:00
project/ise Add missing module to the ISE project and ignore generated MIG-Core 2018-06-05 17:15:48 +02:00
sd-breakout@2323183979 Add sd breakout board as submodule 2018-06-05 18:04:47 +02:00
src Import main constraints file 2018-06-05 16:04:27 +02:00
.gitmodules Add sd breakout board as submodule 2018-06-05 18:04:47 +02:00
LICENSE Add build instructions and license 2018-06-05 18:03:24 +02:00
README.md Mention how to copy the boot image to the sd card 2018-06-05 18:14:19 +02:00

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:

  1. Der verwendete Systemtakt muss zuerst im soc-Abschnitt definiert werden: sysclk: sysclk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <60000000>; };

  2. Anschließend wird er über clocks = <&sysclk 0>; in den serial und spi Abschnitten referenziert.

  3. Es muss ein Alias für den UART-Controller im Hauptlevel hinzugefügt werden: aliases { serial0 = &L8; };

  4. Die dts-Datei muss mit Hilfe des dtc-Programms kompiliert werden. Mit dem Ergebniss sollte die in builds/u500ml507devkit vorhandenen dtb- 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.

  1. Rechtsklick auf das Projekt, New Source…
  2. IP (Core Generator & Architecture Wizard) auswählen
  3. Als Dateinamen ddr2_controller angeben, Location übernehmen
  4. MIG auswählen (zB über die Suche), Next, Finish -> MIG startet
  5. Prüfen, ob der korrekte FPGA ausgewählt ist
  6. Bei den Ausgabeoptionen nochmals den Namen überprüfen und Create Design auswählen
  7. Es sollten keine PIN-kompatiblen FPGAs oder der PPC440 ausgewählt werden
  8. DDR2 SDRAM als Speichertyp auswählen
  9. 5000 ps / 200 MHz als Takt, bei Memory Type SODIMMs, bei Memory Part das gewünschte Speichermodul (zB MT4HTF3264HY-667 auf dem ML507) und bei Date Width 64 auswählen; Prüfen, ob Data Mask aktiviert ist
  10. Prüfen, ob als Burst Length 4 ausgewählt ist
  11. Den Haken bei Use PLL deaktivieren
  12. Auf der nächsten Seite muss nichts verändert werden
  13. Bei der Pin-Auswahl New Design auswählen und zwei mal bestätigen
  14. Die Zusammenfassung sollte wie unten lauten
  15. Das Memory-Modell über Decline nicht erzeugen lassen
  16. 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.