# Installing Coriolis2
-## debootstrap
+Videos and links:
-First set up an schroot debootstrap jail with debian 10.
-These instructions are based on information taken from here:
-<https://www.debian.org/releases/stretch/amd64/apds03.html.en>
+* <https://www.youtube.com/watch?v=TN9AQgoVwDw&list=PLj2N46Uqs4huGN-redGHVEILPz17OBu37&index=11>
+* <http://coriolis.lip6.fr/>
+* <https://gitlab.lip6.fr/vlsi-eda>
+* <https://www.youtube.com/watch?v=C0diiTc7_VI&list=PLBtNqZjUZB80uByfZVm0gGYEtmTG0mZzm&index=5>
+* <https://www.youtube.com/watch?v=e0ATrAlNzWk>
+* <https://fosdem.org/2022/schedule/event/coriolis2/>
+* <https://archive.fosdem.org/2021/schedule/event/alliance/>
+* <https://www.youtube.com/watch?v=TN9AQgoVwDw>
+* HiTas (tasyagle) page: [[tasyagle]]
-In advance, on the host system, edit /etc/fstab and add mount points:
+## Automated Installation - One-liner
-(edit: personally I prefer using mount --bind points. however if doing
-that then after a reboot the chroot will lose the bind mountpoints
-and the commands need to be re-run, without which the chroot is
-unusable)
+The new automated method of installing/setting up Coriolis2 is as follows:
- /dev /home/chroot/coriolis/dev none bind 0 0
- /dev/pts /home/chroot/coriolis/dev/pts none bind 0 0
- /proc /home/chroot/coriolis/proc none bind 0 0
- /sys /home/chroot/coriolis/sys none bind 0 0
- /tmp /home/chroot/coriolis/tmp none bind 0 0
+1. Clone the repo "dev-env-setup".
+ <https://git.libre-soc.org/?p=dev-env-setup.git;a=summary>
+ Tutorial assumes the directory is located under user's home.
+2. Run the script "coriolis2-chroot" to create a new chroot environment,
+ and setup Coriolis2.
+3. Once cgt window appears, go to File, Open Cell, and type chip_r.
+4. You should now have a working Coriolis chroot!
-Then run these commands:
+In a terminal (of course you checked what this does before running
+it because it is "commands downloaded off the internet", and you
+of course take absolute and complete and full responsibility):
- sudo bash
- apt-get install debootstrap schroot
- mkdir /opt/chroot/coriolis
- /usr/sbin/debootstrap buster !$ http://ftp.us.debian.org/debian
- mount /home/chroot/coriolis/dev
- mount /home/chroot/coriolis/dev/pts
- mount /home/chroot/coriolis/proc
- mount /home/chroot/coriolis/sys
- mount /home/chroot/coriolis/tmp
- echo "coriolis2" > /home/chroot/coriolis/etc/debian_chroot
+ $ git clone https://git.libre-soc.org/git/dev-env-setup.git
+ $ cd ~/dev-env-setup
+ $ sudo bash
+ # ./coriolis2-chroot
-To do some preparation (users):
+And now you wait... (about 30-45min, depends on your CPU).
+I suggest occasionallly checking the status messages,
+especially after apt finished updating the packages and the script moves on
+to compiling yosys, coriolis2, alliance, as well as when
+alliance-check-toolkit generates the floorplan for you.
- chroot /home/chroot/coriolis2 /bin/bash
- adduser {yourpreferredusername}
+This is what the chip floorplan should look like:
-It is best to make the username the same as the first user that
-was added during the *main* (non-chroot) debian install, so that
-uid 1000 matches between both main and chroot. You can check
-this by looking at /etc/passwd as root, or by typing "id".
+[[!img chip_r_floorplan.png ]]
- lkcl@fizzy:~$ id
- uid=1000(lkcl) gid=1000(lkcl) groups=1000(lkcl),5(tty),....
+## Automated Installation - Separated Steps
+The steps performed by "coriolis2-chroot" can be done manually and are:
-Alternatively, /etc/passwd and /etc/group may
-be mount-bound as well as /home however if you later forget you did
-this and decide to delete the chroot, you will delete the entire /home
-of your main system, as well as /etc/passwd.
+1. Run the script "mk-deb-chroot" to create a chroot environment.
+Tutorial assumes the name is "coriolis"
+1. Run the script "cp-scripts-to-chroot" to copy the dev-env-setup directory
+over to your new chroot environment.
+1. Login into the new scroot environment as a normal user
+(should be the same as your current user).
+1. Run the script "coriolis-install"
-You may wish to follow some of the other things such as configuring apt,
-locales and keyboard, from the above-linked debian-admin HOWTO.
+In a terminal:
-bootloader, kernel, ssh access, are unnecessary. Do run "apt clean" to clear out /var/cache/apt/archives in the chroot.
+ $ cd ~/dev-env-setup
+ $ sudo bash
+ # ./mk-deb-chroot coriolis
+ # ./cp-scripts-to-chroot coriolis
-## schroot
+In a separate terminal as normal user:
-Create an schroot file section for the coriolis chroot by
-editing /etc/schroot/schroot.conf:
+ $ scroot -c coriolis
+ (coriolis)$ cd ~/dev-env-setup
+ (coriolis)$ ./coriolis-install
- [coriolis]
- description=Debian Buster for Coriolis
- directory=/home/chroot/coriolis
- groups=sbuild-security,lkcl,users
+# Further Details
-Now as an *ordinary* user - not as root - you may type:
+## Python3 Coriolis Support
- lkcl@fizzy:~$ schroot -c coriolis
+A separate script will be written to use the latest development version of Coriolis2.
+For now however, a stable version is pulled in, which still uses Python2.
-and, due to the contents of /etc/debian\_chroot, and that you were in
-fact logged in as uid 1000 and did in fact add a user to the chroot
-as uid 1000, the prompt should become:
+## Chroot/Jail Environment
- (coriolis2)lkcl@fizzy:~$
+See [[devscripts]] for explanation of the "mk-deb-chroot" script.
-If however you need to run as root, then from outside the chroot,
-as *root*, you run this:
-
- lkcl@fizzy:~# schroot -c coriolis
-
-and you will see this as a result:
-
- (coriolis2)lkcl@fizzy:~#
-
-## coriolis2
+## Coriolis2 Setup
These are nominally taken from
<https://www-soc.lip6.fr/equipe-cian/logiciels/coriolis/>
cd ~/coriolis-2.x/src
git clone https://gitlab.lip6.fr/vlsi-eda/coriolis.git
cd coriolis
- git checkout devel
+ git checkout LS180_RC7_FINAL
./bootstrap/ccb.py --project=coriolis --make="-j$(nproc) install"
+Note: Instead of "devel", "LS180_RC7_FINAL" is used as it is more stable.
+Once Python3 support is added, can switch to using "devel".
+
To set up the coriolis2 environment, run this:
eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`
For convenience that may be placed in a file and "sourced", to avoid
having to look this page up every time
- echo "eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py`" > \
- ~/coriolisenv
+ /bin/bash << EOF
+ /home/$USER/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py > /home/$USER/coriolisenv
+ EOF
source ~/coriolisenv
+For now a workaround must be used for coriolisEnv.py to correctly detect the shell (Bash in this case).
+
## Testing coriolis2
To run the graphical editor go to the bin directory
This will remove debian/buster yosys however getting the build dependencies is quick and easy enough.
As the ordinary user, the following instructions can be followed
-(<http://www.clifford.at/yosys/download.html>)
+(<https://github.com/YosysHQ/yosys>)
cd ~
- git clone https://github.com/cliffordwolf/yosys.git
+ git clone https://github.com/YosysHQ/yosys
cd yosys
+ git checkout 049e3abf9baf795e69b9ecb9c4f19de6131f8418
make config-clang
make -j$(nproc)
+Note: For now a stable version of yosys is used!
+
As root, run:
make install
-## Check out alliance and alliance-check-toolkit
+## Alliance
Adapted from <https://www-soc.lip6.fr/en/team-cian/softwares/alliance/>
-In the chroot, as the ordinary schroot user, in ~/.bash\_profile add the following so that builds (rebuilds, if you need) them will be quicker:
+In the chroot, as the ordinary schroot user, in ~/.bash\_profile add the following so that builds (rebuilds, if you need them) will be quicker:
export PATH=/usr/lib/ccache:"$PATH"
Install alliance-check-toolkit in the chroot:
-* <https://gitlab.lip6.fr/vlsi-eda/alliance.git>
+* <https://gitlab.lip6.fr/vlsi-eda/alliance-check-toolkit.git>
* See coriolis-2.x/Linux.x86_64/Release.Shared/install/share/doc/coriolis2/en/html/main/PythonTutorial/index.html
Run the following (if not done already):
Git clone alliance-check-toolkit:
- git clone https://gitlab.lip6.fr/vlsi-eda/alliance.git
+ git clone https://gitlab.lip6.fr/vlsi-eda/alliance-check-toolkit.git
You must create a configuration for your user in alliance-check-toolkit to define where the various tools are installed:
- touch alliance-check-toolkit/etc/mk/users.d/user-USERNAME.mk
- cat <<EOF >>alliance-check-toolkit/etc/mk/users.d/user-USERNAME.mk
- export CORIOLIS_TOP=/home/USERNAME/coriolis-2.x/Linux.x86_64/Release.Shared/install
- export ALLIANCE_TOP=/home/USERNAME/alliance/install
- export CHECK_TOOLKIT=/home/USERNAME/alliance-check-toolkit
- export YOSYS_TOP=/home/USERNAME/yosys
+ touch alliance-check-toolkit/etc/mk/users.d/user-$USERNAME.mk
+ cat <<EOF >>alliance-check-toolkit/etc/mk/users.d/user-$USERNAME.mk
+ export CORIOLIS_TOP=/home/$USERNAME/coriolis-2.x/Linux.x86_64/Release.Shared/install
+ export ALLIANCE_TOP=/home/$USERNAME/alliance/install
+ export CHECK_TOOLKIT=/home/$USERNAME/alliance-check-toolkit
+ export YOSYS_TOP=/home/$USERNAME/yosys
EOF
-You can try the ARM in alliance-check-toolkit:
+You can try the user adder benchmark in alliance-check-toolkit:
- cd alliance-check-toolkit/benchsARM/cmos/
+ cd alliance-check-toolkit/benchs/adder/cmos
make lvx
This should take about five minutes. It's symbolic, but should be a configuration compatible with 180nm. To actually see the results:
Enter as the cell name (without the single quotation marks):
- 'arm_chip_cts_r'
+ 'chip_r'
As a very rough approximation, you can say that one lambda equals 180nm.
(with a basic doc under "doc/"...)
-# Check out the libresoc "soclayout" repository
-
-See [[HDL_workflow]] for git clone instructions
-
- $ git clone ssh://gitolite3@git.libre-riscv.org:922/libresoc.git
-
-TODO further, here.
+# Clone "soclayout" repository and place and route a layout experiment
+
+In order to do the physical layout of the logical
+netlists generated by yosys we use coriolis and
+alliace installed above by doing the following
+(using experiment9 as an example):
+
+ $ source ~/coriolisenv # if not done already
+ $ cd ~/src
+ $ git clone https://git.libre-soc.org/git/soclayout.git
+ $ cd soclayout/
+ $ git submodule update --init --recursive
+ $ find . -type f -exec sed -i 's/'lkcl'/'"$USER"'/g' {} \;
+ $ ./mksym.sh
+ $ cd experiments9
+ $ ./mksym.sh
+ $ yosys
+ yosys> read_ilang test_issuer.il
+ yosys> heirarchy -check -top test_issuer
+ yosys> synth -top test_issuer
+ yosys> dfflibmap -liberty /home/USERNAME/alliance/install/cells/sxlib/sxlib.lib
+ yosys> abc -liberty /home/USERNAME/alliance/install/cells/sxlib/sxlib.lib
+ yosys> clean
+ yosys> write_blif test_issuer.blif
+ yosys> exit
+ $ make pinmux
+ $ make layout (will take between 20min and 2 hours depending on your hardware)
+ $ make view
+
+A window should open with with contents that look like this (pretty isn't it?)
+
+[[!img 180nm_Oct2020/2020-07-03_11-04.png size="825x" ]]
# Issues running from (e.g.) archlinux as host and debian as a chroot
Then, in the chroot, follow the cgt instructions above, or use "make view"
in any of the soclayout experiments or alliance-check-toolkit bench tests
+
+# Libre-SOC 180nm ASIC reproducible build<a name="ls180_repro_build"></a>
+
+Prerequisites:
+
+* machine with debian/10 (or if you absolutely must, ubuntu)
+* minimum 32 GB RAM
+* minimum XEON processor or Intel i9 or IBM POWER9
+* enough time to complete the build in full
+* around 50 GB free space (this is more than enough)
+
+**WARNING! DO NOT TRY RUNNING CORIOLIS2 IN QEMU OR OTHER VM!**
+VLSI builds are far too CPU and memory intensive.
+
+Follow these instructions to build the ls180 GDS-II files
+
+* clone the dev-env-setup repository
+* run the coriolis2-chroot script as root
+* drop into the schroot
+* navigate to the soclayout/experiments9 directory
+* check out the final tag
+ <https://git.libre-soc.org/?p=soclayout.git;a=tag;h=refs/tags/LS180_RC8_FINAL>
+* run the ./build_full_4k_sram_recon.sh script
+* run "make view" to see the results.
+
+The FreePDK45 Chips4Makers FlexLib variant is slightly
+different, in that it builds GDS-II rather than Alliance Symbolic
+and so requires klayout to view the GDS-II. We do not yet
+ have a build script for klayout, it will be in dev-env-setup
+when it is. In the meantime you can follow instructions
+on the website <https://klayout.de/>
+
+Please check these scripts before running them.
+**This is your responsibility**. Also as explained in
+the [[HDL_workflow]] the standard OS for reproducible
+builds is debian/10. It is just about possible to use
+ubuntu to run the debootstrap chroot setup but it is
+not recommended.
+
+Commands to run:
+
+```
+$ git clone https://git.libre-soc.org/git/dev-env-setup.git
+$ cd dev-env-setup
+$ sudo bash
+# ./coriolis2-chroot
+# exit
+$ schroot -c coriolis
+$ source ~/coriolisenv
+$ cd soclayout/experiments9
+$ git checkout LS180_RC8_FINAL
+$ ./build_full_4k_sram_recon.sh
+```
+(now do something else for the next 90 minutes)
+