Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Open-Source-MCU entwickeln und mit Arduino programmieren

ArtyDetail_d51373f0d13466741c7a030d5b88020fd1d82864.jpg

Das kostengünstige Arty FPGA-Board mit einer Arduino-kompatiblen RISC-V-Plattform konfigurieren

In diesem Artikel werfen wir einen Blick darauf, wie das äußerst erschwingliche, auf Xilinx Artix-7 basierende Digilent Arty Board, das für Modellbauer und Bastler entwickelt wurde, mit einem Open-Source-RISC-V-Mikrocontroller konfiguriert werden kann, der optional mithilfe von RTL-Quellcode entwickelt und dann über Arduino IDE oder alternativ eine Makefile-gesteuerte GNU-Toolchain programmiert werden kann.

Grundlegende Kenntnisse in Linux, Git und Makefile-gesteuerter Softwareerstellung werden vorausgesetzt.

Freedom E310

E300_platform_diagram1_768a5763b000897f50f2a6d4a2092801efa61dec.jpg

Allgemeines Blockdiagramm der Plattform E300, © 2017 SiFive Inc.

RISC-V ist eine kostenlose und frei zugängliche Befehlssatzarchitektur (instruction set architecture; kurz: ISA), die unter einer offenen Lizenz veröffentlicht ist, um einen weitverbreiteten Einsatz zu fördern. Sie ermöglicht es jedem, eigene kompatible Geräte zu implementieren, entweder in einer Simulationsumgebung, einem FPGA oder einem ASIC. Kompatibel können viele verschiedene Geräte sein, von IoT-Geräten mit sehr geringer Leistungsaufnahme über mobile Geräte, Laptops/Desktop-PCs und Servergeräte bis hin zu Geräten für HPC-Anwendungen.

Dabei ist RISC-V per se jedoch kein Prozessor, sondern eine ISA-Spezifikation. Dennoch stellt die RISC-V Foundation eine Prozessorreferenzimplementierung namens Rocket sowie Tools zum leichteren Generieren von Kernen sowie eine GNU-Compiler-Toolchain zur Verfügung.

-V-Entwicklern gegründeten Unternehmens SiFive umfasst IP-Cores und SoC-Plattformen, die von Beratungsservices ergänzt werden. Ihre SoC-Plattform Freedom E300 SoC baut auf E3 Coreplex auf und ist HYPERLINK "https://www.rs-online.com/designspark/hifive1-heralds-new-era-of-silicon-freedom" als ASIC verfügbar

Das Chip-Design für Freedom E310, das wir in die Konfiguration des Arty Boards laden, basiert auf der obigen SoC-Architektur.

Hardware

Assembly1_04e96246b37ce91b1476b96ec253985fe862a316.jpg

Während das Digilent Arty 410-319, RS-Bestellnr.  (134-6478) , einen USB-JTAG-Adapter integriert hat, der zur direkten Programmierung des Xilinx Artix-35T-FPGA genutzt werden kann, und über Quad-SPI-Flashspeicher verfügt, der gewöhnlich zur Konfiguration des FPGA nach dem Einschalten dient, ist auch ein ARM-USB-TINY-H-USB-JTAG-Adapter erforderlich, um eine Debugging-/Programmierverbindung zum RISC-V-Kern herzustellen.

So viele Schnittschnellen und Optionen! Naja, wir sprechen schließlich über eine vollständig programmierbare Plattform, bei der Sie das Design der MCU selbst frei anpassen und Ihren eigenen Code ausführen können.

JTAGWiring_83aaad06f17f31a66246d38656c7042cb54df2f3.jpg

USB-JTAG-Verdrahtung

Im Freedom E300 Arty FPGA Dev Kit Getting Started Guide werden die Verschaltung des Adapters beschrieben und Anweisungen zum Erstellen der SoC- und GNU-Toolchain, zum Programmieren des Boards etc. gegeben. Im Zweifelsfall ist diese Dokumentation ganz klar die erste Referenz und auch die in diesem Artikel beschriebenen Schritte basieren auf den Anweisungen in dieser Anleitung.

PMODWiring_c269fd892f63e66e5b877e7c703a35f747b71a11.jpg

Den PMOD-Anschluss JD verschalten

Es wurden die in der Anleitung vorgeschlagenen Farben zur Verschaltung verwendet. Auf dem Board im Lieferzustand müssen keine Steckbrücken angebracht oder entfernt werden, man muss nur darauf achten, PMOD JD und nicht einen der anderen Anschlüsse zu verbinden.

Um den Zugriff auf ARM-USB-TINY-H herzustellen, müssen neue udev-Regeln hinzugefügt werden:

Öffnen Sie /etc/udev/rules.d/99-openocd.rules zum Bearbeiten und fügen Sie Folgendes hinzu:

# These are for the Olimex Debugger for use with E310 Arty Dev Kit

SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", ATTR{idProduct}=="002a", MODE="664", GROUP="plugdev"

SUBSYSTEM=="tty", ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev"

Geben Sie dann Folgendes ein:

$ sudo udevadm control --reload-rules

Wenn Ihr Benutzerkonto noch nicht in der Gruppe plugdev aufgelistet ist, müssen Sie es hinzufügen und sich anschließend aus- und dann wieder einloggen.

FPGA toolchain

ARV_VivadoHLWebPACK_d6c42b7480c45dbf29dd3f6e629c61e732b9f805.png

Die kostenlose Version “WebPACK” der Vivado HL-Tools ist ausreichend und ein Downloader steht zur Verfügung, sobald man sich auf der Xilinx-Website eingeloggt hat. Wenn die Installation abgeschlossen ist, muss der Support für Digilent Boards hinzugefügt werden. Dazu muss man nur die Dateien herunterladen und an entsprechender Stelle ablegen.

Zum Beispiel sieht der Prozess nach dem Herunterladen des Installationsprogramms Vivado 2017.1 so aus:

Das Installationsprogramm ausführbar machen und als Root ausführen:

$ chmod +x Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

$ sudo ./Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

Installieren der Kabeltreiber:

$ cd /opt/Xilinx/Vivado/2017.1/data/xicom/cable_drivers/lin64/install_script/install_drivers

$ sudo ./install_drivers

Supportdateien für das Digilent Board herunterladen und am entsprechenden Ort ablegen:

$ git clone https://github.com/Digilent/vivado-boards.git

$ sudo cp -r vivado-boards/new/board_files/* /opt/Xilinx/Vivado/2017.1/data/boards/board_files/

Ins Basisverzeichnis zurückkehren und Umgebungsvariablen einrichten:

$ cd

$ source /opt/Xilinx/Vivado/2017.1/settings64.sh

Dieses Skript muss beim Einloggen oder Öffnen eines neuen Terminals jedes Mal über den Source-Befehl ausgeführt werden.

An dieser Stelle kann die GUI durch folgende Eingabe gestartet werden:

$ vivado

Das Board konfigurieren

ARV_VivadoOpenNewHardwareTarget_cb3c5cc87711f3778cb17d7d4675f0eeffcbf63e.png

Eine Datei zur Flash-Programmierung einschließlich mitgeliefertem FPGA-Bitstream und Demoprogramm kann von der SiFive Website heruntergeladen werden (Registrierung erforderlich).

Öffnen Sie nach dem Starten von Vivado den Hardwaremanager und stellen Sie eine Verbindung zum Board-Ziel her. Nach einem Rechtsklick auf das FPGA wählen Sie Add Configuration Memory Device und wählen Sie dann das Micron Teil n25q128-3.3v aus. Wenn Sie sich anschließend für das Programmieren des Gerätes entscheiden, kann die heruntergeladene .mcs-Datei ausgewählt werden.

ARV_VivadoAddConfigurationMemoryDevice_ce1fd82a2aed354151071051e5857ba759bec6af.png

Wenn die Programmierung abgeschlossen und der rote „PROG“-Knopf gedrückt ist, wird das FPGA konfiguriert und das Demoprogramm sollte ausgeführt werden, während LED1 und LED2 leuchten.

DemoProgram_d260ab5611af19382b8bb86055fe39b365862364.jpg

Wenn Sie zur Verbindung zu /dev/ttyUSB1 einen Terminalemulator nutzen, sollten Sie eine Meldung erhalten.

ARV_demo_banner_6c30c4b1015f1d5d5d3711765e0e6511e73e68fb.png

An dieser Stelle können Sie entweder den nächsten Abschnitt überspringen und direkt mit dem Programmieren des SoC mit Arduino IDE oder der GNU-Toolchain fortfahren. Oder aber Sie versuchen sich selbst daran, ein SoC aufzubauen.

Fertig ist der Chip!

MakeMCS_c98ac4447aea838c70f65e5d0523c3154f2c56fd.jpg

Zunächst müssen wir das GitHub Repository rekursiv kopieren. Es enthält Chisel RTL-Quellcode für die Plattformen SiFive E300 und U500.

$ git clone --recursive https://github.com/sifive/freedom.git

Das nimmt etwas Zeit in Anspruch, denn alle Git Submodule, die Abhängigkeiten erzeugen (wie etwa Rocket Chip Generator, Chisel etc.) werden nacheinander kopiert.

Sobald dieser Vorgang abgeschlossen ist, kann der Chisel-Quellcode bis zu Verilog herunterkompiliert werden. Geben Sie dazu Folgendes ein:

$ make -f Makefile.e300artydevkit verilog

Zum Erstellen einer Konfigurationsdatei müssen wir zunächst sicherstellen, dass die Vivado Umgebungsvariablen eingerichtet sind, indem die entsprechende Shell-Datei wie bereits erklärt über den Source-Befehl ausgeführt wird. Geben Sie dann Folgendes ein:

$ make -f Makefile.e300artydevkit mcs

Die Xilinx FPGA-Synthese wird zusammen mit dem Place-and-Route-Vorgang etc. durchgeführt. Kurz darauf sollten Sie eine schöne neue .mcs-Datei erhalten, die zum Programmieren des Konfigurations-Flashs genutzt werden kann.

Beachten Sie, dass das erzeugte Flash-Image standardmäßig kein Demoprogramm wie in der mitgelieferten Version enthält. Ein Programm kann jedoch in das Image eingebaut werden. Dazu muss das entsprechende Makefile bearbeitet werden. Genaueres dazu finden Sie in diesem Forumsbeitrag.

Arduino-kompatibel

ARV_Arduino_IDE_f6f6b85ebe007d8c8a4624225a4f459ffa7b8638.png

Softwareentwicklung für Freedom E310 gelingt am leichtesten, wenn man den Support von Arduino IDE für Arty Boards nutzt. Dazu gehen wir zuerst zu „File“ → „Preferences“ → „Settings“ und fügen dann die URL des Board-Managers ein:

http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json

Anschließend gehen wir zu „Tools“ → „Board“ → „Board Manager“, suchen nach SiFive Freedom Boards und installieren den zugehörigen Support. Danach können wir das Freedom E300 Arty DevKit Board auswählen, den zuverlässigen Blink-Test durchführen und das Kompilieren und Uploaden auf das Board durchführen.

Blink_4bd5f62a274f5ae39acfc6965dc4a2d85f38e16b.jpg

Sollte die Programmierung an dieser Stelle fehlschlagen, kann es sein, dass das USB-JTAG-Kabel nicht korrekt mit dem PMOD-Anschluss verbunden wurde, udev nicht konfiguriert ist oder Sie nicht in der Gruppe plugdev aufgelistet sind.

freedom-e-sdk

ARV_make_software_demo_gpio_0ef8b37c777f8d9ed97165a814cfaad04d50f27e.png

Wenn Sie einen Text-Editor Ihrer Wahl nutzen und Ihnen die Makefile-gesteuerte Entwicklung besser liegt, seien Sie unbesorgt: Die eigenständige GNU-Toolchain freedom-e-sdk lässt sich genauso leicht erstellen.

Zunächst müssen wir die Build-Abhängigkeiten definieren:

$ sudo apt-get install autoconf automake libmpc-dev libmpfr-dev libgmp-dev gawk bison flex texinfo libtool libusb-1.0-0-dev make g++ pkg-config libexpat1-dev zlib1g-dev

Dann kopieren wir Quellen und Build:

$ git clone --recursive https://github.com/sifive/freedom-e-sdk.git

$ cd freedom-e-sdk

ARV_make_upload_demo_gpio_4eea45d08c718c07032b2eca2017da47645fe1b4.png

$ make tools

Geben Sie zum Erstellen und Uploaden des Demoprogramms schließlich Folgendes ein:

$ make software PROGRAM=demo_gpio BOARD=freedom-e300-arty

$ make upload PROGRAM=demo_gpio BOARD=freedom-e300-arty

Völlig freier Aufbau

Für kleines Geld und in kürzester Zeit können Sie also eine anpassbare Mikrocontroller-Plattform zum Laufen bringen, bei der Sie den SoC-Aufbau völlig frei auseinandernehmen können – oder, wenn Ihnen dabei nicht so wohl zumute ist, das zurzeit coolste Arduino-kompatible Board zusammenstellen.

– Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin