diff --git a/README.md b/README.md index 7a00ca6e..86c73bd6 100644 --- a/README.md +++ b/README.md @@ -78,12 +78,12 @@ ln -s micropython/firmware.bin main_ram.bin ## Synthesis on Xilinx FPGAs using Vivado -- Install Vivado (I'm using the free 2019.1 webpack edition). +- Install Vivado (I'm using the free 2022.1 webpack edition). - Setup Vivado paths: ``` -source /opt/Xilinx/Vivado/2019.1/settings64.sh +source /opt/Xilinx/Vivado/2022.1/settings64.sh ``` - Install FuseSoC: @@ -101,10 +101,16 @@ sudo dnf install fusesoc This is needed to be able to pull down fussoc library components referenced by microwatt. Run +- If you use artix as a reference, like the uart16550 example below, you need to install the corresponding vivado package. + +

+MicroPython running on Microwatt +

+ ``` fusesoc init -fusesoc fetch uart16550 fusesoc library add microwatt /path/to/microwatt +fusesoc fetch uart16550 ``` - Build using FuseSoC. For hello world (Replace nexys_video with your FPGA board such as --target=arty_a7-100): @@ -127,6 +133,10 @@ fusesoc run --target=nexys_video microwatt Mainline Linux supports Microwatt as of v5.14. The Arty A7 is the best tested platform, but it's also been tested on the OrangeCrab and ButterStick. +

+MicroPython running on Microwatt +

+ 1. Use buildroot to create a userspace A small change is required to glibc in order to support the VMX/AltiVec-less @@ -134,7 +144,7 @@ platform, but it's also been tested on the OrangeCrab and ButterStick. VSX/AltiVec. This change is included in Joel's buildroot fork, along with a defconfig: ``` - git clone -b microwatt https://github.com/shenki/buildroot + git clone -b microwatt-2022.08 https://github.com/shenki/buildroot cd buildroot make ppc64le_microwatt_defconfig make @@ -148,7 +158,7 @@ platform, but it's also been tested on the OrangeCrab and ButterStick. cd linux make ARCH=powerpc microwatt_defconfig make ARCH=powerpc CROSS_COMPILE=powerpc64le-linux-gnu- \ - CONFIG_INITRAMFS_SOURCE=/buildroot/output/images/rootfs.cpio -j`nproc` + CONFIG_INITRAMFS_SOURCE=path/to/buildroot/output/images/rootfs.cpio -j`nproc` ``` The output is `arch/powerpc/boot/dtbImage.microwatt.elf`. @@ -170,20 +180,87 @@ platform, but it's also been tested on the OrangeCrab and ButterStick. For the Arty A7 A35, set `FLASH_ADDRESS` to `0x300000` and pass `-f a35`. ``` - microwatt/openocd/flash-arty -f a100 build/microwatt_0/arty_a7-100-vivado/microwatt_0.bit - microwatt/openocd/flash-arty -f a100 dtbImage.microwatt.elf -t bin -a $FLASH_ADDRESS + sudo microwatt/openocd/flash-arty -f a100 build/microwatt_0/arty_a7-100-vivado/microwatt_0.bit + sudo microwatt/openocd/flash-arty -f a100 dtbImage.microwatt.elf -t bin -a $FLASH_ADDRESS ``` 5. Connect to the second USB TTY device exposed by the FPGA ``` - minicom -D /dev/ttyUSB1 + sudo minicom -D /dev/ttyUSB1 ``` + If the cable was plugged in, unplug it when you're done and you'll see the serial console on the minicomputer. If you can't see the serial console, see below. + + go to Serial Port Setup; last two lines are Hardware and Software Flow control; just set NO both) + - https://stackoverflow.com/questions/3913246/cannot-send-character-with-minicom + ``` + sudo minicom -s; + ``` + The gateware has firmware that will look at `FLASH_ADDRESS` and attempt to parse an ELF there, loading it to the address specified in the ELF header and jumping to it. +6. SSH login + + Check your DHCP server + + ``` + $ cat /etc/default/isc-dhcp-server + # Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server) + # Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). + #DHCPDv4_CONF=/etc/dhcp/dhcpd.conf + #DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf + # Path to dhcpd's PID file (default: /var/run/dhcpd.pid). + #DHCPDv4_PID=/var/run/dhcpd.pid + #DHCPDv6_PID=/var/run/dhcpd6.pid + # Additional options to start dhcpd with. + # Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead + #OPTIONS="" + # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? + # Separate multiple interfaces with spaces, e.g. "eth0 eth1". + INTERFACESv4="enp6s0" + INTERFACESv6="enp6s0" + ``` + + ``` + $ sudo ifconfig enp6s0 192.168.0.1 + $ sudo /etc/init.d/isc-dhcp-server restart + $ dhcp-lease-list + To get manufacturer names please download http://standards.ieee.org/regauth/oui/oui.txt to /usr/local/etc/oui.txt + Reading leases from /var/lib/dhcp/dhcpd.leases + MAC IP hostname valid until manufacturer + =============================================================================================== + 56:1a:c0:3b:c0:f2 192.168.0.6 microwatt 2024-08-17 11:52:24 -NA- + ``` + + You can access it by first creating a new user named root on the serial port. For example, I created a user named microwatt + + ``` + $ ssh microwatt@192.168.0.6 + microwatt@192.168.0.6's password: + + $ uname -a + Linux microwatt 6.11.0-rc3-00279-ge5fa841af679 #3 Sat Aug 17 19:45:10 KST 2024 ppc64le GNU/Linux + + $ cat /etc/os-release + NAME=Buildroot + VERSION=2022.08-7-g119e742cb0 + ID=buildroot + VERSION_ID=2022.08 + PRETTY_NAME="Buildroot 2022.08" + + $ cat /proc/cpuinfo + processor : 0 + cpu : Microwatt + clock : 100.000000MHz + revision : 0.0 (pvr 0063 0000) + + timebase : 100000000 + platform : microwatt + ``` + ## Testing - A simple test suite containing random execution test cases and a couple of