# Installation instructions for Symbiflow with Xilinx Artix7 100T Board * * * This is now possible with the automated devscript It is, as always, your responsibility to check the contents of any script before running it. ------- # Manual instructions These are notes taken during the process of developing the above script. you **do not** need to go through this manual process unless you are very paranoid. warning: it took several days to get right. ## Setting up new debootstrap and chroot into it Run the following if you wish to isolate the symbiflow build from other software (reproducible builds) or use the schroot auto-preparation script here: export MY_CHROOT=/stable-chroot mkdir $MY_CHROOT debootstrap buster $MY_CHROOT http://deb.debian.org/debian/ mount -t proc proc $MY_CHROOT/proc mount -t sysfs sysfs $MY_CHROOT/sys mount -t devpts devpts $MY_CHROOT/dev/pts/ chroot $MY_CHROOT /bin/bash ## Add Buster Backports Repo and Update ""buster backports is needed for cmake"" cat << EOF > /etc/apt/sources.list.d/buster_backports.list deb http://deb.debian.org/debian buster-backports main EOF ""oooo annoying, pin preferences for buster-backports"" cat << EOF > /etc/apt/preferences.d/99buster-backports Package: * Pin: release a=buster-backports Pin-Priority: 900 EOF ""upgrade to buster-backports"" apt-get update -y apt-get upgrade -y ## Download necessary softwares apt-get install -y libcurl3-gnutls/buster git/buster wget git clone https://github.com/steveicarus/iverilog.git git clone https://github.com/YosysHQ/yosys.git git clone https://github.com/YosysHQ/abc.git git clone https://github.com/oneapi-src/oneTBB.git git clone https://github.com/verilog-to-routing/vtr-verilog-to-routing.git git clone https://github.com/yosyshq/icestorm.git git clone https://github.com/SymbiFlow/prjxray.git git clone https://github.com/SymbiFlow/prjxray-db.git git clone https://github.com/SymbiFlow/yosys-symbiflow-plugins.git git clone https://github.com/SymbiFlow/symbiflow-examples.git git clone https://github.com/SymbiFlow/symbiflow-arch-defs.git git clone https://github.com/QuickLogic-Corp/quicklogic-fasm.git git clone https://github.com/QuickLogic-Corp/quicklogic-fasm-utils.git git clone https://github.com/SymbiFlow/python-fpga-interchange.git git clone https://github.com/capnproto/capnproto.git git clone https://github.com/capnproto/pycapnp.git wget http://xmlsoft.org/sources/libxml2-2.9.12.tar.gz wget http://xmlsoft.org/sources/libxslt-1.1.34.tar.gz ## Steps to compile Icarus Verilog ### Necessary software to install apt-get install -y build-essential autoconf make g++ bison flex gperf \ libreadline6-dev ### Build Icarus Verilog cd iverilog git checkout v11_0 sh autoconf.sh ./configure --prefix=/usr/local/symbiflow/iverilog make -j$(nproc) make check make install export PATH=/usr/local/symbiflow/iverilog/bin:$PATH cd .. ## Steps to compile Yosys ### Necessary software to install apt-get install -y cmake apt-get install -y python3 clang libreadline-dev gawk tcl-dev \ libffi-dev pkg-config libboost-system-dev libboost-python-dev \ libboost-filesystem-dev zlib1g-dev ### Build Yosys cd abc git checkout 4f5f73d18b137930fb3048c0b385c82fa078db38 cd ../yosys git checkout f44110c62561b21fa673f44d8e115c3ee70d2900 ln -s ../abc . make -j $(nproc) PREFIX=/usr/local/symbiflow/yosys make PREFIX=/usr/local/symbiflow/yosys install install -d -m 0755 /usr/local/symbiflow/share ln -s ../yosys/share/yosys /usr/local/symbiflow/share export PATH=/usr/local/symbiflow/yosys/bin:$PATH cd .. ## Steps to compile oneTBB * Note: TBB is needed for multi-threading VTR-Verilog-to-routing * If not need multi-threading do not build TBB and VTR with TBB ### Necessary software to install apt-get install -y libhwloc-dev ### Build TBB cd oneTBB git checkout v2020.3 make -j$(nproc) tbb tbbmalloc tbbproxy tbbbind install -d -m 0755 /usr/local/symbiflow/oneTBB/lib cp -dpr include /usr/local/symbiflow/oneTBB install -Dm755 build/linux_*/*.so* -t /usr/local/symbiflow/oneTBB/lib cmake -DINSTALL_DIR=/usr/local/symbiflow/oneTBB/lib/cmake/TBB \ -DTBB_VERSION_FILE=/usr/local/symbiflow/oneTBB/include/tbb/tbb_stddef.h \ -DSYSTEM_NAME=Linux -P cmake/tbb_config_installer.cmake echo "/usr/local/symbiflow/oneTBB/lib" > /etc/ld.so.conf.d/symbiflow.conf ldconfig cd .. ## Steps to compile vtr-verilog-to-routing ### Necessary software to install apt-get install -y libeigen3-dev # Only if want GUI place and route #apt-get install libcairo2-dev libfontconfig1-dev libx11-dev libxft-dev \ #libgtk-3-dev ### Build vtr cd vtr-verilog-to-routing git checkout 77a3df829fdf509a76b9d7b941376f3835c2576a mkdir build; cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow/vtr .. make -j $(nproc) make install install -d -m 0755 /usr/local/symbiflow/share/vtr install -m 0644 ../libs/libvtrcapnproto/gen/rr_graph_uxsdcxx.capnp \ /usr/local/symbiflow/share/vtr export PATH=/usr/local/symbiflow/vtr/bin:$PATH cd ../.. ### Build vtr-tbb cd vtr-verilog-to-routing git checkout 77a3df829fdf509a76b9d7b941376f3835c2576a mkdir build-tbb; cd build-tbb cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow/vtr-tbb \ -DTBB_INCLUDE_DIR=/usr/local/symbiflow/oneTBB/include \ -DTBB_LIBRARY=/usr/local/symbiflow/oneTBB/lib -DBUILD_TYPE=Release .. LIBRARY_PATH=/usr/local/symbiflow/oneTBB/lib make -j $(nproc) LIBRARY_PATH=/usr/local/symbiflow/oneTBB/lib make install install -d -m 0755 /usr/local/symbiflow/share/vtr install -m 0644 ../libs/libvtrcapnproto/gen/rr_graph_uxsdcxx.capnp \ /usr/local/symbiflow/share/vtr # Choose either one of path for vtr-binaries # This one or above one #export PATH=/usr/local/symbiflow/vtr-tbb/bin:$PATH cd ../.. ## Steps to compile libxml2 * Newer version is needed which fixes a integer overflow error and is not provided by Buster. ### Necessary software to install apt-get install -y python3-dev ### Build libxml2 tar -xf libxml2-2.9.12.tar.gz cd libxml2-2.9.12 ./configure --prefix=/usr/local/symbiflow/libxml2 --with-history \ --with-python=/usr/bin/python3 make -j $(nproc) make install echo "/usr/local/symbiflow/libxml2/lib" >> /etc/ld.so.conf.d/symbiflow.conf ldconfig export PATH=/usr/local/symbiflow/libxml2/bin:$PATH cd .. ## Steps to compile libxslt * Needed by python3 lxml ### Build libxslt tar -xf libxslt-1.1.34.tar.gz cd libxslt-1.1.34 sed -i s/3000/5000/ libxslt/transform.c doc/xsltproc.{1,xml} sed -i -r '/max(Parser)?Depth/d' ./tests/fuzz/fuzz.c ./configure --prefix=/usr/local/symbiflow/libxslt --disable-static \ --without-python \ PKG_CONFIG_PATH=/usr/local/symbiflow/libxml2/lib/pkgconfig make -j $(nproc) make install echo "/usr/local/symbiflow/libxslt/lib" >> /etc/ld.so.conf.d/symbiflow.conf ldconfig export PATH=/usr/local/symbiflow/libxslt/bin:$PATH cd .. ## Steps to compile prjxray ### Necessary software to install ### Build prjxray cd prjxray git checkout f7f06896ad26bb7c94680dc323d4b871eded1f4e git submodule update --init --recursive mkdir build; cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow .. make -j$(nproc) make install export PATH=/usr/local/symbiflow/bin:$PATH cd ../.. ## Steps to compile yosys-symbiflow-plugins ### Necessary software to install ### Build yosys-symbiflow-plugins cd yosys-symbiflow-plugins git checkout b170f1d3575568d87901422f846b700169e299be sed -i -e 's@-include third_party/make-env/conda.mk@#-include third_party/make-env/conda.mk@' Makefile make -j$(nproc) make install cd .. ## Steps to compile prjxray-db ### Install prjxray-db cd prjxray-db git archive --format=tar --prefix=prjxray-db/ \ cd41f08a8a4d2a60053750a0fe10623b1e2e35da | \ tar -C /usr/local/symbiflow -xf - cat > /usr/local/symbiflow/bin/prjxray-config << EOF #!/bin/bash echo /usr/local/symbiflow/prjxray-db EOF chmod +x /usr/local/symbiflow/bin/prjxray-config cd .. ## Steps to compile Icestorm ### Necessary software to install apt-get install -y libftdi-dev ### Build Icestorm cd icestorm git checkout 83b8ef947f77723f602b706eac16281e37de278c make -j $(nproc) PREFIX=/usr/local/symbiflow/icestorm make PREFIX=/usr/local/symbiflow/icestorm install export PATH=/usr/local/symbiflow/icestorm/bin:$PATH cd .. ## Steps to compile capnproto ### Necessary software to install apt-get install -y automake autoconf libtool ### Build capnproto cd capnproto git checkout v0.8.0 cd c++ autoreconf -i ./configure --prefix=/usr/local/symbiflow/capnproto make -j $(nproc) make install echo "/usr/local/symbiflow/capnproto/lib" >> /etc/ld.so.conf.d/symbiflow.conf ldconfig export PATH=/usr/local/symbiflow/capnproto/bin:$PATH cd ../.. ## Steps to compile pycapnp ### Necessary software to install apt-get install -y python3-pip cython3 ### Build pycapnp cd pycapnp git checkout v1.0.0b1 pip3 install . cd .. ## Git checkout python-fpga-interchange cd python-fpga-interchange git checkout 1959b40e998db987c604c0a75664ccb209df13f7 cd .. ## Git checkout quicklogic-fasm-utils cd quicklogic-fasm-utils git checkout 3d6a375ddb6b55aaa5a59d99e44a207d4c18709f cd .. ## Git checkout quicklogic-fasm cd quicklogic-fasm git checkout ee546ff09b2ee25894db3f419366afaf3c4bfe32 cd .. ## Steps to compile symbiflow-arch-defs ## Necessary software to install apt-get install -y nodejs npm python-pytest openocd flake8 python3-numpy \ python3-intervaltree python3-simplejson python3-intelhex \ python3-importlib-metadata python3-jsonschema python3-packaging \ python3-pyparsing python3-pyrsistent python3-tqdm python3-zipp \ python3-typing-extensions python3-ply pip3 install textx fasm pyjson5 pyyaml tinyfpgab tinyprog pyjson lxml \ progressbar2 hilbertcurve==1.0.5 python-constraint parameterized \ yapf==0.26.0 python-sat ### Build symbiflow cd symbiflow-arch-defs git checkout c2c0f00960baf538eb31e4c42bf5d09dca87bad7 git submodule init git submodule update --init --recursive pip3 install ../python-fpga-interchange pip3 install -e third_party/prjxray pip3 install -e third_party/xc-fasm pip3 install ../quicklogic-fasm-utils pip3 install ../quicklogic-fasm pip3 install -e third_party/qlf-fasm pip3 install -e quicklogic/common/utils/quicklogic-timings-importer pip3 install -e third_party/vtr-xml-utils pip3 install -e third_party/python-symbiflow-v2x pip3 install -e third_party/python-sdf-timing pip3 install -e third_party/symbiflow-xc-fasm2bels mkdir -p env/conda/envs ln -s /usr/local/symbiflow env/conda/envs/symbiflow_arch_def_base sed -i -e 's@add_subdirectory(litex)@#add_subdirectory(litex)@g' \ -e 's@add_subdirectory(ibex)@#add_subdirectory(ibex)@g' \ xc/xc7/tests/soc/CMakeLists.txt ### Build symbiflow-arch-defs-xc7-artix7-100t export VPR_NUM_WORKERS=$(nproc) mkdir build; cd build cmake -DUSE_CONDA=FALSE -DPRJXRAY_DB_DIR=/usr/local/symbiflow/prjxray-db \ -DINSTALL_FAMILIES=xc7 -DINSTALL_ARCHS=artix7_100t \ -DINSTALL_DEVICES=xc7a100t -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow .. cd xc/xc7/archs/artix7_100t make install cd ../.. make PINMAP_INSTALL_arty100t-full_xc7a100t_test_arty100t-full_pinmap.csv install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a100t_test/xc7a100tcsg324-1 install -m 0644 arty100t-full_pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a100t_test/xc7a100tcsg324-1/pinmap.csv # Now you can skip to symbiflow-examples.git for external test # To do builtin counter test; it should build top.bit as final bitstream cd tests/counter make counter_arty100t_bit # see file counter_arty100t/artix7_100t-xc7a100t-virt-xc7a100t-test/top.bit # it is the bitstream file and if built then success cd ../../../../.. ### Build symbiflow-arch-defs-xc7-artix7 (xc7a50t) "If you do not want this target skip" export VPR_NUM_WORKERS=$(nproc) mkdir build_artix7; cd build_artix7 cmake -DUSE_CONDA=FALSE -DPRJXRAY_DB_DIR=/usr/local/symbiflow/prjxray-db \ -DINSTALL_FAMILIES=xc7 -DINSTALL_ARCHS=artix7_100t \ -DINSTALL_DEVICES=xc7a50t \ -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow .. cd xc/xc7/archs/artix7 make install cd ../.. make PINMAP_INSTALL_arty-full_xc7a50t_test_arty-full_pinmap.csv install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a50tfgg484-1 install -m 0644 arty-full_pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a50tfgg484-1/pinmap.csv install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a35tcsg324-1 ln -s ../xc7a50tfgg484-1/pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a35tcsg324-1 # Now you can skip to symbiflow-examples.git for external test # To do builtin counter test; it should build top.bit as final bitstream cd tests/counter make counter_arty100t_bit # see file counter_arty/artix7-xc7a50t-arty-swbut-roi-virt-xc7a50t-arty-swbut-test/top.bit # it is the bitstream file and if built then success cd ../../../../../.. ## Steps to compile symbiflow-examples ### Build counter test for arty_100 cd symbiflow-examples git checkout 07a6353627e0b6083728d1022ce30f9093d4c2de cd xc7 TARGET="arty_100" make -C counter_test # Should produce top.bit bitstream # see file counter_test/build/arty_100/top.bit ### Build counter test for arty_35 TARGET="arty_35" make -C counter_test # Should produce top.bit bitstream # see file counter_test/build/arty_/top.bit ### Build picosoc demo for arty_100 TARGET="arty_100" make -C picosoc_demo # Should produce top.bit bitstream # see file picosoc_demo/build/arty_100/top.bit ### Build picosoc demo for arty_35 TARGET="arty_35" make -C picosoc_demo # Should produce top.bit bitstream # see file picosoc_demo/build/arty_35/top.bit ### Build Linux Litex Demo for arty_100 TARGET="arty_100" make -C linux_litex_demo # Should produce top.bit bitstream # see file linux_litex_demo/build/arty_100/top.bit ### Build Linux Litex Demo for arty_35 TARGET="arty_35" make -C linux_litex_demo # Should produce top.bit bitstream # see file linux_litex_demo/build/arty_35/top.bit cd ../.. ## Steps to compile symbiflow-examples Litex ### Get Litex mkdir litex cd litex git clone https://github.com/m-labs/migen git clone https://github.com/litex-hub/pythondata-software-compiler_rt git clone https://github.com/enjoy-digital/litex git clone https://github.com/enjoy-digital/litedram git clone https://github.com/enjoy-digital/liteeth git clone https://github.com/enjoy-digital/liteiclink git clone https://github.com/enjoy-digital/litesdcard git clone https://github.com/litex-hub/litespi git clone https://github.com/litex-hub/litex-boards git clone https://github.com/litex-hub/pythondata-cpu-picorv32 git clone https://github.com/litex-hub/pythondata-cpu-vexriscv git clone https://github.com/litex-hub/pythondata-software-picolibc.git ### Build Litex "Git Commits" migen=6e3f8e565704b4293174aedfb15b3470d233f528 pythondata-software-compiler_rt=fcb03245613ccf3079cc833a701f13d0beaae09d litex=db20cb172dc982c5879aa8080ec7aa18de181cc5 litedram=1d5192f572c2eb97bc85eb56667e25dc88d725f1 liteeth=8ecc3ca6d9476dd1a8b32b2b6bf3584cd6dcfc02 liteiclink=3d8ecdbcf9f0260292221ff63b0ad3f5e409a955 litesdcard=4edf05e627a8b5f03e632215accec8ab588737e3 litespi=4cb907881bb75999e4c6bb68e211dd5cfc301de9 litex-boards=9e18d9bc34bafb18839512a55dc66ba62e0d4824 pythondata-cpu-picorv32=2e8be513726fb6ffd960f7e18d24e3a86d895107 pythondata-cpu-vexriscv=c4eca1837ebca20b637a0a61e3a93d9446488459 pythondata-software-picolibc=e27c8a7ef8a8e75b6474823aae338efb1a2ca1a9 for pkg in migen pythondata-software-compiler_rt litex litedram \ liteeth liteiclink litesdcard litespi litex-boards \ pythondata-cpu-picorv32 pythondata-cpu-vexriscv \ pythondata-software-picolibc; do cd "$pkg" eval git checkout $`echo $pkg` pip3 install -e . cd .. done #### Build Litex Demo cd litex-boards # Arty 100T Picorv32 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \ --cpu-type=picorv32 --sys-clk-freq 80e6 --variant a7-100 \ --output-dir build/picorv32/arty_100 --build --no-compile-software # see file build/picorv32/arty_100/gateware/digilent_arty.bit # this is the built bitstream # Arty 100T VexRiscv ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \ --cpu-type=vexriscv --sys-clk-freq 80e6 --variant a7-100 \ --output-dir build/vexriscv/arty_100 --build --no-compile-software # see file build/vexriscv/arty_100/gateware/digilent_arty.bit # this is the built bitstream # Arty 35T Picorv32 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \ --cpu-type=picorv32 --sys-clk-freq 80e6 --variant a7-35 \ --output-dir build/picorv32/arty_35 --build --no-compile-software # see file build/picorv32/arty_35/gateware/digilent_arty.bit # this is the built bitstream # Arty 35T VexRiscv ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \ --cpu-type=vexriscv --sys-clk-freq 80e6 --variant a7-35 \ --output-dir build/vexriscv/arty_35 --build --no-compile-software # see file build/vexriscv/arty_35/gateware/digilent_arty.bit # this is the built bitstream