Newer
Older
* RadioHDL with GIT (LOFAR2.0)
* RadioHDL with SVN (APERTIF/ARTS)
* GIT workflow
* Confluence
* Polarion
* Markdown
* Vi

Eric Kooistra
committed
* Screen to run a terminal session without ssh connection
* Quartus Qsys IP files in GIT
*******************************************************************************
* 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
- 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
alias initsdp='cd $HOMEDATA/git/hdl;. ./init_hdl.sh;cd ../upe_gear;. ./init_upe.sh;cd ../sdptr;. ./init_sdptr.sh;cd ..'
> cd ~/git/hdl
- RADIOHDL_WORK directory for where the source code resides
- HDL_BUILD_DIR directory for where the targets will be build
- HDL_IOFILE_SIM_DIR=${HDL_BUILD_DIR}/sim for simulating with Modelsim using file IO
* init_hdl 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
* init_hdl.sh automatically also sources ../args/init_args.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
- HDL_BUILD_DIR = ${HDL_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
> 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 &
Questasim had Exit code 5 = "Cannot create/open/find/read/write a design library"
during tb simulation load --> fixed by "sudo chmod a+w -R modelsim_altera_libs/18.0".
# Modify QSYS
> quartus_config unb2c
> run_quartus unb2c &
- Open project
- Tools/Platform Designer
. Platform designer system choose qsys from build
- In system view:
. remove components
. add components from Uniboard library (double click avs_common_mm or use green +)
use qsys_unb2c_test_ prefix in component name ip file, but rename component without prefix
. use periperal names that match the upe_gear default name + instance scheme
double click export name to change it, none for default
. System/assign base addresses
System/assign interrupt numbers
if needed do: Sync system infos button
. copy component from Generate/Show instance template --> qsys_unb2c_test_pkg.vhd
. no need to generate HDL
- Ignore warning about avs_eth_0 IP parameterization
- File save.
> Copy qsys and ip files to the quartus dir of the mother design.
. cp build/unb2c/quartus/unb2c_test_1GbE_I/ip/qsys_unb2c_test/*.ip boards/uniboard2c/designs/unb2c_test/quartus/ip/qsys_unb2c_test/
. cp build/unb2c/quartus/unb2c_test_1GbE_I/qsys_unb2c_test.qsys boards/uniboard2c/designs/unb2c_test/quartus
lofar2 unb2c
. cp build/unb2c/quartus/lofar2_unb2c_sdp_station_full/ip/qsys_lofar2_unb2c_sdp_station/*.ip applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/ip/qsys_lofar2_unb2c_sdp_station/
. cp build/unb2c/quartus/lofar2_unb2c_sdp_station_full/qsys_lofar2_unb2c_sdp_station.qsys applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus
lofar2 unb2b
. cp build/unb2b/quartus/lofar2_unb2b_sdp_station_full_wg/ip/qsys_lofar2_unb2b_sdp_station/*.ip applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/ip/qsys_lofar2_unb2b_sdp_station/
. cp build/unb2b/quartus/lofar2_unb2b_sdp_station_full_wg/qsys_lofar2_unb2b_sdp_station.qsys applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus

Eric Kooistra
committed
> Edit the hdllib.cfg of each revision to include the new peripheral ip files
> The hdllib.cfg of each revision design will copy the qsys and ip files to each
revision build quartus dir, so all revisions use the same qsys.
# Run command line synthesis for unb2c_test revision
quartus_config unb2c

Eric Kooistra
committed
run_qsys_pro unb2c unb2c_test_1GbE_I
gen_rom_mmap.py --avalon -d unb2c_test -r unb2c_test_1GbE_I
run_reg unb2c unb2c_test_1GbE_I
run_qcomp unb2c unb2c_test_1GbE_I --clk=CLK
run_rbf unb2c unb2c_test_1GbE_I
==> All in one: build_image unb2c unb2c_test --rev=unb2c_test_1GbE_I --seed=1,2

Eric Kooistra
committed
run_qsys_pro unb2c unb2c_test_1GbE_II
gen_rom_mmap.py --avalon -d unb2c_test -r unb2c_test_1GbE_II
run_reg unb2c unb2c_test_1GbE_II
run_qcomp unb2c unb2c_test_1GbE_II --clk=CLK
run_rbf unb2c unb2c_test_1GbE_II
==> All in one: build_image unb2c unb2c_test --rev=unb2c_test_1GbE_II --seed=1,2
quartus_config unb2c
run_qsys_pro unb2c unb2c_test_ddr_16G
gen_rom_mmap.py --avalon -d unb2c_test -r unb2c_test_ddr_16G
run_reg unb2c unb2c_test_ddr_16G
run_qcomp unb2c unb2c_test_ddr_16G --clk=CLK
run_rbf unb2c unb2c_test_ddr_16G
==> All in one: build_image unb2c unb2c_test --rev=unb2c_test_ddr_16G --seed=1,2
# Run command line synthesis for dts
quartus_config unb2c

Eric Kooistra
committed
run_qsys_pro unb2c lofar2_unb2c_sdp_station_full
gen_rom_mmap.py --avalon -d lofar2_unb2c_sdp_station -r lofar2_unb2c_sdp_station_full
run_reg unb2c lofar2_unb2c_sdp_station_full
run_qcomp unb2c lofar2_unb2c_sdp_station_full --clk=CLK
run_rbf unb2c lofar2_unb2c_sdp_station_full
# Run command line synthesis for sdp-arts
quartus_config unb2b
run_qsys_pro unb2b lofar2_unb2b_sdp_station_full_wg
gen_rom_mmap.py --avalon -d lofar2_unb2b_sdp_station -r lofar2_unb2b_sdp_station_full_wg
run_reg unb2b lofar2_unb2b_sdp_station_full_wg
run_qcomp unb2b lofar2_unb2b_sdp_station_full_wg --clk=CLK
run_rbf unb2b lofar2_unb2b_sdp_station_full_wg
> quartus_config unb2b; run_qsys_pro unb2b lofar2_unb2b_sdp_station_full_wg; gen_rom_mmap.py --avalon -d lofar2_unb2b_sdp_station -r lofar2_unb2b_sdp_station_full_wg; run_reg unb2b lofar2_unb2b_sdp_station_full_wg; run_qcomp unb2b lofar2_unb2b_sdp_station_full_wg --clk=CLK; run_rbf unb2b lofar2_unb2b_sdp_station_full_wg
*******************************************************************************
*******************************************************************************
mkdir hdl_build_results/20230108
scp -rp regtest@dop349:/home/regtest/quartus_build_images_cron.log hdl_build_results/20230108/
scp -rp regtest@dop349:/home/regtest/git/hdl/build/unb2c/quartus/lofar2_unb2c_sdp_station_full hdl_build_results/20230108/
scp -rp regtest@dop349:/home/regtest/git/hdl/build/unb2b/quartus/lofar2_unb2b_sdp_station_full_wg hdl_build_results/20230108/
scp -rp regtest@dop349:/home/regtest/git/hdl/build/unb2c/quartus/disturb2_unb2b_sdp_station_full hdl_build_results/20230108/
scp -rp regtest@dop349:/home/regtest/git/hdl/build/unb2c/quartus/disturb2_unb2b_sdp_station_full_wg hdl_build_results/20230108/
cd ~/hdl_build_result
scp -rp regtest@dop349:/home/regtest/hdl_build_result/2023-01-29T01u45_lofar2_unb2c_sdp_station_full_191MHz hdl_build_result
scp -rp regtest@dop349:/home/regtest/hdl_build_result/2023-01-29T04u36_lofar2_unb2b_sdp_station_full_wg_211MHz hdl_build_result
scp -rp regtest@dop349:/home/regtest/hdl_build_result/2023-01-29T04u36_lofar2_unb2b_sdp_station_full_wg_211MHz/lofar2_unb2b_sdp_station_full_wg-e0f332504.rbf hdl_build_result
scp -rp regtest@dop349:/home/regtest/hdl_build_result/2023-02-19T04u37_lofar2_unb2b_sdp_station_full_wg_215MHz/lofar2_unb2b_sdp_station_full_wg-c17ad5759.rbf hdl_build_result
scp -rp kooistra@dop436:/home/kooistra/git/hdl/build/unb2b/quartus/lofar2_unb2b_sdp_station_full_wg ~/hdl_build_result
Synthesis neemt onegeveer 4GB voor Disturb image en 3GB voor SDP image, dus
ongeveer 14GB / weekend. De regtest machine heeft nog 500GB vrij, dus we
kunnen nog ongeveer 35x opslaan, voordat we moeten deleten.
*******************************************************************************
* Flash and reboot unb2
*******************************************************************************
# Copy rbf image to machine
scp -rp build/unb2c/quartus/unb2c_test_1GbE_I/unb2c_test_1GbE_I.rbf kooistra@dop421:/home/kooistra/git/upe_gear
scp -rp regtest@10.87.0.149:/home/regtest/hdl_build_result/2023-01-22T04u27_lofar2_unb2b_sdp_station_full_wg_212MHz/lofar2_unb2b_sdp_station_full_wg.rbf /home/kooistra/hdl_build_result
# On dop421 of dts-lab (regtest dop349 = 10.87.0.149)
scp -rp regtest@10.87.0.149:/home/regtest/hdl_build_result/2023-01-29T01u45_lofar2_unb2c_sdp_station_full_191MHz/lofar2_unb2c_sdp_station_full.rbf /home/kooistra/hdl_build_result
build/unb2c/quartus/unb2c_test_1GbE_I/unb2c_test_1GbE_I.rbf kooistra@dop421:/home/kooistra/git/upe_gear
# Flash and reboot with UPE_GEAR
util_epcs.py --unb2 0 --pn2 0:3 -v 5 -n 9 # load factory image from flash
util_epcs.py --unb2 0 --pn2 0:3 -v 5 -n 4 -s unb2c_test_1GbE_I.rbf # write rbf into flash
util_epcs.py --unb2 0 --pn2 0:3 -v 5 -n 7 -s unb2c_test_1GbE_I.rbf # write rbf into flash and verify
util_epcs.py --unb2 0 --pn2 0:3 -v 5 -n 8 # load user image from flash
util_system_info.py --unb2 0 --pn2 0:3 -v 3 -n 2
# Flash and reboot with SDPTR on DTS-lab
# RPi4 is 10.99.0.250
# port 4840 for DTS-lab
# port 4842 for sdp-arts
cd ../sdptr/
. ./init_sdptr.sh
sdp_rw.py --host 10.99.0.250 -r firmware_version
sdp_firmware.py --host 10.99.0.250 -n 0:3 --reboot --image FACT
sdp_rw.py --host 10.99.0.250 -r firmware_version
sdp_firmware.py --host 10.99.0.250 -n 0:3 --write --image USER --file ../upe_gear/unb2c_test_1GbE_I.rbf
sdp_rw.py --host 10.99.0.250 -r firmware_version
sdp_firmware.py --host 10.99.0.250 -n 0:3 --reboot --image USER
sdp_rw.py --host 10.99.0.250 -r firmware_version
sdp_rw.py --host 10.99.0.250 --port 4842 -r firmware_version
sdp_firmware.py --host 10.99.0.250 --port 4842 -n 64:79 --reboot --image FACT
sdp_rw.py --host 10.99.0.250 --port 4842 -r firmware_version
sdp_firmware.py --host 10.99.0.250 --port 4842 -n 64:79 --write --image USER --file /home/kooistra/hdl_build_result/lofar2_unb2b_sdp_station_full_wg.rbf
sdp_rw.py --host 10.99.0.250 --port 4842 -r firmware_version
sdp_firmware.py --host 10.99.0.250 --port 4842 -n 64:79 --reboot --image USER
sdp_rw.py --host 10.99.0.250 --port 4842 -r firmware_version
# MTU wijzigen
sudo ifconfig enp67s0f1 10.99.0.249 netmask 255.255.0.0 mtu 9000 up
Last SDPFW version used in 2022:
kooistra@dop386:~/git/sdptr$ sdp_rw.py --host 10.99.0.250 --port 4842 -r firmware_version
read firmware_version:
node 64: 2022-11-06T02.45.36_e6769e2e3_lofar2_unb2b_sdp_station_full_wg
*******************************************************************************
* 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
*******************************************************************************
Alternative: SystemRDL ?
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
*******************************************************************************
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
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
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
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,
*******************************************************************************
*******************************************************************************
Remote access using step:
> mystep
then:
> ping dop386.astron.nl
> ping 10.87.0.186 (= dop386)
> ping dop421.astron.nl
> ping 10.87.0.221 (= dop421)
> ssh -X kooistra@10.87.0.186 # dop386 from ASTRON
> sshdop386 # dop386 terminal, alias in .bashrc
> dop386t # dop386 terminal, alias in .bashrc
> ssh -J bastion.astron.nl kooistra@10.87.0.186 # dop386 from home
1) gitlab
Zorg er voor dat je de GIT repositories hebt op dop386 (10.87.0.186)
10 git clone https://git.astron.nl/lofar2.0/sdptr
12 git clone https://git.astron.nl/desp/hdl
13 git clone https://git.astron.nl/desp/radiohdl
14 git clone https://git.astron.nl/desp/args
15 git clone https://git.astron.nl/desp/upe_gear
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
scp ~/.gitconfig kooistra@dop386:/home/kooistra # for default git user name and user email
2) upe_gear
a) register map uitlezen: util_unb2.py --unb2 16:19 --pn2 0:3 --seq REGMAP
25 util_system_info.py --unb2 16:19 --pn2 0:3 -n 99
35 more reginfo/register_info.py
b) PPS count: util_ppsh.py --unb2 16:19 --pn2 0:3 -n 1
c) unb2b_minimal laden: util_epcs.py --unb2 16:19 --pn2 0:3 -n 9
d) cd ~/git/hdl/applications/lofar2/images
e) image uitpakken: tar -xvzf lofar2_unb2b_sdp_station_full_wg-r241070441.tar.gz
f) image flashen: util_epcs.py --unb2 16:19 --pn2 0:3 -n 4 -s ./lofar2_unb2b_sdp_station_full_wg-r241070441.rbf
g) User image laden: util_epcs.py --unb2 16:19 --pn2 0:3 -n 8
3) SDPTR RPi4:
host 10.99.0.250
port 4840 for DTS-lab
port 4842 for sdp-arts
--ip dop386 --mac dop386 for statistics destination
50 stat_stream_xst.py --host 10.99.0.250 --port 4842 -h
51 stat_stream_xst.py --host 10.99.0.250 --port 4842 --headers
52 stat_stream_xst.py --host 10.99.0.250 --port 4842 --headers --stream ON
57 stat_stream_xst.py --host 10.99.0.250 --port 4842 --setup --ip dop386 --mac dop386
43 sdp_rw.py --host 10.99.0.250 --port 4842 -l
44 sdp_rw.py --host 10.99.0.250 --port 4842 -l pps
45 sdp_rw.py --host 10.99.0.250 --port 4842 -r pps_capture_cnt
114 sdp_rw.py --host 10.99.0.250 --port 4842 -r sdp_config_first_fpga_nr
116 sdp_rw.py --host 10.99.0.250 --port 4842 -r sdp_config_nof_fpgas
92 sdp_rw.py --host 10.99.0.250 --port 4842 -w fpga_mask [True]*16
93 sdp_rw.py --host 10.99.0.250 --port 4842 -r fpga_mask
99 sdp_rw.py --host 10.99.0.250 --port 4842 -r global_node_index
80 sdp_rw.py --host 10.99.0.250 --port 4842 -r scrap
81 sdp_rw.py --host 10.99.0.250 --port 4842 -w scrap [1]*16
82 sdp_rw.py --host 10.99.0.250 --port 4842 -w scrap [1]*8192
83 sdp_rw.py --host 10.99.0.250 --port 4842 -r scrap
72 sdp_rw.py --host 10.99.0.250 --port 4842 -w processing_enable [False]*16
73 sdp_rw.py --host 10.99.0.250 --port 4842 -r processing_enable
66 vi test/py/base/statistics_stream_packet.py
58 sdp_rw.py --host 10.99.0.250 --port 4842 -r xst_offload_hdr_eth_destination_mac
59 sdp_rw.py --host 10.99.0.250 --port 4842 -r xst_offload_hdr_eth_destination_ip
64 sdp_rw.py --host 10.99.0.250 --port 4842 -r xst_integration_interval
71 sdp_rw.py --host 10.99.0.250 --port 4842 -r signal_input_bsn
> ifconfig # to find ethernet port
> sudo tcpdump -vvXXSnelfi enp5s0 port 5001 # for UDP only
> sudo tcpdump -vvXXSnelfi enp5s0 port 5001 > tcpdump.txt (> is new file, >> is append)
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
> 5001 = SST, 5003 = XST
Start tcpdump in one terminal and then the offload test in another terminal
> sudo tcpdump -vvXXSnelfi enp5s0 port 5003 > tcpdump.txt
> stat_stream_xst.py --host 10.99.0.250 --port 4842 --ip dop386 --mac dop386 --test-data --nof_crosslets 4 -vv
Stop tcpdump cntr-c
> more tcpdump.txt
Typical header values
. udp dest port = 5003 = 0x138b
. udp lenght = 2344 = 0x928
. marker = 0x58
. version = 5
. observation id = 0x00000000
. station id = 0x0000
. block period = 5120 = 0x1400, followed by 8 octetB BSN
Grep all packets for one BSN --> 576 / 144 = 4 nof_crosslets
> cat tcpdump.txt | grep '1400 0001 27a1 aa03 3599' | wc
576 5760 39168
Grep all received packets --> 8064 / 576 = 14 intervals
> cat tcpdump.txt | grep '0x0040: 1400' | wc
8064 80640 548352
Try again for nof_crosslets = 7:
cat tcpdump.txt | grep '0x0040: 1400' | wc
11843 118430 805324
5) opcua-client & # to verify sdp_rw.py
- opc.tcp://10.99.0.250:4842 RPi4 connect
- write via RW point attribute window
- right mouse subscribe/unsubsribe to data change
*******************************************************************************
* 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
*******************************************************************************
https://git.astron.nl/desp/args/-/blob/master/Markdown/readme_markdown.txt
Official guide: https://daringfireball.net/projects/markdown/syntax
https://www.markdownguide.org/basic-syntax/
*******************************************************************************
* vi
*******************************************************************************
"Replaced Windows LFCR by Linux LF to avoid ^R at end of line in vi. Removed trailing spaces."
- in gvim replace \r --> nothing

Eric Kooistra
committed
- 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'
* 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
*******************************************************************************
* Remote access using step:
*******************************************************************************
* Old way: Remote access to regression test machine dop349:
ssh -X kooistra@portal.astron.nl
# New way: Ipv via portal.astron.nl nu via bastion.astron.nl (195.169.155.27) mbv step client
# zie: https://support.astron.nl/confluence/pages/viewpage.action?spaceKey=IN&title=SSH+access+to+the+ASTRON+network
/home/kooistra/.ssh/config
/home/kooistra/.step/ssh/config
/home/kooistra/.step/ssh/known_hosts
ssh -J bastion.astron.nl kooistra@10.87.0.186 # = dop386
ssh -J bastion.astron.nl regtest@dop349.astron.nl
You won't be asked for a (bastion) password. The certificate you've just generated will last for twelve hours. Once it's elapsed, the only step from the above you need to perform again is
$ step ssh login kooistra@astron.nl --provisioner "keycloak"
alias mystep='step ssh login kooistra@astron.nl --provisioner "keycloak"'
Whereupon you'll be good for another twelve hours. The above command is a great candidate for a shell alias.
*******************************************************************************
* Regression test
*******************************************************************************
Remote access using step:
> mystep
then:
> ping dop349.astron.nl --> responses within ~20 ms
> ping 10.87.0.149 --> --> responses within ~20 ms, ip dop349 = 10.87.0.149 (was 10.87.6.144)
> ssh -X regtest@dop349.astron.nl
crontab -l # shows scheduled cron jobs
crontab -e # edit schedule
tail -n 1000 unb2b_modelsim_regression_test_vhdl_cron.log
*******************************************************************************
*******************************************************************************
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

Eric Kooistra
committed
*******************************************************************************
* Screen to run a terminal session without ssh connection
*******************************************************************************
https://linuxize.com/post/how-to-use-linux-screen/
screen --version

Eric Kooistra
committed
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

Eric Kooistra
committed
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
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

Eric Kooistra
committed
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:

Eric Kooistra
committed
~/.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

Eric Kooistra
committed
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
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

Eric Kooistra
committed
*******************************************************************************
* 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

Eric Kooistra
committed
unb2b_arp_ping geen QSYS heeft zijn ze dus ongewijzigd.
Aangezien unb2b_arp_ping geen QSYS heeft, en ook niet zou krijgen, is het

Eric Kooistra
committed
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

Eric Kooistra
committed
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
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