1 # Installation instructions for Symbiflow with Xilinx Artix7 100T Board
3 * <https://symbiflow.github.io/>
4 * <https://github.com/SymbiFlow>
8 * <https://bugs.libre-soc.org/show_bug.cgi?id=654>
10 ## Setting up new debootstrap and chroot into it
12 Run the following if you wish to isolate the symbiflow build
13 from other software (reproducible builds) or use the schroot
14 auto-preparation script here:
15 <https://git.libre-soc.org/?p=dev-env-setup.git;a=blob;f=mk-deb-chroot;hb=HEAD>
17 export MY_CHROOT=/stable-chroot
19 debootstrap buster $MY_CHROOT http://deb.debian.org/debian/
20 mount -t proc proc $MY_CHROOT/proc
21 mount -t sysfs sysfs $MY_CHROOT/sys
22 mount -t devpts devpts $MY_CHROOT/dev/pts/
23 chroot $MY_CHROOT /bin/bash
25 ## Add Buster Backports Repo and Update
27 ""buster backports is needed for cmake""
29 cat << EOF > /etc/apt/sources.list.d/buster_backports.list
30 deb http://deb.debian.org/debian buster-backports main
33 ""oooo annoying, pin preferences for buster-backports""
35 cat << EOF > /etc/apt/preferences.d/99buster-backports
37 Pin: release a=buster-backports
41 ""upgrade to buster-backports""
47 ## Download neccessary softwares
49 apt-get install -y libcurl3-gnutls/buster git/buster wget
51 git clone https://github.com/steveicarus/iverilog.git
52 git clone https://github.com/YosysHQ/yosys.git
53 git clone https://github.com/YosysHQ/abc.git
54 git clone https://github.com/oneapi-src/oneTBB.git
55 git clone https://github.com/verilog-to-routing/vtr-verilog-to-routing.git
56 git clone https://github.com/cliffordwolf/icestorm.git
57 git clone https://github.com/SymbiFlow/prjxray.git
58 git clone https://github.com/SymbiFlow/prjxray-db.git
59 git clone https://github.com/SymbiFlow/yosys-symbiflow-plugins.git
60 git clone https://github.com/SymbiFlow/symbiflow-examples.git
61 git clone https://github.com/SymbiFlow/symbiflow-arch-defs.git
62 git clone https://github.com/QuickLogic-Corp/quicklogic-fasm.git
63 git clone https://github.com/QuickLogic-Corp/quicklogic-fasm-utils.git
64 git clone https://github.com/SymbiFlow/python-fpga-interchange.git
65 git clone https://github.com/capnproto/capnproto.git
66 git clone https://github.com/capnproto/pycapnp.git
68 wget http://xmlsoft.org/sources/libxml2-2.9.12.tar.gz
69 wget http://xmlsoft.org/sources/libxslt-1.1.34.tar.gz
71 ## Steps to compile Icarus Verilog
73 ### Necessary software to install
75 apt-get install -y build-essential autoconf make g++ bison flex gperf \
78 ### Build Icarus Verilog
83 ./configure --prefix=/usr/local/symbiflow/iverilog
87 export PATH=/usr/local/symbiflow/iverilog/bin:$PATH
90 ## Steps to compile Yosys
92 ### Necessary software to install
94 apt-get install -y cmake
95 apt-get install -y python3 clang libreadline-dev gawk tcl-dev \
96 libffi-dev pkg-config libboost-system-dev libboost-python-dev \
97 libboost-filesystem-dev zlib1g-dev
102 git checkout 4f5f73d18b137930fb3048c0b385c82fa078db38
104 git checkout f44110c62561b21fa673f44d8e115c3ee70d2900
106 make -j $(nproc) PREFIX=/usr/local/symbiflow/yosys
107 make PREFIX=/usr/local/symbiflow/yosys install
108 install -d -m 0755 /usr/local/symbiflow/share
109 ln -s ../yosys/share/yosys /usr/local/symbiflow/share
110 export PATH=/usr/local/symbiflow/yosys/bin:$PATH
113 ## Steps to compile oneTBB
115 * Note: TBB is needed for multi-threading VTR-Verilog-to-routing
116 * If not need multi-threading do not build TBB and VTR with TBB
118 ### Necessary software to install
120 apt-get install -y libhwloc-dev
126 make -j$(nproc) tbb tbbmalloc tbbproxy tbbbind
127 install -d -m 0755 /usr/local/symbiflow/oneTBB/lib
128 cp -dpr include /usr/local/symbiflow/oneTBB
129 install -Dm755 build/linux_*/*.so* -t /usr/local/symbiflow/oneTBB/lib
130 cmake -DINSTALL_DIR=/usr/local/symbiflow/oneTBB/lib/cmake/TBB \
131 -DTBB_VERSION_FILE=/usr/local/symbiflow/oneTBB/include/tbb/tbb_stddef.h \
132 -DSYSTEM_NAME=Linux -P cmake/tbb_config_installer.cmake
133 echo "/usr/local/symbiflow/oneTBB/lib" > /etc/ld.so.conf.d/symbiflow.conf
137 ## Steps to compile vtr-verilog-to-routing
139 ### Necessary software to install
141 apt-get install -y libeigen3-dev
143 # Only if want GUI place and route
144 #apt-get install libcairo2-dev libfontconfig1-dev libx11-dev libxft-dev \
149 cd vtr-verilog-to-routing
150 git checkout 77a3df829fdf509a76b9d7b941376f3835c2576a
151 mkdir build; cd build
152 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow/vtr ..
155 install -d -m 0755 /usr/local/symbiflow/share/vtr
156 install -m 0644 ../libs/libvtrcapnproto/gen/rr_graph_uxsdcxx.capnp \
157 /usr/local/symbiflow/share/vtr
158 export PATH=/usr/local/symbiflow/vtr/bin:$PATH
163 cd vtr-verilog-to-routing
164 git checkout 77a3df829fdf509a76b9d7b941376f3835c2576a
165 mkdir build-tbb; cd build-tbb
166 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow/vtr-tbb \
167 -DTBB_INCLUDE_DIR=/usr/local/symbiflow/oneTBB/include \
168 -DTBB_LIBRARY=/usr/local/symbiflow/oneTBB/lib -DBUILD_TYPE=Release ..
169 LIBRARY_PATH=/usr/local/symbiflow/oneTBB/lib make -j $(nproc)
170 LIBRARY_PATH=/usr/local/symbiflow/oneTBB/lib make install
171 install -d -m 0755 /usr/local/symbiflow/share/vtr
172 install -m 0644 ../libs/libvtrcapnproto/gen/rr_graph_uxsdcxx.capnp \
173 /usr/local/symbiflow/share/vtr
174 # Choose either one of path for vtr-binaries
175 # This one or above one
176 #export PATH=/usr/local/symbiflow/vtr-tbb/bin:$PATH
179 ## Steps to compile libxml2
181 * Newer version is needed which fixes a integer overflow error and is not
184 ### Necessary software to install
186 apt-get install -y python3-dev
190 tar -xf libxml2-2.9.12.tar.gz
192 ./configure --prefix=/usr/local/symbiflow/libxml2 --with-history \
193 --with-python=/usr/bin/python3
196 echo "/usr/local/symbiflow/libxml2/lib" >> /etc/ld.so.conf.d/symbiflow.conf
198 export PATH=/usr/local/symbiflow/libxml2/bin:$PATH
201 ## Steps to compile libxslt
203 * Needed by python3 lxml
207 tar -xf libxslt-1.1.34.tar.gz
209 sed -i s/3000/5000/ libxslt/transform.c doc/xsltproc.{1,xml}
210 sed -i -r '/max(Parser)?Depth/d' ./tests/fuzz/fuzz.c
211 ./configure --prefix=/usr/local/symbiflow/libxslt --disable-static \
213 PKG_CONFIG_PATH=/usr/local/symbiflow/libxml2/lib/pkgconfig
216 echo "/usr/local/symbiflow/libxslt/lib" >> /etc/ld.so.conf.d/symbiflow.conf
218 export PATH=/usr/local/symbiflow/libxslt/bin:$PATH
221 ## Steps to compile prjxray
223 ### Necessary software to install
228 git checkout f7f06896ad26bb7c94680dc323d4b871eded1f4e
229 git submodule update --init --recursive
230 mkdir build; cd build
231 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow ..
234 export PATH=/usr/local/symbiflow/bin:$PATH
237 ## Steps to compile yosys-symbiflow-plugins
239 ### Necessary software to install
241 ### Build yosys-symbiflow-plugins
243 cd yosys-symbiflow-plugins
244 git checkout b170f1d3575568d87901422f846b700169e299be
245 sed -i -e 's@-include third_party/make-env/conda.mk@#-include third_party/make-env/conda.mk@' Makefile
250 ## Steps to compile prjxray-db
252 ### Install prjxray-db
255 git archive --format=tar --prefix=prjxray-db/ \
256 cd41f08a8a4d2a60053750a0fe10623b1e2e35da | \
257 tar -C /usr/local/symbiflow -xf -
259 cat > /usr/local/symbiflow/bin/prjxray-config << EOF
261 echo /usr/local/symbiflow/prjxray-db
264 chmod +x /usr/local/symbiflow/bin/prjxray-config
267 ## Steps to compile Icestorm
269 ### Necessary software to install
271 apt-get install -y libftdi-dev
276 git checkout 83b8ef947f77723f602b706eac16281e37de278c
277 make -j $(nproc) PREFIX=/usr/local/symbiflow/icestorm
278 make PREFIX=/usr/local/symbiflow/icestorm install
281 ## Steps to compile capnproto
283 ### Necessary software to install
285 apt-get install -y automake autoconf libtool
293 ./configure --prefix=/usr/local/symbiflow/capnproto
296 echo "/usr/local/symbiflow/capnproto/lib" >> /etc/ld.so.conf.d/symbiflow.conf
298 export PATH=/usr/local/symbiflow/capnproto/bin:$PATH
301 ## Steps to compile pycapnp
303 ### Necessary software to install
305 apt-get install -y python3-pip cython3
310 git checkout v1.0.0b1
314 ## Git checkout python-fpga-interchange
316 cd python-fpga-interchange
317 git checkout 1959b40e998db987c604c0a75664ccb209df13f7
320 ## Git checkout quicklogic-fasm-utils
322 cd quicklogic-fasm-utils
323 git checkout 3d6a375ddb6b55aaa5a59d99e44a207d4c18709f
326 ## Git checkout quicklogic-fasm
329 git checkout ee546ff09b2ee25894db3f419366afaf3c4bfe32
332 ## Steps to compile symbiflow-arch-defs
334 ## Necessary software to install
336 apt-get install -y nodejs npm python-pytest openocd flake8 python3-numpy \
337 python3-intervaltree python3-simplejson python3-intelhex \
338 python3-importlib-metadata python3-jsonschema python3-packaging \
339 python3-pyparsing python3-pyrsistent python3-tqdm python3-zipp \
340 python3-typing-extensions python3-ply
342 pip3 install textx fasm pyjson5 pyyaml tinyfpgab tinyprog pyjson lxml \
343 progressbar2 hilbertcurve==1.0.5 python-constraint parameterized \
344 yapf==0.26.0 python-sat
348 cd symbiflow-arch-defs
349 git checkout c2c0f00960baf538eb31e4c42bf5d09dca87bad7
351 git submodule update --init --recursive
352 pip3 install ../python-fpga-interchange
353 pip3 install -e third_party/prjxray
354 pip3 install -e third_party/xc-fasm
355 pip3 install ../quicklogic-fasm-utils
356 pip3 install ../quicklogic-fasm
357 pip3 install -e third_party/qlf-fasm
358 pip3 install -e quicklogic/common/utils/quicklogic-timings-importer
359 pip3 install -e third_party/vtr-xml-utils
360 pip3 install -e third_party/python-symbiflow-v2x
361 pip3 install -e third_party/python-sdf-timing
362 pip3 install -e third_party/symbiflow-xc-fasm2bels
364 mkdir -p env/conda/envs
365 ln -s /usr/local/symbiflow env/conda/envs/symbiflow_arch_def_base
367 sed -i -e 's@add_subdirectory(litex)@#add_subdirectory(litex)@g' \
368 -e 's@add_subdirectory(ibex)@#add_subdirectory(ibex)@g' \
369 xc/xc7/tests/soc/CMakeLists.txt
371 ### Build symbiflow-arch-defs-xc7-artix7-100t
373 export VPR_NUM_WORKERS=$(nproc)
375 mkdir build; cd build
376 cmake -DUSE_CONDA=FALSE -DPRJXRAY_DB_DIR=/usr/local/symbiflow/prjxray-db \
377 -DINSTALL_FAMILIES=xc7 -DINSTALL_ARCHS=artix7_100t \
378 -DINSTALL_DEVICES=xc7a100t -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow ..
379 cd xc/xc7/archs/artix7_100t
382 make PINMAP_INSTALL_arty100t-full_xc7a100t_test_arty100t-full_pinmap.csv
383 install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a100t_test/xc7a100tcsg324-1
384 install -m 0644 arty100t-full_pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a100t_test/xc7a100tcsg324-1/pinmap.csv
386 # Now you can skip to symbiflow-examples.git for external test
388 # To do builtin counter test; it should build top.bit as final bitstream
390 make counter_arty100t_bit
392 # see file counter_arty100t/artix7_100t-xc7a100t-virt-xc7a100t-test/top.bit
393 # it is the bitstream file and if built then success
397 ### Build symbiflow-arch-defs-xc7-artix7 (xc7a50t)
399 "If you do not want this target skip"
401 export VPR_NUM_WORKERS=$(nproc)
403 mkdir build_artix7; cd build_artix7
404 cmake -DUSE_CONDA=FALSE -DPRJXRAY_DB_DIR=/usr/local/symbiflow/prjxray-db \
405 -DINSTALL_FAMILIES=xc7 -DINSTALL_ARCHS=artix7_100t \
406 -DINSTALL_DEVICES=xc7a50t \
407 -DCMAKE_INSTALL_PREFIX=/usr/local/symbiflow ..
408 cd xc/xc7/archs/artix7
411 make PINMAP_INSTALL_arty-full_xc7a50t_test_arty-full_pinmap.csv
412 install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a50tfgg484-1
413 install -m 0644 arty-full_pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a50tfgg484-1/pinmap.csv
414 install -d -m 0755 /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a35tcsg324-1
415 ln -s ../xc7a50tfgg484-1/pinmap.csv /usr/local/symbiflow/share/symbiflow/arch/xc7a50t_test/xc7a35tcsg324-1
417 # Now you can skip to symbiflow-examples.git for external test
419 # To do builtin counter test; it should build top.bit as final bitstream
421 make counter_arty100t_bit
423 # see file counter_arty/artix7-xc7a50t-arty-swbut-roi-virt-xc7a50t-arty-swbut-test/top.bit
424 # it is the bitstream file and if built then success
428 ## Steps to compile symbiflow-examples
430 ### Build counter test for arty_100
432 cd symbiflow-examples
433 git checkout 07a6353627e0b6083728d1022ce30f9093d4c2de
436 TARGET="arty_100" make -C counter_test
438 # Should produce top.bit bitstream
439 # see file counter_test/build/arty_100/top.bit
441 ### Build counter test for arty_35
443 TARGET="arty_35" make -C counter_test
445 # Should produce top.bit bitstream
446 # see file counter_test/build/arty_/top.bit
448 ### Build picosoc demo for arty_100
450 TARGET="arty_100" make -C picosoc_demo
452 # Should produce top.bit bitstream
453 # see file picosoc_demo/build/arty_100/top.bit
455 ### Build picosoc demo for arty_35
457 TARGET="arty_35" make -C picosoc_demo
459 # Should produce top.bit bitstream
460 # see file picosoc_demo/build/arty_35/top.bit
462 ### Build Linux Litex Demo for arty_100
464 TARGET="arty_100" make -C linux_litex_demo
466 # Should produce top.bit bitstream
467 # see file linux_litex_demo/build/arty_100/top.bit
469 ### Build Linux Litex Demo for arty_35
471 TARGET="arty_35" make -C linux_litex_demo
473 # Should produce top.bit bitstream
474 # see file linux_litex_demo/build/arty_35/top.bit
478 ## Steps to compile symbiflow-examples Litex
485 git clone https://github.com/m-labs/migen
486 git clone https://github.com/litex-hub/pythondata-software-compiler_rt
487 git clone https://github.com/enjoy-digital/litex
488 git clone https://github.com/enjoy-digital/litedram
489 git clone https://github.com/enjoy-digital/liteeth
490 git clone https://github.com/enjoy-digital/liteiclink
491 git clone https://github.com/enjoy-digital/litesdcard
492 git clone https://github.com/litex-hub/litespi
493 git clone https://github.com/litex-hub/litex-boards
494 git clone https://github.com/litex-hub/pythondata-cpu-picorv32
495 git clone https://github.com/litex-hub/pythondata-cpu-vexriscv
496 git clone https://github.com/litex-hub/pythondata-software-picolibc.git
502 migen=6e3f8e565704b4293174aedfb15b3470d233f528
503 pythondata-software-compiler_rt=fcb03245613ccf3079cc833a701f13d0beaae09d
504 litex=db20cb172dc982c5879aa8080ec7aa18de181cc5
505 litedram=1d5192f572c2eb97bc85eb56667e25dc88d725f1
506 liteeth=8ecc3ca6d9476dd1a8b32b2b6bf3584cd6dcfc02
507 liteiclink=3d8ecdbcf9f0260292221ff63b0ad3f5e409a955
508 litesdcard=4edf05e627a8b5f03e632215accec8ab588737e3
509 litespi=4cb907881bb75999e4c6bb68e211dd5cfc301de9
510 litex-boards=9e18d9bc34bafb18839512a55dc66ba62e0d4824
511 pythondata-cpu-picorv32=2e8be513726fb6ffd960f7e18d24e3a86d895107
512 pythondata-cpu-vexriscv=c4eca1837ebca20b637a0a61e3a93d9446488459
513 pythondata-software-picolibc=e27c8a7ef8a8e75b6474823aae338efb1a2ca1a9
515 for pkg in migen pythondata-software-compiler_rt litex litedram \
516 liteeth liteiclink litesdcard litespi litex-boards \
517 pythondata-cpu-picorv32 pythondata-cpu-vexriscv \
518 pythondata-software-picolibc; do
520 eval git checkout $`echo $pkg`
525 #### Build Litex Demo
530 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \
531 --cpu-type=picorv32 --sys-clk-freq 80e6 --variant a7-100 \
532 --output-dir build/picorv32/arty_100 --build --no-compile-software
533 # see file build/picorv32/arty_100/gateware/digilent_arty.bit
534 # this is the built bitstream
538 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \
539 --cpu-type=vexriscv --sys-clk-freq 80e6 --variant a7-100 \
540 --output-dir build/vexriscv/arty_100 --build --no-compile-software
541 # see file build/vexriscv/arty_100/gateware/digilent_arty.bit
542 # this is the built bitstream
546 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \
547 --cpu-type=picorv32 --sys-clk-freq 80e6 --variant a7-35 \
548 --output-dir build/picorv32/arty_35 --build --no-compile-software
549 # see file build/picorv32/arty_35/gateware/digilent_arty.bit
550 # this is the built bitstream
554 ./litex_boards/targets/digilent_arty.py --toolchain=symbiflow \
555 --cpu-type=vexriscv --sys-clk-freq 80e6 --variant a7-35 \
556 --output-dir build/vexriscv/arty_35 --build --no-compile-software
557 # see file build/vexriscv/arty_35/gateware/digilent_arty.bit
558 # this is the built bitstream