Skip to content
Snippets Groups Projects
Select Git revision
  • fadf06530e31a517c277b5f5488ce2fb432c76b4
  • master default protected
  • L2SDP-LIFT
  • L2SDP-1113
  • HPR-158
5 results

erko_howto_tools.txt

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    erko_howto_tools.txt 30.37 KiB
    * RadioHDL with GIT (LOFAR2.0)
    * RadioHDL with SVN (APERTIF/ARTS)
    * RadioHDL issues
    * ARGS
    * GIT workflow
    * SVN
    * Confluence
    * Polarion
    * Latex
    * Markdown
    * Vi
    * Remote access
    * Screen to run a terminal session without ssh connection
    * Quartus Qsys IP files in GIT
    * Quartus version
    * Linux
    * ICT diensten
    * Python
    * Zenodo DOI
    
    
    
    
    
    *******************************************************************************
    * RadioHDL with GIT
    *******************************************************************************
    
    # Setup vendor specific environment variables in .bashrc
    
      * bashrc defines root directories that contain one or more versions of tool installations
        - define MENTOR_DIR : modelsim installations
        - define ALTERA_DIR : altera installations
        - define MODELSIM_ALTERA_LIBS_DIR  : compiled modelsim simulation libraries for altera components
    
        - LM_LICENSE_FILE=<our_license@our_compagny>
    
    # Setup RadioHDL development environment for hdl/. The hdl/libraries, hdl/boards and hdl/applications are
    # developed simultaneously and therefor in one git hdl/ repository
    
    > cd ~/git/hdl
    
    > . ./init_hdl.sh
    
      * init_hdl.sh defines:
        - RADIOHDL_WORK directory for where the source code resides
        - RADIOHDL_BUILD_DIR directory for where the targets will be build
        - HDL_IOFILE_SIM_DIR=${RADIOHDL_BUILD_DIR}/sim for simulating with Modelsim using file IO
    
      * init_hdl.sh copies git user_components.ipx into Altera dir's
        - cp ${RADIOHDL_WORK}/hdl_user_components.ipx $altera_dir/ip/altera/user_components.ipx
    
      * init_hdl.sh automatically also sources ../radiohdl/init_radiohdl.sh if necessary
    
    
    source also radiohdl tools
    . ../radiohdl/init_radiohdl.sh
    
      * init_radiohdl.sh defines:
        - RADIOHDL_GEAR directory of where the init_radiohdl.sh is located
        - RADIOHDL_BUILD_DIR = ${RADIOHDL_BUILD_DIR}/build if not already defined
        - RADIOHDL_CONFIG = ${RADIOHDL_GEAR}/config if not already defined
    
      * init_radiohdl.sh extends:
        - PATH with ${RADIOHDL_GEAR}/core
                    ${RADIOHDL_GEAR}/quartus
                    ${RADIOHDL_GEAR}/modelsim
        - PYTHONPATH with ${RADIOHDL_GEAR}/core
                          ${RADIOHDL_GEAR}/components
    
    
    > compile_altera_simlibs unb1   # creates build/unb1/hdl_libraries_ip_stratixiv.txt
                                    # creates build/quartus/<tool version> simulation models that need to be moved
                                    # manually to $MODELSIM_ALTERA_LIBS_DIR/<tool version>
    
    > generate_ip_libs unb1         # creates build/unb1/qmegawiz/
                                    # creates build/unb1/quartus_sh --> empty dir, why is it there?
    
    > quartus_config unb1           # creates build/unb1/quartus/<hdllib libraries> for synthesis
                                    # creates build/unb1/quartus/technology_select_pkg.vhd
    
    > modelsim_config unb1          # creates build/unb1/modelsim/<hdllib libraries> for simulation
                                    # creates build/unb1/modelsim/modelsim_project_files.txt for Modelsim commands.do
                                    # creates build/unb1/modelsim/technology_select_pkg.vhd
    
    > run_qsys unb1 unb1_minimal_qsys   # creates QSYS block in build/unb1/quartus/unb1_minimal_qsys
    > run_qcomp unb1 unb1_minimal_qsys  # creates
    
    > run_modelsim unb1 &
    
    
    *******************************************************************************
    * RadioHDL with SVN
    *******************************************************************************
    
    echo "Uniboard trunk is selected"
    export SVN=${HOME}/svnroot/UniBoard_FP7
    #Setup RadioHDL environment for UniBoard2 and and new Uniboard1 applications
    . ${SVN}/RadioHDL/trunk/tools/setup_radiohdl.sh
    # Support old UniBoard environment (including Aarfaac and Paasar)
    . ${SVN}/RadioHDL/trunk/tools/setup_unb.sh
    
    
    *******************************************************************************
    * RadioHDL issues
    *******************************************************************************
    
    1) may 2020 PD quartus_config.py unb2b failed
    Error : Unavailable library ip_arria10_e1sg_altera_jesd204_180 at 'hdl_lib_uses_sim' key is not disclosed at 'hdl_lib_disclose_library_clause_names' key in library ['ip_arria10_fractional_pll_clk200', 'ip_arria10_fractional_pll_clk125', 'ip_arria10_e3sge3_fractional_pll_clk200', 'ip_arria10_e3sge3_fractional_pll_clk125', 'ip_arria10_e1sg_fractional_pll_clk200', 'ip_arria10_e1sg_fractional_pll_clk125', 'ip_arria10_e2sg_fractional_pll_clk200', 'ip_arria10_e2sg_fractional_pll_clk125']
    
    Temporary fix commented line 4,5 in:
    https://git.astron.nl/desp/hdl/-/blob/L2SDP-36/libraries/technology/ip_arria10_e1sg/jesd204b/hdllib.cfg
    
    
    *******************************************************************************
    * ARGS
    *******************************************************************************
    
    1) Synthesis flow
    cd ~/git/hdl
    . ./init_hdl.sh
    compile_altera_simlibs unb2b
    generate_altera_simlibs unb2b
    sudo mv $RADIOHDL_WORK/build/quartus/18.0  /home/software/modelsim_altera_libs
    
    run_qsys_pro unb2b unb2b_minimal
    
    # Overwrite rom_system_info with mmap, using -a to have base addresses from QSYS
    gen_rom_mmap.py --fpga unb2b_minimal --avalon
    run_reg unb2b unb2b_minimal
    
    run_qcomp unb2b unb2b_minimal
    run_rbf unb2b unb2b_minimal
    
    2) Create mmap
    gen_rom_mmap.py --fpga unb2b_minimal   # using ARGS base addresses
                                           # result in build/unb2b/args/unb2b_minimal/c
    
    3) Create document
    gen_doc.py --fpga unb2b_minimal  # result in build/unb2b/args/unb2b_minimal/doc/
    
    
    
    *******************************************************************************
    * GIT references
    *******************************************************************************
    
    difftool ?
    mergetool ?
    
    * Pro Git book by Scott Chacon: https://git-scm.com/book/en/v2
    * YouTube : David Mahler part 1,2,3
    
    Part 1:
    
    # After GIT install
    git version
    git config --global http://user.name "EricKooistra"
    git config --global http://user.email "erkooi@gmail.com"
    git config --list
    touch .gitignore       # create .gitignore if it does not already exist
    .gitignore # file with working tree dirs and files to ignore, must also be commited
    
    # To start a repo
    cd ~/git
    git init  # start new repo at this dir, creates .git/
    git clone # get and start with existing repo
    git clone git@git.astron.nl:desp/args.git
    git clone git@git.astron.nl:desp/sampy.git
    
    git status # what is in stage area and what is modified
    git status -uno  # skip unversioned files
    
    Three areas:
    * working tree # local directory tree
    | git add
    v
    * staging area (index)
    |
    v git commit
    * history # .git repository with entire commit graph
    
    # To use a repo
    git add <dir>/<file>       # add to stage area, set for commit. Cannot add empty dir, need empty file in it
    git add .                  # add all new and modified to stageing area
    git diff                   # diff between file in working tree and staging area
    git diff --staged          # diff between file in staging area and history
    git difftool -t meld       # GUI frontend for git diff, with --no-prompt to avoid Y/n prompt request to launch meld
    git difftool -t meld --no-prompt   # e.g. define alias gitmeld
    git rm <filename>          # remove file from working tree and stage the delete
    git checkout -- <filename> # revert a working tree change
    git reset                  # clear stage area
    git reset HEAD <filename>  # revert staged change
    git log -- <filename>      # show history of file
    git checkout <version hash> -- s2 # retrieve file from history into staged area and working tree
    
    
    Part 2:
    
    git commit -m ""           # commit what is in stage area
    git commit -a -m ""        # add to stage area and commit what is in stage area
    alias graph="git log --all --decorate --oneline --graph"
    git branch <branch name>   # creat branch
    git branch # show branches
    git checkout <branch name> # change working tree and stage area to branch
    git checkout master
    git merge <branch name> # Fast forward merge of branch name to master if there is a direct path
                            # by moving master to branch name, this is when there have been no updates
                            # on the master branch since the branch was created.
                            # Three way merge combine the differences of the branch and the master
                            # compared to their common version, this can lead to merge conflicts if
                            # changes on both branches occur at same parts of a file.
    git branch --merged # show branches that have been merged to master
    git branch -r
    git branch -a # show all local and remote branches
    
    git branch -d <branch name> # remove branch
    git checkout <commit hash> # detached HEAD because it points to a version not a branch
    git branch <branch name> # start a branch from the commit hash, HEAD is attached again
    
    # Stash area to store working tree
    git stash save "comment" # store working tree and stage area to get a clean
    git stash list # show all stashes
    git stash apply <label> # restore stash
    git stash apply # restore last stash
    
    
    Part 3: Remote repositories (Github, Gitlab, Bitbucket, ...)
    
    create repo on Github
    http://README.md # md = mark down
    git clone <url:.../<repo name>.git> # get copy from url
    cd <repo name>
    git config --local http://user.name "EricKooistra"
    git config --local http://user.email "erkooi@gmail.com"
    git remote # origin
    git remote -v # full url
    
    # To align with remote repo
    # update from remote
    git status # shows also origin/master, but not live
    git fetch origin
    git status # shows also origin/master, now with latest remote
    git merge origin/master
    git pull # get latest from remote repo, combines fetch and merge
    
    # upload to remote
    git push
    git push origin master  # put local repo to remote repo
    
    # On Github fork is a copy of the a repo in Github to get a repo on your account
    git clone <url of fork> # get copy of fork repo, will be origin
    git remote add upstream <url of original repo on Github> # will be upstream
    git fetch upstream
    git status
    # commit local change on branch
    # git push origin <branch name> # push to my fork repo on Github
    # pull request on Github
    # delete branch and fetch npstream if the pull request was accepted
    git remote remove <remote name> # remove a remote repo
    
    
    *******************************************************************************
    * GIT workflow and review process using Gitlab
    *******************************************************************************
    
    We identify two persons in this process:
    - the coder
    - the reviewer
    
    * Jira ticket defines the work to be done, e.g. L2SDP-26
    * Coder works on branch with Jira ticket number as branch name
    
        git checkout master     # start on up to date master branch
        git pull
        git branch L2SDP-26     # creat branch using Jira ticket number
        git branch              # show branches
        git checkout L2SDP-26   # change working tree and stage area to branch
    
    * Work on branch using git add, commit and push
    * Manually run regression test to test the changes (for Casacore SW the merge
      request makes github automatically issue a regression test in the cloud, for
      FW we need to run the relevant testbenches manually. It is not necessary to
      rerun the entire FW regression test, it is sufficient to only run the
      regression test for the HDL libraries that were modified and the HDL
      libraries that could be impacted by the modification)
    * Push the branch to the central repository at gitlab
    
        git push -u origin L2SDP-26   # first time to declare the branch at the remote
    
    
    * Coder does merge request to reviewer using the central Gitlab GUI
    * gitlab will warn if the branch will lead to a merge conflict, the coder then
      first has to fix the merge conflict by merging the master to the branch:
      The merge can use merging or rebasing, Ger typically uses merging. On local
      machine the coder resolves the merge conflict:
    
        git checkout master
        git pull
        git checkout L2SDP-26
        git merge master
        git status   # to see merge conflicts, edit file to solve merge conflict
        git add file
        git commit
        git push
    
    * In gitlab do merge request to reviewer
    * Reviewer reviews the code per line or in general comments in gitlab GUI,
      so reviewer does not need to pull the branch locally and also does not need
      to rerun the regression test.
    * Use 'Open in Web IDE' button in gitlab GUI to see max about 10 changes,
      use 'Changes' menu on same page to see all changes. Green is new file,
      orange is change file, + is new lines - is removed lines.
    * Coder does updates on branch until both coder and reviewer are ok, they are
      notified by gitlab
    * When review is done then the reviewer does the merge.
    * The merge automatically deletes the branch (if selected to do so in gitlab)
      locally the coder manually needs to delete the branch:
    
        git branch
        git checkout master
        git status
        git branch -d L2SDP-26
        git status
    
    * Use Jira tag in commit message to have link between GIT and Jira. The link
      was made via Settings/Intergations/Jira
    
    Note:
    * In github a merge request is called a pull request
    * Default a pull pulls the master. Typically it is not necessary to pull a
      branch because the reviewer does not need to compile and run the code and
      because typically only one coder works on a branch.
    
    We hebben nog geen regel over sub-branches wel of niet. Als er geen duidelijk voordeel is dan zou
    ik alleen vanaf de master branchen, omdat je de branches dan onafhankelijk houdt van elkaar en
    alle branches dan dezelfde referentie hebben. Voordat je een merge request van je branch naar een
    bovenliggende branch doet, moet je eerst die bovenliggende branch mergen naar je branch.
    
    
    *******************************************************************************
    * SVN:
    *******************************************************************************
    svn -diff --diff-cmd='meld' [filepath] -r [revision]
    
    
    *******************************************************************************
    * Confluence:
    *******************************************************************************
    - space tools menu links onder om secties the ordenen.
    - space tools menu, content tools, custom export to PDF --> to export multiple
      pages to PDF and to preserve th ASTRON logo in the export
    
    I notice that in a Confluence document from Gijs that if I try to do a comment
    on a text that contains capital charcters it fails, and if I try to place the
    comment on text with only small characters it accepts the comment. Strange,
    but for me it is an ok workaround.
    
    
    Sometimes in a Confluence document in edit mode all Figures have collapsed into
    small narrow icons. I can recover them by selecting the Figure icon and then
    choosing the expand button  in the bar on top or below the Figure. Weird, but
    for me it is an ok workaround,
    
    *******************************************************************************
    * Polarion:
    *******************************************************************************
    
    
    *******************************************************************************
    * LaTeX
    *******************************************************************************
    - \sigma \sqrt{}
    - 4.15 \cdot 10^{15}
    - M =
        \left[ {begin{array}{cc}
        1 & 2 & 3 & 4\\
        5 & 6 & 7 & 8\\
        \end{array} } \right]
    
    
    
    *******************************************************************************
    * Markdown
    *******************************************************************************
    
    See https://git.astron.nl/desp/args/Markdown/readme_markdown.txt
    
    
    *******************************************************************************
    * vi
    *******************************************************************************
    
    "Replaced Windows LFCR by Linux LF to avoid ^R at end of line in vi. Removed trailing spaces."
    - in gvim replace \r --> nothing
    - in uex save new file as Linux, save as, menu edit/preferences/line end
    
    :w save
    :w .... save as
    :wq save+quit
    :q! quit without save
    x delete character
    dd delete line
    i insert text
    escape
    /....  search
    n next
    
             k
    bcksp    |
       h <--- ---> l
             |
             j
    
    
    *******************************************************************************
    * Remote access
    *******************************************************************************
    
    * RDP:
      Instead of Remote Desktop (RDP) use Remmina. It may be necessary to use:
    
      > ssh -t -L 5900:localhost:5900 -C dop466 'x11vnc -localhost -display :0'
    
      en daarna:
    
      > remmina &
    
      Note: Windows NTSERVER65 has IP: 10.87.3.165
    
    * Login using ssh keys:
    
    https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server
    
    * For ssh access from home without manual hop via the kooistra@portal.astron.nl, put this in $HOME/.ssh/config:
    
    Host *
        #User kooistra
        ServerAliveInterval 60
        ServerAliveCountMax 30
        TCPKeepAlive yes
        ForwardAgent yes
        ForwardX11 yes
        ForwardX11Trusted yes
        Port 22
        Protocol 2
        Compression yes
    Host astron
        User kooistra
        HostName portal.astron.nl
    Host dop386
        User kooistra
        ProxyCommand ssh -q -A astron netcat 10.87.0.228 22
    Host dop428
        User hiemstra
        ProxyCommand ssh -q -A astron netcat 10.87.0.228 22
    Host dop421
        User hiemstra
        ProxyCommand ssh -q -A astron netcat 10.87.0.221 22
    Host dop36
        User hiemstra
        ProxyCommand ssh -q -A astron netcat 10.87.2.36 22
    Host dop421
        User hiemstra
        ProxyCommand ssh -q -A astron netcat 10.87.0.221
    
    *******************************************************************************
    * License server
    *******************************************************************************
    
    export LM_LICENSE_FILE=1800@license4.astron.nl:1717@license5.astron.nl
    
    ping 10.87.3.179  # = ping license4.astron.nl
    ping 10.87.3.114  # = ping license5.astron.nl
    
    
    *******************************************************************************
    * Screen to run a terminal session without ssh connection
    *******************************************************************************
    
    https://linuxize.com/post/how-to-use-linux-screen/
    
    screen --version
    
    Basic Linux Screen Usage
    
    On the command prompt, type screen.
    Run the desired program.
    Use the key sequence Ctrl-a + Ctrl-d to detach from the screen session.
    Reattach to the screen session by typing screen -r.
    
    
    To start a screen session, simply type screen in your console:
    
    screen
    screen -S session_name
    
    This will open a screen session, create a new window, and start a shell in
    that window. Now that you have opened a screen session, you can get a list of
    commands by typing:
    
    Ctrl+a ?
    
    When you start a new screen session, it creates a single window with a shell
    in it. You can have multiple windows inside a Screen session.
    To create a new window with shell type Ctrl+a c, the first available number
    from the range 0...9 will be assigned to it. Below are some most common
    commands for managing Linux Screen Windows:
    
    Ctrl+a c Create a new window (with shell)
    Ctrl+a " List all window
    Ctrl+a 0 Switch to window 0 (by number )
    Ctrl+a A Rename the current window
    Ctrl+a S Split current region horizontally into two regions
    Ctrl+a | Split current region vertically into two regions
    Ctrl+a tab Switch the input focus to the next region
    Ctrl+a Ctrl+a Toggle between the current and previous region
    Ctrl+a Q Close all regions but the current one
    Ctrl+a X Close the current region
    
    You can detach from the screen session at any time by typing:
    
    Ctrl+a d
    
    The program running in the screen session will continue to run after you detach
    from the session. To resume your screen session use the following command:
    
    screen -r
    
    In case you have multiple screen sessions running on your machine, you will
    need to append the screen session ID after the r switch.
    To find the session ID list the current running screen sessions with:
    
    screen -ls
    
    There are screens on:
        10835.pts-0.linuxize-desktop   (Detached)
        10366.pts-0.linuxize-desktop   (Detached)
    2 Sockets in /run/screens/S-linuxize.
    
    If you want to restore screen 10835.pts-0, then type the following command:
    
    screen -r 10835
    
    When screen is started, it reads its configuration parameters from
    /etc/screenrc and ~/.screenrc if the file is present. We can modify the default
    Screen settings according to our preferences using the .screenrc file.
    Here is a sample ~/.screenrc configuration with customized status line and few
     additional options:
    
    ~/.screenrc
    # Turn off the welcome message
    startup_message off
    
    # Disable visual bell
    vbell off
    
    # Set scrollback buffer to 10000
    defscrollback 10000
    
    # Customize the status line
    hardstatus alwayslastline
    hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
    Copy
    
    * uex in screen lijkt eerst niet op te starten,
      matlab wel dus het ligt niet aan GUI, daarna lukts uex wel.
    * :kooistra@dop386:~/git/hdl>  --> in gewone terminal
    * ::kooistra@dop386:~/git/hdl> --> in screen terminal
    
    *******************************************************************************
    * Quartus Qsys IP files in GIT
    *******************************************************************************
    
    1) Designs without QSYS: unb2b_arp_ping
    Met meld blijkt dat de ip dir van unb2b_arp_ping en unb2b_minimal gelijk zijn
    in de STAT-266 branch. Dat komt omdat je ze gecopieerd hebt en omdat
    unb2b_arp_ping geen QSYS heeft zijn ze dus ongewijzigd.
    
    Aangezien unb2b_arp_ping geen QSYS heeft, en ook niet zou krijgen, is het
    beter om de unb2b_arp_ping/quartus/ip dir van unb2_arp_ping te deleten.
    
    2) Designs with QSYS
    Elk design op basis van unb2_minimal heeft zijn eigen QSYS ip files:
    
    > ls $RADIOHDL_WORK/boards/uniboard2b/designs/unb2b_minimal/quartus/ip/qsys_unb2b_minimal
    
    Als een design meer MM ports heeft dan heeft het ook meer ip files, bijv.
    qsys_unb2b_heater_reg_heater.ip voor de unb2b_heater.
    
    Het is kennelijk voor QSYS nodig om naast de .qsys file ook de ip/ files in de
    repository te bewaren. Het is dus ook nodig om ze per design te bewaren, want
    elk design heeft zijn eigen naam en extra MM slaves tov unb2b_minimal.
    
    Echter het blijkt dat een nieuw design ook dezelfde ip/ files als unb2_minimal
    mag gebruiken, dus zonder naamswijziging.
    
    ll $RADIOHDL_WORK/boards/uniboard2b/designs/unb2b_jesd/quartus/
      ip/
      qsys_unb2b_jesd.qsys
    
    ll $RADIOHDL_WORK/boards/uniboard2b/designs/unb2b_jesd/quartus/ip/qsys_unb2b_minimal
    total 2492
    -rw-r--r-- 1 kooistra users 234095 Sep 23 13:01 altjesd_ss_RX_corepll.ip
    -rw-r--r-- 1 kooistra users  16145 Sep 23 13:01 altjesd_ss_RX_frame_reset.ip
    -rw-r--r-- 1 kooistra users  16139 Sep 23 13:01 altjesd_ss_RX_link_reset.ip
    -rw-r--r-- 1 kooistra users 104258 Sep 23 13:01 altjesd_ss_RX_reset_seq.ip
    -rw-r--r-- 1 kooistra users  42930 Sep 23 13:01 altjesd_ss_RX_xcvr_reset_control.ip
    -rw-r--r-- 1 kooistra users  21228 Sep 23 13:01 device_clk.ip
    -rw-r--r-- 1 kooistra users  21226 Sep 23 13:01 frame_clk.ip
    -rw-r--r-- 1 kooistra users 159233 Sep 23 13:01 jesd.ip
    -rw-r--r-- 1 kooistra users  21347 Sep 23 13:01 link_clk.ip
    -rw-r--r-- 1 kooistra users  62203 Sep 23 13:01 qsys_unb2b_minimal_avs_common_mm_0.ip
    -rw-r--r-- 1 kooistra users  62217 Sep 23 13:01 qsys_unb2b_minimal_avs_common_mm_1.ip
    -rw-r--r-- 1 kooistra users 162287 Sep 23 13:01 qsys_unb2b_minimal_avs_eth_0.ip
    -rw-r--r-- 1 kooistra users  21256 Sep 23 13:01 qsys_unb2b_minimal_clk_0.ip
    -rw-r--r-- 1 kooistra users 189801 Sep 23 13:01 qsys_unb2b_minimal_cpu_0.ip
    -rw-r--r-- 1 kooistra users 211623 Sep 23 13:01 qsys_unb2b_minimal_jesd204.ip
    -rw-r--r-- 1 kooistra users  57037 Sep 23 13:01 qsys_unb2b_minimal_jtag_uart_0.ip
    -rw-r--r-- 1 kooistra users  66156 Sep 23 13:01 qsys_unb2b_minimal_onchip_memory2_0.ip
    -rw-r--r-- 1 kooistra users  61818 Sep 23 13:01 qsys_unb2b_minimal_pio_pps.ip
    -rw-r--r-- 1 kooistra users  62201 Sep 23 13:01 qsys_unb2b_minimal_pio_system_info.ip
    -rw-r--r-- 1 kooistra users  60152 Sep 23 13:01 qsys_unb2b_minimal_pio_wdi.ip
    -rw-r--r-- 1 kooistra users  61896 Sep 23 13:01 qsys_unb2b_minimal_reg_dpmm_ctrl.ip
    -rw-r--r-- 1 kooistra users  61896 Sep 23 13:01 qsys_unb2b_minimal_reg_dpmm_data.ip
    -rw-r--r-- 1 kooistra users  62108 Sep 23 13:01 qsys_unb2b_minimal_reg_epcs.ip
    -rw-r--r-- 1 kooistra users  62238 Sep 23 13:01 qsys_unb2b_minimal_reg_fpga_temp_sens.ip
    -rw-r--r-- 1 kooistra users  62277 Sep 23 13:01 qsys_unb2b_minimal_reg_fpga_voltage_sens.ip
    -rw-r--r-- 1 kooistra users  61896 Sep 23 13:01 qsys_unb2b_minimal_reg_mmdp_ctrl.ip
    -rw-r--r-- 1 kooistra users  61896 Sep 23 13:01 qsys_unb2b_minimal_reg_mmdp_data.ip
    -rw-r--r-- 1 kooistra users  62108 Sep 23 13:01 qsys_unb2b_minimal_reg_remu.ip
    -rw-r--r-- 1 kooistra users  62176 Sep 23 13:01 qsys_unb2b_minimal_reg_unb_pmbus.ip
    -rw-r--r-- 1 kooistra users  62163 Sep 23 13:01 qsys_unb2b_minimal_reg_unb_sens.ip
    -rw-r--r-- 1 kooistra users  61818 Sep 23 13:01 qsys_unb2b_minimal_reg_wdi.ip
    -rw-r--r-- 1 kooistra users  62209 Sep 23 13:01 qsys_unb2b_minimal_rom_system_info.ip
    -rw-r--r-- 1 kooistra users  63384 Sep 23 13:01 qsys_unb2b_minimal_timer_0.ip
    
    
    *******************************************************************************
    * Quartus version
    *******************************************************************************
    
    Quartus version meeting minutes 13 may 2020 (RW, LH JH, EK):
    
    1) UniBoard2b IP is created using Quartus 18.0, same as used for ARTS SC3.
    
    2) UniBoard2b synthesis is done with Q18.0 or newer. In case of a newer Quartus version we rely on Quartus to upgrade the Q18.0 IP for synthesis which works fine sofar. We also rely on that the Q18.0 models are still sufficiently correct.
    
    2a) Jonathan uses Q19.4, because Q18.0 does not work remotely via ssh.
    2b) Reinier uses Q19.2, because that is the latest version that support OpenCL without microprocesor.
    
    3) UniBoard2c IP was created using Q19.4 by Jonathan, but we need to reconsider going to the latest Quartus version and recreate the IP, when we continue with the pinning and test designs for UniBoard2c
    
    
    *******************************************************************************
    * Linux
    *******************************************************************************
    
    https://regexr.com/
    
    https://linuxize.com/
    
    > passwd
    
    # Linux update via
    # - system updates available icon and notifications icon in toolbar
    # - of via command line:
    > uname -a # linux info
    > sudo -s  # become root
    > apt-get upgrade
    > apt-get dist-upgrade
    > apt autoremove
    
    # Henk Vosmeier
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    sudo apt remove
    
    # Login on dop386 and then power off:
    > sudo shutdown
    
    dop466 = SSD
    dop466_0 = HDD
    
    > tar -cvf filename.tar dir_name/   # create tar
    > tar -xvf filename.tar             # extract tar
    > gzip filename        # zip file
    > unzip filename.gz    # unzip file
    
    > zip -r apertif_matlab-v1.0.zip apertif_matlab
    > zipinfo apertif_matlab-v1.0.zip
    
    > grep -rl 'search text in files' .  # -r for recursive, -l for only list filename
    > find . -name *_thisfile.txt
    
    > scp kooistra@dop386:/home/kooistra/x.txt .
    
    Start --> Administration --> Synaptic package manager
    
    > sudo -s   # to become root
    > sudo pip install numpy      # to run Python2 library installer as root
    > sudo pip3 install numpy     # to run Python3 library installer as root
    
    > sudo apt-get install python3-tk # worked, now I can do: python3 test_plot.py
    
    > sudo apt-get install pip    # to install Python2 library installer
    > sudo apt-get install python-matplotlib
    
    # ARGS doc gen
    > sudo pip3 install --upgrade setuptools
    > sudo pip3 install --upgrade pyyaml
    
    > sudo pip3 install pylatex
    
    > sudo apt-get update -y
    > sudo apt-get install -y latexmk
    
    > sudo apt-get install texlive-latex-base
    > sudo apt-get install texlive-fonts-recommended
    > sudo apt-get install texlive-fonts-extra
    > sudo apt-get install texlive-latex-extra
    
    > sudo apt-get install lmodern # want log gaf aan dat lmodern.sty miste, nu wel pdf gegenereerd
    
    # Markdown
    > sudo pip3 install markdown  # zit al in Python3, maar kan alleen md --> html
    > sudo pip3 install mdutils   # https://pypi.org/project/mdutils/ # kan md genereren
    
    
    # Ethernet
    > ifconfig
    
    # primary group
    # supplementary groups
    
    groups kooistra           # lists in which Linux groups I am a member of
    id kooistra               # lists in which Linux groups I am a member of
    getent group sudo         # lists which users are in the sudo Linux group
    more /etc/group
    sudo groupadd software                 # add new Linux group 'software'
    sudo usermod -a -G software kooistra   # add user 'kooistra' to a Linux group 'software'
    
    ls -l filename                  # shows current user,group owners of the 'filename'
    sudo chgrp software filename    # change group of 'filename' to 'software'
    sudo chgrp -R software dirname  # recursively change group of 'dirname' to 'software'
    
    sudo chown user_name file_name  # change user,group
    
    *******************************************************************************
    * ICT diensten
    *******************************************************************************
    
    Self Service Password Reset
    
    Met Self Service Password Reset (SSPR) is het mogelijk voor gebruikers om zelf hun wachtwoord
    opnieuw instellen voor diverse ldap-diensten zonder tussenkomst van ict, zoals bijvoorbeeld de
    netwerkschijven (H en I), intranet, vpn, Confluence, Jira en Surfmarkt.
    Door middel van uitdagingsvragen kan een gebruiker bevestigen wie hij/zij is voordat ze hun
    wachtwoorden veilig kunnen resetten.
    Link: https://sspr.astron.nl
    
    SURFfilesender
    SURFfilesender is een webgebaseerde applicatie waarmee geauthenticeerde gebruikers veilig en
    gemakkelijk willekeurig grote bestanden naar andere gebruikers kunnen verzenden. Gebruikers zonder
    een account kunnen een gastvoucher worden gestuurd door een geverifieerde gebruiker. SURFfilesender
    is ontwikkeld volgens de eisen en wensen van onderwijs en onderzoek.
    Link: https://filesender.surf.nl
    
    edu.nl: privacy-vriendelijke URL-shortener
    edu.nl is dé URL-shortener voor onderwijs en onderzoek. Veilig omdat gebruikers inloggen met
    SURFconext. Privacy-vriendelijk omdat edu.nl geen persoonlijke gegevens van gebruikers opslaat en
    bezoekers van links niet trackt. edu.nl is kosteloos voor alle bij SURF aangesloten instellingen.
    Link: https://filesender.surf.nl
    
    Een uitgebreide beschrijving van deze diensten (Home » Diensten » ICT » Manuals and Documents)
    is te vinden op het intranet
    https://intranet.astron.nl/diensten/ict/manuals-and-documents/manuals-and-documents
    
    
    *******************************************************************************
    * Python
    *******************************************************************************
    
    pycharm
    https://pypi.org/project/black/ # Python code formatter
    
    numpy tutorial:
    https://lwn.net/SubscriberLink/847039/3016fa7278000b77/
    
    
    *******************************************************************************
    * Zenodo DOI
    *******************************************************************************
    
    - login at https://zenodo.org/
    - choose Upload in main menu --> my zenodo DOIs area
    - choose New Upload button
    - fill in all fields, reserve a DOI and do save
    - check the README.md, NOTICE.md (with the DOI) and the LICENSE.md
    - create the zip file
    - upload the zip file and publish the DOI.