sync_up: Discussion, add rest of points from thread
[libreriscv.git] / HDL_workflow / coriolis2.mdwn
index 8b8ca88216bad9c747480fa92e6e43637370ddfd..6f612f76a57f3e338fd388ae418b1de0076c1741 100644 (file)
@@ -1,90 +1,84 @@
 # 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/>
@@ -119,9 +113,12 @@ Then, as the ordinary (non-root) user in the schroot:
     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`
@@ -129,10 +126,13 @@ To set up the coriolis2 environment, run this:
 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
@@ -169,23 +169,26 @@ As root, in the chroot, run the following:
 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"
 
@@ -211,7 +214,7 @@ The three exports are best added to ~/.bash_profile for later convenience
 
 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):
@@ -220,21 +223,21 @@ 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:
@@ -247,7 +250,7 @@ Then:
 
 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.
 
@@ -294,9 +297,11 @@ 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
@@ -310,12 +315,13 @@ alliace installed above by doing the following
     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=825x825 ]]
+[[!img 180nm_Oct2020/2020-07-03_11-04.png size="825x" ]]
 
 # Issues running from (e.g.) archlinux as host and debian as a chroot
 
@@ -336,3 +342,58 @@ in ~/.bash_profile if desired)
 
 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)
+