Commit 6432fc55 authored by Dimitris Lampridis's avatar Dimitris Lampridis

ci: use common EDL CI pipelines

Also cleanup and improve pytests

Make hdl synthesis optional (see #29)
parent 3c155c58
......@@ -11,7 +11,58 @@ include:
- project: 'be-cem-edl/evergreen/gitlab-ci'
ref: master
file: 'edl-gitlab-ci.yml'
- local: 'software/.gitlab-ci.yml'
- local: 'hdl/testbench/.gitlab-ci.yml'
- local: 'hdl/syn/.gitlab-ci.yml'
- local: 'pytest/.gitlab-ci.yml'
fpga_synthesis:
extends: .synthesis-ise-14-7
allow_failure: true
needs: ["firmware_deliver"]
interruptible: true
parallel:
matrix:
- EDL_CI_SYN_SRC_PATH:
- hdl/syn/wrtd_ref_spec150t_adc
- hdl/syn/wrtd_ref_svec_adc_x2
- hdl/syn/wrtd_ref_svec_tdc_x2
- hdl/syn/wrtd_ref_svec_fd_x2
- hdl/syn/wrtd_ref_svec_tdc_fd
software_build:
extends: .build_fec_os_sw
variables:
EDL_CI_SW_PATHS: software
sim_fw_build:
extends: .build_urv_fw
needs: []
variables:
EXTRA2_CFLAGS: -DSIMULATION
script:
- make -C software/firmware
artifacts:
paths:
- software/firmware/**/*.bram
firmware_build:
extends: .build_urv_fw
needs: []
variables:
EDL_CI_FW_PATHS: software/firmware
# firmware needs to be in a specific location for our FPGA designs to be able to find it
firmware_deliver:
stage: build
needs: ["firmware_build"]
variables:
_FW_ARTIFACT_PATH: '$CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR/firmware'
_FW_ARTIFACT: '$CI_PROJECT_NAME-firmware${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz'
_FW_PROGRAMS: 'adc adc-x2 tdc tdc-x2 fd fd-x2'
script:
- export TMP_DIR=$(mktemp -d)
- tar xvf $_FW_ARTIFACT_PATH/$_FW_ARTIFACT -C $TMP_DIR/ --wildcards "*.bram" --strip-components 3
- for fw in $_FW_PROGRAMS; do mv $TMP_DIR/wrtd-rt-$fw.bram software/firmware/$fw/; done
- rm -r $TMP_DIR
artifacts:
paths:
- software/firmware/*/*.bram
Subproject commit 1f399c96dafafbe124540266b4b155d051c42dec
Subproject commit a9b8030df55c174aabc72c4d6ff44224a09430fa
# SPDX-FileCopyrightText: 2022 CERN (home.cern)
#
# SPDX-License-Identifier: LGPL-2.1-or-later
fpga_synthesis:
interruptible: true
stage: build
needs: []
tags:
- xilinx_ise
- "14.7"
variables:
_BITSTREAM_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR/bitstreams
parallel:
matrix:
- SYN_NAME:
- wrtd_ref_svec_adc_x2
- wrtd_ref_svec_fd_x2
- wrtd_ref_svec_tdc_x2
- wrtd_ref_spec150t_adc
- wrtd_ref_svec_tdc_fd
before_script:
- export TMP_DIR=$(mktemp -d)
- export PAK=https://ohwr-packages.web.cern.ch/ohwr-packages/riscv_toolchains/riscv-centos7.tar.xz
- curl $PAK | tar xJ -C $TMP_DIR
- export CROSS_COMPILE_TARGET=$TMP_DIR/riscv/bin/riscv32-elf-
- git submodule init && git submodule update
script:
- cd hdl/syn/"$SYN_NAME"/
- hdlmake
- make
- tar -cJf $SYN_NAME.tar.xz *.syr *.bld *.map *.mrp *.par *.twr *.bit *.bin
- mkdir -p $_BITSTREAM_DEST
- cp $SYN_NAME.tar.xz $_BITSTREAM_DEST
- |
if [[ $(cat *.par | grep -c "All constraints were met") = 0 ]]
then
echo -e "\e[31mTiming errors detected in PAR report. Aborting...\e[0m"
exit 1
fi
artifacts:
name: "$SYN_NAME-synthesis-$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
when: always
paths:
- $_BITSTREAM_DEST/*
......@@ -30,7 +30,8 @@ modules = {
],
}
syn_pre_project_cmd = "make -C ../../../software/firmware/adc"
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
# syn_pre_project_cmd = "make -C ../../../software/firmware/adc"
# Do not fail during hdlmake fetch
try:
......
......@@ -35,7 +35,8 @@ modules = {
],
}
syn_pre_project_cmd = "make -C ../../../software/firmware/adc-x2"
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
# syn_pre_project_cmd = "make -C ../../../software/firmware/adc-x2"
# Do not fail during hdlmake fetch
try:
......
......@@ -39,7 +39,8 @@ modules = {
],
}
syn_pre_project_cmd = "make -C ../../../software/firmware/fd-x2"
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
#syn_pre_project_cmd = "make -C ../../../software/firmware/fd-x2"
# Do not fail during hdlmake fetch
try:
......
......@@ -35,10 +35,11 @@ modules = {
],
}
syn_pre_project_cmd = (
"make -C ../../../software/firmware/tdc;"
"make -C ../../../software/firmware/fd"
)
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
# syn_pre_project_cmd = (
# "make -C ../../../software/firmware/tdc;"
# "make -C ../../../software/firmware/fd"
#)
# Do not fail during hdlmake fetch
try:
......
......@@ -39,7 +39,8 @@ modules = {
],
}
syn_pre_project_cmd = "make -C ../../../software/firmware/tdc-x2"
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
# syn_pre_project_cmd = "make -C ../../../software/firmware/tdc-x2"
# Do not fail during hdlmake fetch
try:
......
......@@ -6,7 +6,7 @@ hdl_simulation:
interruptible: true
stage: build
when: manual
needs: []
needs: [sim_fw_build]
tags:
- questasim
- "10.5c"
......@@ -17,9 +17,6 @@ hdl_simulation:
- wrtd_ref_svec_tdc_fd
before_script:
- export TMP_DIR=$(mktemp -d)
- export PAK=https://ohwr-packages.web.cern.ch/ohwr-packages/riscv_toolchains/riscv-centos7.tar.xz
- curl $PAK | tar xJ -C $TMP_DIR
- export CROSS_COMPILE_TARGET=$TMP_DIR/riscv/bin/riscv32-elf-
- git submodule init && git submodule update
script:
- cd hdl/testbench/"$SIM_NAME"/
......
......@@ -16,7 +16,8 @@ vcom_opt = "-93 -mixedsvvh"
if locals().get('fetchto', None) is None:
fetchto = "../../../dependencies"
sim_pre_cmd = "EXTRA2_CFLAGS='-DSIMULATION' make -C ../../../software/firmware/adc"
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
#sim_pre_cmd = "EXTRA2_CFLAGS='-DSIMULATION' make -C ../../../software/firmware/adc"
include_dirs = [
fetchto + "/wrtd/hdl/testbench/include",
......
......@@ -21,11 +21,12 @@ if locals().get('fetchto', None) is None:
import os
fetchto = os.path.abspath(fetchto)
sim_pre_cmd = (
"export EXTRA2_CFLAGS='-DSIMULATION';"
"make -C ../../../software/firmware/tdc;"
"make -C ../../../software/firmware/fd"
)
# Now done via CI, otherwise it must be done manually using a RISC-V cross-compiler
#sim_pre_cmd = (
# "export EXTRA2_CFLAGS='-DSIMULATION';"
# "make -C ../../../software/firmware/tdc;"
# "make -C ../../../software/firmware/fd"
#)
include_dirs = [
fetchto + "/wrtd/hdl/testbench/include",
......
......@@ -2,13 +2,22 @@
#
# SPDX-License-Identifier: LGPL-2.1-or-later
.module_cleanup: &module_cleanup
- rmmod wrtd_ref_svec_adc_x2 || true
- rmmod wrtd_ref_svec_tdc_x2 || true
- rmmod wrtd_ref_svec_fd_x2 || true
- rmmod mockturtle || true
- rmmod fmc-adc-100m14b4ch || true
- rmmod svec-fmc-carrier || true
Full test on FEC:
stage: validate
allow_failure: true
needs:
- "fpga_synthesis: [wrtd_ref_svec_adc_x2]"
- "fpga_synthesis: [wrtd_ref_svec_fd_x2]"
- "fpga_synthesis: [wrtd_ref_svec_tdc_x2]"
- "build software"
- "fpga_synthesis: [hdl/syn/wrtd_ref_svec_adc_x2]"
- "fpga_synthesis: [hdl/syn/wrtd_ref_svec_fd_x2]"
- "fpga_synthesis: [hdl/syn/wrtd_ref_svec_tdc_x2]"
- "software_build: [production]"
tags:
- fec-runner
- wrtd-ci-tester
......@@ -17,41 +26,70 @@ Full test on FEC:
ADC_PID: "57544e05"
TDC_PID: "57544e03"
FD_PID: "57544e04"
_BITSTREAM_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR/bitstreams
script:
- rmmod wrtd_ref_svec_adc_x2 || true
- rmmod wrtd_ref_svec_tdc_x2 || true
- rmmod wrtd_ref_svec_fd_x2 || true
_BASE_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR
_BITSTREAM_DEST: $_BASE_DEST/bitstreams
_SW_ARTIFACT_PATH: $_BASE_DEST/software
_SW_ARTIFACT: '$CI_PROJECT_NAME-software-production${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz'
_DEPLOY: /acc/local/L867/drv
_VER_ADCLIB: "4.0"
_VER_WRTD: "1.1"
_LIB_ADCLIB: $_DEPLOY/adc-lib/$_VER_ADCLIB/lib
_LIB_WRTD: $_DEPLOY/wrtd/$_VER_WRTD/lib
_BIN_WRTD: $_DEPLOY/wrtd/$_VER_WRTD/bin
_PY_WRTD: $_LIB_WRTD/python/site-packages
before_script:
- *module_cleanup
- export TMP_DIR=$(mktemp -d)
- mkdir -p $TMP_DIR/lib/modules
- cp -r /usr/local/lib/modules/$(uname -r) $TMP_DIR/lib/modules
- cp software/drivers/*.ko $TMP_DIR/lib/modules/$(uname -r)/extra/cern/
- export MODPROBE_ROOT=$TMP_DIR
- mkdir -p $TMP_DIR/usr/lib/modules
- cp -r /usr/local/lib/modules/$(uname -r) $TMP_DIR/usr/lib/modules
- find $TMP_DIR/usr/lib/modules -name wrtd-ref-*.ko -delete
- tar xvf $_SW_ARTIFACT_PATH/$_SW_ARTIFACT -C $TMP_DIR/
- export MODPROBE_ROOT=$TMP_DIR/usr
- depmod -b $MODPROBE_ROOT
- modprobe -d $MODPROBE_ROOT -v mockturtle
- modprobe -d $MODPROBE_ROOT -v htvic
- modprobe -d $MODPROBE_ROOT -v i2c-ocores
- modprobe -d $MODPROBE_ROOT -v i2c-mux
- modprobe -d $MODPROBE_ROOT -v zio
- modprobe -d $MODPROBE_ROOT -v zio-buf-vmalloc
- modprobe -d $MODPROBE_ROOT -v fmc-adc-100m14b4ch version_ignore=1
- modprobe -v at24
- export FIRMWARE_PATH=$TMP_DIR/bitstreams
- mkdir -p $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_adc_x2.tar.xz -C $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_fd_x2.tar.xz -C $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_tdc_x2.tar.xz -C $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_adc_x2${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_fd_x2${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/wrtd_ref_svec_tdc_x2${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $FIRMWARE_PATH
- ln -sf $FIRMWARE_PATH/wrtd_ref_svec_adc_x2.bin $FIRMWARE_PATH/svec-wrtd-ref-adc-x2.bin
- ln -sf $FIRMWARE_PATH/wrtd_ref_svec_fd_x2.bin $FIRMWARE_PATH/svec-wrtd-ref-fd-x2.bin
- ln -sf $FIRMWARE_PATH/wrtd_ref_svec_tdc_x2.bin $FIRMWARE_PATH/svec-wrtd-ref-tdc-x2.bin
- /usr/local/drivers/scripts/wrtd_install.sh wrtd-svec-adc-x2 -L2
- /usr/local/drivers/scripts/wrtd_install.sh wrtd-svec-fd-x2 -L1
- /usr/local/drivers/scripts/wrtd_install.sh wrtd-svec-tdc-x2 -L0
- source /acc/local/share/python/acc-py/base/pro/setup.sh
- acc-py venv $TMP_DIR/venv
- source $TMP_DIR/venv/bin/activate
- pip install -r pytest/requirements.txt
- pip install $_LIB_ADCLIB/python/PyAdcLib-*.whl
- export LD_LIBRARY_PATH=$_LIB_ADCLIB:$_LIB_WRTD
- export PYTHONPATH=$_PY_ADCLIB:$_PY_WRTD
script:
- tail -n +1 /sys/kernel/debug/svec-vme.*/fpga_device_metadata
- tail -n +1 /sys/kernel/debug/svec-vme.*/svec-vme.*-fpga/build_info
- /usr/local/bin/wrtd-tool list-nodes
- $_BIN_WRTD/wrtd-tool list-nodes
- export ADC_NODE=$(ls -d /sys/bus/platform/devices/id\:$CERN_VID$ADC_PID.*/mock-turtle.* | cut -d '.' -f 4)
- export TDC_NODE=$(ls -d /sys/bus/platform/devices/id\:$CERN_VID$TDC_PID.*/mock-turtle.* | cut -d '.' -f 4)
- export FD_NODE=$(ls -d /sys/bus/platform/devices/id\:$CERN_VID$FD_PID.*/mock-turtle.* | cut -d '.' -f 4)
- export ADC_ID1=$(ls -d /sys/bus/platform/devices/id\:$CERN_VID$ADC_PID.*/fmc-adc-100m.*.auto/fmc-slot-*.1 | cut -d '.' -f 4)
- export ADC_ID2=$(ls -d /sys/bus/platform/devices/id\:$CERN_VID$ADC_PID.*/fmc-adc-100m.*.auto/fmc-slot-*.2 | cut -d '.' -f 4)
- env | grep -E "ADC|TDC|FD"
- sleep 60
- /usr/local/bin/wrtd-tool sys-info $ADC_NODE
- /usr/local/bin/wrtd-tool sys-info $TDC_NODE
- /usr/local/bin/wrtd-tool sys-info $FD_NODE
- export LD_LIBRARY_PATH=/user/dlamprid/wrtd/lib
- $_BIN_WRTD/wrtd-tool sys-info $ADC_NODE
- $_BIN_WRTD/wrtd-tool sys-info $TDC_NODE
- $_BIN_WRTD/wrtd-tool sys-info $FD_NODE
- cd pytest
- /user/dlamprid/wrtd/pytest_venv/bin/python -m pytest --adc-node $ADC_NODE --tdc-node $TDC_NODE --fd-node $FD_NODE --fmc-adc-id1 4 --fmc-adc-id2 5 --junitxml=./pytest.xml
- python3 -m pytest --adc-node $ADC_NODE --tdc-node $TDC_NODE --fd-node $FD_NODE --fmc-adc-id1 $ADC_ID1 --fmc-adc-id2 $ADC_ID2 --junitxml=./pytest.xml
after_script:
- *module_cleanup
artifacts:
when: always
paths:
......
......@@ -3,3 +3,4 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
pytest
decorator
......@@ -11,10 +11,10 @@ def pytest_addoption(parser):
help="WRTD node ID for the TDC board")
parser.addoption("--fd-node", required=True, type=int,
help="WRTD node ID for the FD board")
parser.addoption("--fmc-adc-id1", required=True, type=lambda x : int(x, 16),
help="FMC-ADC ID (in hex) for the ADC in FMC slot 1")
parser.addoption("--fmc-adc-id2", required=True, type=lambda x : int(x, 16),
help="FMC-ADC ID (in hex) for the ADC in FMC slot 2")
parser.addoption("--fmc-adc-id1", required=True, type=int,
help="FMC-ADC ID for the ADC in FMC slot 1")
parser.addoption("--fmc-adc-id2", required=True, type=int,
help="FMC-ADC ID for the ADC in FMC slot 2")
def pytest_configure(config):
pytest.adc_node = config.getoption("--adc-node")
......
# SPDX-FileCopyrightText: 2022 CERN (home.cern)
#
# SPDX-License-Identifier: LGPL-2.1-or-later
build software:
interruptible: true
stage: build
image:
name: gitlab-registry.cern.ch/be-cem-edl/evergreen/gitlab-ci/build-fec-sw:latest
needs: []
script:
- git submodule update --init --depth 1
- make -C dependencies/fmc-sw/drivers/fmc/
- make -C software
artifacts:
name: "software-$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
paths:
- software/drivers/*.ko
- software/firmware/*/*.elf
- software/firmware/*/*.bin
- software/firmware/*/*.bram
......@@ -9,7 +9,7 @@ CURDIR:=$(shell /bin/pwd)
REPO_PARENT ?= $(CURDIR)/..
-include $(REPO_PARENT)/parent_common.mk
DIRS = drivers firmware
DIRS = drivers
all clean install: $(DIRS)
......
......@@ -11,5 +11,6 @@
*.ko.cmd
*.mod
*.mod.cmd
*.cmd
Module.symvers
modules.order
\ No newline at end of file
modules.order
......@@ -10,7 +10,9 @@
REPO_PARENT ?= $(shell /bin/pwd)/../..
-include $(REPO_PARENT)/parent_common.mk
KERNELSRC ?= /lib/modules/$(shell uname -r)/build
KVERSION ?= $(shell uname -r)
KERNELSRC ?= /lib/modules/$(KVERSION)/build
INSTALL_MOD_PATH ?= /
DRV_VERSION := $(shell git describe --always --dirty --long --tags)
......@@ -23,19 +25,17 @@ FMC_EXTRA_SYMBOLS-y = $(FMC_ABS)/drivers/fmc/Module.symvers
ADC_ABS ?= $(abspath $(FETCHTO)/fmc-adc-100m14b4cha)
all: modules
install: modules_install
.PHONY: all modules clean help install modules_install
modules help modules_install:
clean help modules: fmc-sw
$(MAKE) -C $(KERNELSRC) M=$(shell pwd) DRV_VERSION=$(DRV_VERSION) \
FMC_ABS=$(FMC_ABS) ADC_ABS=$(ADC_ABS) \
FMC_EXTRA_SYMBOLS-y=$(FMC_EXTRA_SYMBOLS-y) $@
install:
$(MAKE) -C $(KERNELSRC) M=$(shell pwd) DRV_VERSION=$(DRV_VERSION) \
FMC_ABS=$(FMC_ABS) ADC_ABS=$(ADC_ABS) modules_install
fmc-sw:
$(MAKE) -C $(FMC)/drivers/fmc
# be able to run the "clean" rule even if $(KERNELSRC) is not valid
clean:
rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions Module.symvers \
Module.markers modules.order
modules_install: modules
$(MAKE) -C $(KERNELSRC) M=$(shell /bin/pwd) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) $@
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment