Added links
[libreriscv.git] / HDL_workflow / microwatt.mdwn
index 70e27e9895bad93c97e563dea35202f407649aa2..821177c2fb863d4d9a132c0e8f7d0d137880e630 100644 (file)
@@ -1,9 +1,24 @@
 # Build instructions for Microwatt
 
+TODO WIP integrate from <https://libre-soc.org/irclog/%23libre-soc.2022-01-26.log.html>
+
+useful links:
+
+* <https://codeconstruct.com.au/docs/microwatt-orangecrab/>
+* <https://shenki.github.io/boot-linux-on-microwatt/>
+* <https://github.com/gregdavill/OrangeCrab-test-sw>
+
+prerequisite tools:
+
+* install verilator: <https://git.libre-soc.org/?p=dev-env-setup.git;a=blob;f=verilator-install;hb=HEAD>
+* install yosys <https://git.libre-soc.org/?p=dev-env-setup.git;a=blob;f=hdl-tools-yosys;hb=HEAD>
+* install ghdl-yosys-plugin
+
 After installing ghdl-yosys-plugin use schroot to switch environment
 
     schroot -c bullseye_ghdl
-    git clone https://github.com/antonblanchard/microwatt
+    git clone https://git.libre-soc.org/git/microwatt.git
+    git checkout -b verilator_trace
     export FPGA_TARGET=verilator
     make microwatt-verilator
 
@@ -19,14 +34,136 @@ with the message Microwatt, it works. On my ASUS KGPE D16 this takes
      sys       0m0.013s
      
 ## Building the kernel
-On a POWER9 there is no need to install a cross compiler
+On a POWER9 there is no need to install gcc-powerpc64le-linux-gnu
 you can omit CROSS_COMPILE and ARCH in this case
 
        apt install gcc-powerpc64le-linux-gnu
-       apt install flex bison
+       apt install flex bison lz4
        git clone -b microwatt-5.7 https://git.kernel.org/pub/scm/linux/kernel/git/joel/microwatt.git
        cd microwatt
-       wget https://ozlabs.org/~paulus/rootfs.cpio.xz FIXME 404
-       unxz rootfs.cpio.xz
+       wget https://ftp.libre-soc.org/microwatt-linux-5.7.patch
+       patch -p1 < microwatt-linux-5.7.patch
+       wget https://ftp.libre-soc.org/rootfs.cpio
        CROSS_COMPILE="ccache powerpc64le-linux-gnu-" ARCH=powerpc make -j8 O=microwatt microwatt_defconfig
        CROSS_COMPILE="ccache powerpc64le-linux-gnu-" ARCH=powerpc make -j8 O=microwatt
+       
+This will produce a file 
+       microwatt/arch/powerpc/boot/dtbImage.microwatt
+
+## Building sdram_init.bin
+This needs gcc-powerpc64le-linux-gnu if cross compilation is used.
+
+       cd microwatt
+       cd litedram/gen-src/sdram_init/
+       make 
+       
+## Building microwatt-verilator using the libre-soc core
+
+       cd /path/to/soc
+       make microwatt_external_core
+       cp external_core_top.v /path/to/microwatt
+       cd /path/to/microwatt
+       export FPGA_TARGET=verilator
+       export GHDLSYNTH=ghdl
+       make microwatt-verilator
+
+## Running the simulation
+
+       cp microwatt/arch/powerpc/boot/dtbImage.microwatt
+       ./microwatt-verilator sdram_init.bin dtbImage.microwatt
+       
+## Building the bitstring for OrangeCrab
+
+       cd microwatt
+       export FPGA_TARGET=ORANGE-CRAB
+       export GHDLSYNTH=ghdl
+       make microwatt.bit
+  
+## flashing the bitstring to the OrangeCrab
+
+       make prog # this will run OpenOCD
+
+
+
+## TODO: buildroot
+
+* https://github.com/shenki/buildroot/commits/microwatt
+* https://codeconstruct.com.au/docs/microwatt-orangecrab/
+
+# Notes for ulx3s
+
+notes for how to compile for ulx3s
+
+    git clone https://github.com/kost/fujprog
+    (follow build procedure shown in fujprog README)
+    git clone https://git.libre-soc.org/git/microwatt.git
+    git checkout -b verilator_trace
+    export FPGA_TARGET=ulx3s
+    make microwatt.svf
+    fujprog microwatt.svf
+
+
+# Notes for nextpnr-xilinx
+
+superceded: see page [[nextpnr-xilinx]] and devscript 
+<https://git.libre-soc.org/?p=dev-env-setup.git;a=blob;f=nextpnr-xilinx-install;hb=HEAD>
+
+for compiling nextpnr-xilinx and making it useable for nmigen
+to compile for the digilent arty-a7-100t, requires a little
+futzing around, using the symbiflow version of prjxray-db
+instead of the one recommended as a submodule
+
+    git clone https://github.com/gatecat/nextpnr-xilinx
+    cd nextpnr-xilinx
+    git checkout cd8b15db6ff5c1a7f10a9e
+    git submodule init
+    git submodule update
+    cd xilinx/external
+    mv prjxray-db prjxray-db-no
+    git clone https://github.com/SymbiFlow/prjxray-db
+    cd prjxray-db
+    git checkout 0a0addedd73e7
+    cp ./artix7/xc7a100t/*.json \
+       ./artix7/xc7a100tcsg324-1
+    cd ../../..
+    cmake -DARCH=xilinx .
+    make
+    make install
+    python3 xilinx/python/bbaexport.py --device xc7a100tcsg324-1 --bba xilinx/xc7a100t.bba
+    ./bbasm --l xilinx/xc7a100t.bba xilinx/xc7a100t.bin
+    mkdir -p /usr/share/nextpnr/xilinx-chipdb
+    cp xilinx/*.bin /usr/share/nextpnr/xilinx-chipdb
+    cp -aux xilinx/external/prjxray-db /usr/share/nextpnr
+
+# Additional Useful Info for UART <-> USB Serial Interface Through OrangeCrab's Built-in USB Interface
+
+This uses OrangeCrab's built-in USB interface, rather than needing a
+separate USB-serial adapter. see the following for further details:
+
+* <https://github.com/antonblanchard/microwatt/pull/347#issuecomment-1058800570>
+* <https://github.com/antonblanchard/microwatt/pull/347#issuecomment-1058834790>
+
+# running orangecrab-examples before flashing microwatt
+
+See <https://github.com/orangecrab-fpga/orangecrab-hardware/blob/main/contrib/10-orangecrab.rules>
+
+If the OrangeCrab is running in DFU mode, lsusb will show:
+
+    1209:5af0 Generic OrangeCrab r0.2 DFU Bootloader v3.1-6-g62e92e2
+    
+OrangeCrab has two DFU devices:
+
+    Found DFU: [1209:5af0] ver=0101, devnum=22, cfg=1, intf=0, path="1-4.2", alt=1, name="0x00100000 RISC-V Firmware", serial="UNKNOWN"
+    Found DFU: [1209:5af0] ver=0101, devnum=22, cfg=1, intf=0, path="1-4.2", alt=0, name="0x00080000 Bitstream", serial="UNKNOWN"
+    
+Then clone and patch orangecrab-examples:
+
+       git clone https://github.com/orangecrab-fpga/orangecrab-examples
+       patch -p1 < orangecrab-examples.diff
+       
+To build and flash the example:
+
+       pushd orangecrab-examples/nmigen
+       python3 blink.py
+       popd
+       sudo dfu-util -D orangecrab-examples/nmigen/build/top.bit -a 0