From 84c92eff5cca1fb5ba432b769c7693f7cce5f92d Mon Sep 17 00:00:00 2001 From: Anton Maurovic Date: Tue, 1 Oct 2024 07:07:48 +0930 Subject: [PATCH 1/3] Fix counter_wb test & Makefile cocotb-verify-* regex --- .gitignore | 3 +- Makefile | 2 +- .../user_proj_tests/counter_wb/counter_wb.py | 45 +++++++++++-------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 162c65e24..bac822270 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,8 @@ *.gtkw /env /venv +/venv-cocotb /caravel /dependencies /mgmt_core_wrapper -/logs \ No newline at end of file +/logs diff --git a/Makefile b/Makefile index be2e4fadc..866949f19 100644 --- a/Makefile +++ b/Makefile @@ -126,7 +126,7 @@ $(blocks): % : $(MAKE) -C openlane $* dv_patterns=$(shell cd verilog/dv && find * -maxdepth 0 -type d) -cocotb-dv_patterns=$(shell cd verilog/dv/cocotb && find . -name "*.c" | sed -e 's|^.*/||' -e 's/.c//') +cocotb-dv_patterns=$(shell cd verilog/dv/cocotb && find . -name "*.c" | sed -e 's|^.*/||' -e 's/\.c//') dv-targets-rtl=$(dv_patterns:%=verify-%-rtl) cocotb-dv-targets-rtl=$(cocotb-dv_patterns:%=cocotb-verify-%-rtl) dv-targets-gl=$(dv_patterns:%=verify-%-gl) diff --git a/verilog/dv/cocotb/user_proj_tests/counter_wb/counter_wb.py b/verilog/dv/cocotb/user_proj_tests/counter_wb/counter_wb.py index f4539fe2c..17ef4f445 100644 --- a/verilog/dv/cocotb/user_proj_tests/counter_wb/counter_wb.py +++ b/verilog/dv/cocotb/user_proj_tests/counter_wb/counter_wb.py @@ -19,45 +19,54 @@ from caravel_cocotb.caravel_interfaces import report_test import cocotb +# Read the 16-bit counter value from GPIO[37:30,7:0] +def counter_value(caravelEnv): + return int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) + @cocotb.test() @report_test async def counter_wb(dut): - caravelEnv = await test_configure(dut,timeout_cycles=22620) + caravelEnv = await test_configure(dut,timeout_cycles=27000) - cocotb.log.info(f"[TEST] Start counter_wb test") + cocotb.log.info(f"[TEST] Start counter_wb test") # wait for start of sending await caravelEnv.release_csb() await caravelEnv.wait_mgmt_gpio(1) - cocotb.log.info(f"[TEST] finish configuration") - overwrite_val = 7 # value will be written to the counter by wishbone + cocotb.log.info(f"[TEST] Finished configuration") + overwrite_val = 7 # value will be written to the counter by wishbone (hard-coded in firmware) # expect value bigger than 7 - received_val = int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) + received_val = counter_value(caravelEnv) counter = received_val await cocotb.triggers.ClockCycles(caravelEnv.clk,1) - while True: # wait until the value 1 start counting after the initial - received_val = int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) - if counter == 0xFFFF: # rollover + cocotb.log.info(f"[TEST] Testing Wishbone write") + # Track the counter expected vs. actual, until they diverge... + while True: + received_val = counter_value(caravelEnv) + if counter == 0xFFFF: # rollover counter = 0 else: counter +=1 - if received_val != counter: - if received_val == overwrite_val: - counter = received_val +1 - cocotb.log.info(f"Counter value has been overwritten by wishbone to be {received_val}") - while True: #wait until the wishbone writing finished and the counter start running again - received_val = int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) + if received_val != counter: + # Counter actual has diverged from expected. Verify it was a Wishbone write... + if received_val == overwrite_val: + # Yes, new counter value matches the expected Wishbone overwrite value. + counter = received_val +1 # Counter's next value will increment from this new value. + cocotb.log.info(f"Counter value has been overwritten by Wishbone to be {received_val}") + while True: #wait until the Wishbone writing finished and the counter started running again + received_val = counter_value(caravelEnv) if counter == received_val: break await cocotb.triggers.ClockCycles(caravelEnv.clk,1) - cocotb.log.info(f"Counter value has been overwritten by wishbone to be {received_val}") + cocotb.log.info(f"Counter value is now {received_val}") break else: - cocotb.log.error(f"Counter has wrong value before overwrite happened expected: {counter} received: {received_val}") + cocotb.log.error(f"Counter has wrong value before overwrite. Expected={counter} Received={received_val}") await cocotb.triggers.ClockCycles(caravelEnv.clk,1) + cocotb.log.info(f"[TEST] Testing 100 more counts") for i in range(100): - if counter != int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) : - cocotb.log.error(f"Counter have wrong value expected = {counter} recieved = {int ((caravelEnv.monitor_gpio(37,30).binstr + caravelEnv.monitor_gpio(7,0).binstr ),2) }") + if counter != counter_value(caravelEnv): + cocotb.log.error(f"Counter has wrong value. Expected={counter} Received={counter_value(caravelEnv)}") await cocotb.triggers.ClockCycles(caravelEnv.clk,1) counter +=1 \ No newline at end of file From 18e15d730783c29320ef5e021b091458d80d5c22 Mon Sep 17 00:00:00 2001 From: Marwan Abbas <67271180+marwaneltoukhy@users.noreply.github.com> Date: Tue, 5 Nov 2024 19:22:13 +0530 Subject: [PATCH 2/3] Update user_project_ci.yml --- .github/workflows/user_project_ci.yml | 223 +++++++++++++------------- 1 file changed, 112 insertions(+), 111 deletions(-) diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 87f7d3ee0..2d6b30838 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -9,7 +9,7 @@ on: jobs: download_caravel: - runs-on: ubuntu-latest + runs-on: cpu5 steps: - uses: actions/checkout@v2 @@ -42,13 +42,13 @@ jobs: tar -cf /tmp/caravel.tar -C $CARAVEL_ROOT . - name: Upload Caravel Tarball - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: caravel-tarball path: /tmp/caravel.tar download_deps: - runs-on: ubuntu-latest + runs-on: cpu5 strategy: matrix: targets: ["pdk-with-volare", "install_mcw", "openlane", "setup-timing-scripts", "precheck"] @@ -92,7 +92,7 @@ jobs: fi - name: Download caravel Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: caravel-tarball path: /tmp @@ -118,18 +118,18 @@ jobs: tar -cf /tmp/${{ env.dep_name }}.tar -C ${{ env.dep_root }} . - name: Upload Dependencies Tarball - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ env.dep_name }}-tarball path: /tmp/${{ env.dep_name }}.tar hardening: timeout-minutes: 720 - runs-on: ubuntu-latest + runs-on: cpu5 strategy: matrix: - pdk: ["sky130A", "sky130B"] - needs: [download_deps] + pdk: ["sky130A"] + needs: [download_deps, RTL-verification] steps: - uses: actions/checkout@v2 @@ -152,7 +152,7 @@ jobs: echo "MPW_TAG=main" >> $GITHUB_ENV - name: Download PDK Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pdk-tarball path: /tmp @@ -164,7 +164,7 @@ jobs: tar -xf /tmp/pdk.tar -C $PDK_ROOT . - name: Download openlane Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: openlane-tarball path: /tmp @@ -177,6 +177,7 @@ jobs: - name: Harden using Openlane run: | + make setup python3 $GITHUB_WORKSPACE/.github/scripts/get_designs.py --design $GITHUB_WORKSPACE for word in $(cat harden_sequence.txt); do echo "CURRENT_DESIGN=${word}" >> $GITHUB_ENV @@ -201,17 +202,17 @@ jobs: tar -cf /tmp/design_${{ matrix.pdk }}.tar -C $GITHUB_WORKSPACE . - name: Upload Design_${{ matrix.pdk }} Tarball - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: design_${{ matrix.pdk }}-tarball path: /tmp/design_${{ matrix.pdk }}.tar RTL-verification: timeout-minutes: 720 - runs-on: ubuntu-latest + runs-on: cpu5 strategy: matrix: - pdk: ["sky130A", "sky130B"] + pdk: ["sky130A"] needs: [download_deps] steps: - uses: actions/checkout@v2 @@ -235,7 +236,7 @@ jobs: echo "MPW_TAG=main" >> $GITHUB_ENV - name: Download PDK Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pdk-tarball path: /tmp @@ -247,7 +248,7 @@ jobs: tar -xf /tmp/pdk.tar -C $PDK_ROOT . - name: Download caravel Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: caravel-tarball path: /tmp @@ -259,7 +260,7 @@ jobs: tar -xf /tmp/caravel.tar -C $CARAVEL_ROOT . - name: Download mgmt_core_wrapper Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: mgmt_core_wrapper-tarball path: /tmp @@ -284,10 +285,10 @@ jobs: precheck: timeout-minutes: 720 - runs-on: ubuntu-latest + runs-on: cpu5 strategy: matrix: - pdk: ["sky130A", "sky130B"] + pdk: ["sky130A"] needs: [hardening] steps: - uses: actions/checkout@v2 @@ -310,7 +311,7 @@ jobs: echo "MPW_TAG=main" >> $GITHUB_ENV - name: Download PDK Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pdk-tarball path: /tmp @@ -322,7 +323,7 @@ jobs: tar -xf /tmp/pdk.tar -C $PDK_ROOT . - name: Download precheck Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: precheck-tarball path: /tmp @@ -334,7 +335,7 @@ jobs: tar -xf /tmp/precheck.tar -C $PRECHECK_ROOT . - name: Download Design_${{ matrix.pdk }} Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: design_${{ matrix.pdk }}-tarball path: /tmp @@ -362,7 +363,7 @@ jobs: STA: timeout-minutes: 720 - runs-on: ubuntu-latest + runs-on: cpu5 strategy: matrix: pdk: ["sky130A"] @@ -388,7 +389,7 @@ jobs: echo "MPW_TAG=main" >> $GITHUB_ENV - name: Download PDK Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pdk-tarball path: /tmp @@ -400,7 +401,7 @@ jobs: tar -xf /tmp/pdk.tar -C $PDK_ROOT . - name: Download timing-scripts Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: timing-scripts-tarball path: /tmp @@ -412,7 +413,7 @@ jobs: tar -xf /tmp/timing-scripts.tar -C $TIMING_ROOT . - name: Download Design_${{ matrix.pdk }} Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: design_${{ matrix.pdk }}-tarball path: /tmp @@ -424,7 +425,7 @@ jobs: tar -xf /tmp/design_${{ matrix.pdk }}.tar -C $GITHUB_WORKSPACE . - name: Download Caravel Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: caravel-tarball path: /tmp @@ -436,7 +437,7 @@ jobs: tar -xf /tmp/caravel.tar -C ${{ env.CARAVEL_ROOT }} . - name: Download mgmt_core_wrapper Tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: mgmt_core_wrapper-tarball path: /tmp @@ -470,90 +471,90 @@ jobs: exit 0 fi - # GL-verification: - # timeout-minutes: 720 - # runs-on: ubuntu-latest - # strategy: - # matrix: - # pdk: ["sky130A", "sky130B"] - # needs: [download_deps] - # steps: - # - uses: actions/checkout@v2 - - # - name: Set up QEMU - # uses: docker/setup-qemu-action@v1 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v1 - - # - name: Export ENVIRONMENT VARIABLES - # run: | - # echo "PDK=${{ matrix.pdk }}" >> $GITHUB_ENV - # echo "PDKPATH=$GITHUB_WORKSPACE/pdk/${{ matrix.pdk }}" >> $GITHUB_ENV - # echo "PDK_ROOT=$GITHUB_WORKSPACE/pdk" >> $GITHUB_ENV - # echo "OPENLANE_ROOT=$GITHUB_WORKSPACE/openlane_src" >> $GITHUB_ENV - # echo "CARAVEL_ROOT=$GITHUB_WORKSPACE/caravel" >> $GITHUB_ENV - # echo "MCW_ROOT=$GITHUB_WORKSPACE/mgmt_core_wrapper" >> $GITHUB_ENV - # echo "TIMING_ROOT=$GITHUB_WORKSPACE/timing-scripts" >> $GITHUB_ENV - # echo "PRECHECK_ROOT=$GITHUB_WORKSPACE/mpw_precheck" >> $GITHUB_ENV - # echo "MPW_TAG=main" >> $GITHUB_ENV - - # - name: Download PDK Tarball - # uses: actions/download-artifact@v2 - # with: - # name: pdk-tarball - # path: /tmp - - # - name: Unpack PDK Tarball - # run: | - # sudo mkdir -p ${{ env.PDK_ROOT }} - # sudo chown -R $USER:$USER ${{ env.PDK_ROOT }} - # tar -xf /tmp/pdk.tar -C $PDK_ROOT . + GL-verification: + timeout-minutes: 720 + runs-on: cpu5 + strategy: + matrix: + pdk: ["sky130A"] + needs: [download_deps, hardening] + steps: + - uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Export ENVIRONMENT VARIABLES + run: | + echo "PDK=${{ matrix.pdk }}" >> $GITHUB_ENV + echo "PDKPATH=$GITHUB_WORKSPACE/pdk/${{ matrix.pdk }}" >> $GITHUB_ENV + echo "PDK_ROOT=$GITHUB_WORKSPACE/pdk" >> $GITHUB_ENV + echo "OPENLANE_ROOT=$GITHUB_WORKSPACE/openlane_src" >> $GITHUB_ENV + echo "CARAVEL_ROOT=$GITHUB_WORKSPACE/caravel" >> $GITHUB_ENV + echo "MCW_ROOT=$GITHUB_WORKSPACE/mgmt_core_wrapper" >> $GITHUB_ENV + echo "TIMING_ROOT=$GITHUB_WORKSPACE/timing-scripts" >> $GITHUB_ENV + echo "PRECHECK_ROOT=$GITHUB_WORKSPACE/mpw_precheck" >> $GITHUB_ENV + echo "MPW_TAG=main" >> $GITHUB_ENV + + - name: Download PDK Tarball + uses: actions/download-artifact@v3 + with: + name: pdk-tarball + path: /tmp + + - name: Unpack PDK Tarball + run: | + sudo mkdir -p ${{ env.PDK_ROOT }} + sudo chown -R $USER:$USER ${{ env.PDK_ROOT }} + tar -xf /tmp/pdk.tar -C $PDK_ROOT . - # - name: Download caravel Tarball - # uses: actions/download-artifact@v2 - # with: - # name: caravel-tarball - # path: /tmp - - # - name: Unpack caravel Tarball - # run: | - # sudo mkdir -p ${{ env.CARAVEL_ROOT }} - # sudo chown -R $USER:$USER ${{ env.CARAVEL_ROOT }} - # tar -xf /tmp/caravel.tar -C $CARAVEL_ROOT . + - name: Download caravel Tarball + uses: actions/download-artifact@v3 + with: + name: caravel-tarball + path: /tmp + + - name: Unpack caravel Tarball + run: | + sudo mkdir -p ${{ env.CARAVEL_ROOT }} + sudo chown -R $USER:$USER ${{ env.CARAVEL_ROOT }} + tar -xf /tmp/caravel.tar -C $CARAVEL_ROOT . - # - name: Download mgmt_core_wrapper Tarball - # uses: actions/download-artifact@v2 - # with: - # name: mgmt_core_wrapper-tarball - # path: /tmp - - # - name: Unpack mgmt_core_wrapper Tarball - # run: | - # sudo mkdir -p ${{ env.MCW_ROOT }} - # sudo chown -R $USER:$USER ${{ env.MCW_ROOT }} - # tar -xf /tmp/mgmt_core_wrapper.tar -C $MCW_ROOT . - - # # - name: Download Design Tarball - # # uses: actions/download-artifact@v2 - # # with: - # # name: design-tarball - # # path: /tmp - - # # - name: Unpack Design Tarball - # # run: | - # # sudo mkdir -p $GITHUB_WORKSPACE - # # sudo chown -R $USER:$USER $GITHUB_WORKSPACE - # # tar -xf /tmp/design.tar -C $GITHUB_WORKSPACE . - - # - name: install cocotb - # run: | - # make setup-cocotb + - name: Download mgmt_core_wrapper Tarball + uses: actions/download-artifact@v3 + with: + name: mgmt_core_wrapper-tarball + path: /tmp + + - name: Unpack mgmt_core_wrapper Tarball + run: | + sudo mkdir -p ${{ env.MCW_ROOT }} + sudo chown -R $USER:$USER ${{ env.MCW_ROOT }} + tar -xf /tmp/mgmt_core_wrapper.tar -C $MCW_ROOT . + + - name: Download Design_${{ matrix.pdk }} Tarball + uses: actions/download-artifact@v3 + with: + name: design_${{ matrix.pdk }}-tarball + path: /tmp + + - name: Unpack Design_${{ matrix.pdk }} Tarball + run: | + sudo mkdir -p $GITHUB_WORKSPACE + sudo chown -R $USER:$USER $GITHUB_WORKSPACE + tar -xf /tmp/design_${{ matrix.pdk }}.tar -C $GITHUB_WORKSPACE . + + - name: install cocotb + run: | + make setup-cocotb - # - name: run RTL verification - # run: | - # cd $GITHUB_WORKSPACE/verilog/dv/cocotb && $GITHUB_WORKSPACE/venv-cocotb/bin/caravel_cocotb -tl user_proj_tests/user_proj_tests_gl.yaml -verbosity debug --CI -tag gl_verification - # cnt=$(grep -c "failed" "$GITHUB_WORKSPACE/verilog/dv/cocotb/sim/gl_verification/runs.log") - # if ! [[ $cnt ]]; then cnt=0; fi - # if [[ $cnt -eq 1 ]]; then exit 0; fi - # exit 2 + - name: run RTL verification + run: | + cd $GITHUB_WORKSPACE/verilog/dv/cocotb && $GITHUB_WORKSPACE/venv-cocotb/bin/caravel_cocotb -tl user_proj_tests/user_proj_tests_gl.yaml -verbosity debug --CI -tag gl_verification + cnt=$(grep -c "failed" "$GITHUB_WORKSPACE/verilog/dv/cocotb/sim/gl_verification/runs.log") + if ! [[ $cnt ]]; then cnt=0; fi + if [[ $cnt -eq 1 ]]; then exit 0; fi + exit 2 From af5b44badc7b7fd658b7472e399451d1f01e60d3 Mon Sep 17 00:00:00 2001 From: Marwan Abbas <67271180+marwaneltoukhy@users.noreply.github.com> Date: Tue, 5 Nov 2024 19:57:20 +0530 Subject: [PATCH 3/3] Update user_project_ci.yml --- .github/workflows/user_project_ci.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 2d6b30838..f13d5b3c4 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -9,7 +9,7 @@ on: jobs: download_caravel: - runs-on: cpu5 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -48,7 +48,7 @@ jobs: path: /tmp/caravel.tar download_deps: - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: targets: ["pdk-with-volare", "install_mcw", "openlane", "setup-timing-scripts", "precheck"] @@ -125,7 +125,7 @@ jobs: hardening: timeout-minutes: 720 - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: pdk: ["sky130A"] @@ -209,7 +209,7 @@ jobs: RTL-verification: timeout-minutes: 720 - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: pdk: ["sky130A"] @@ -285,7 +285,7 @@ jobs: precheck: timeout-minutes: 720 - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: pdk: ["sky130A"] @@ -363,7 +363,7 @@ jobs: STA: timeout-minutes: 720 - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: pdk: ["sky130A"] @@ -473,7 +473,7 @@ jobs: GL-verification: timeout-minutes: 720 - runs-on: cpu5 + runs-on: ubuntu-latest strategy: matrix: pdk: ["sky130A"]