Merge master into 4th-cuckoo branch #503
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (C) 2023-2024, Advanced Micro Devices, Inc. All rights reserved. | |
# | |
# Author: Eddie Hung, AMD | |
# | |
# SPDX-License-Identifier: MIT | |
# | |
name: make | |
on: | |
push: | |
pull_request: | |
jobs: | |
make: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
router: | |
- cuckoo | |
lutpinswapping: | |
- false | |
- true | |
lutroutethru: | |
- false | |
- true | |
benchmark: | |
- logicnets_jscl | |
- boom_med_pb | |
- vtr_mcml | |
- rosetta_fd | |
- corundum_25g | |
- finn_radioml | |
- vtr_lu64peeng | |
- corescore_500 | |
- corescore_500_pb | |
- mlcad_d181_lefttwo3rds | |
- koios_dla_like_large | |
- boom_soc | |
- ispd16_example2 | |
exclude: | |
# Cuckoo does not support LUT pin swapping | |
- router: cuckoo | |
lutpinswapping: true | |
# Cuckoo does not support LUT routethrus | |
- router: cuckoo | |
lutroutethru: true | |
# NXRoute does not support LUT pin swapping | |
- router: nxroute-poc | |
lutpinswapping: true | |
# NXRoute does not support LUT routethrus | |
- router: nxroute-poc | |
lutroutethru: true | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
cache: 'gradle' | |
- if: matrix.router == 'nxroute-poc' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
check-latest: true | |
cache: 'pip' | |
- name: Download xcvu3p.device | |
if: matrix.router == 'nxroute-poc' || matrix.router == 'cuckoo' | |
run: | |
wget -q https://github.com/Xilinx/fpga24_routing_contest/releases/latest/download/xcvu3p.device | |
- name: Build capnp-0.10.2 | |
run: | | |
curl -O https://capnproto.org/capnproto-c++-0.10.2.tar.gz | |
tar zxf capnproto-c++-0.10.2.tar.gz | |
cd capnproto-c++-0.10.2 | |
./configure | |
make | |
sudo make install | |
- name: Build OpenPARF/fpga24contest | |
run: | | |
sudo apt-get -y install cmake libopenblas-dev libboost-filesystem-dev libboost-program-options-dev | |
cd OpenPARF/fpga24contest | |
mkdir build | |
cd build | |
cmake ../src -DCMAKE_BUILD_TYPE=Release | |
make | |
- env: | |
REPORT_ROUTE_STATUS_URL: ${{ secrets.REPORT_ROUTE_STATUS_URL }} | |
REPORT_ROUTE_STATUS_AUTH: ${{ secrets.REPORT_ROUTE_STATUS_AUTH }} | |
RWROUTE_FORCE_LUT_PINSWAPPING: ${{ matrix.router == 'rwroute' && matrix.lutpinswapping }} | |
RWROUTE_FORCE_LUT_ROUTETHRU: ${{ matrix.router == 'rwroute' && matrix.lutroutethru }} | |
run: | | |
make ROUTER="${{ matrix.router }}" BENCHMARKS="${{ matrix.benchmark }}" VERBOSE=1 | |
- name: Score summary | |
run: | |
make ROUTER="${{ matrix.router }}" BENCHMARKS="${{ matrix.benchmark }}" VERBOSE=1 | |
- name: Verify pass (non nxroute-poc) | |
if: matrix.router != 'nxroute-poc' | |
run: | | |
set -x | |
# Allow CheckPhysNetlist to fail if no remote access to Vivado | |
grep -H PASS *.check || (grep -H FAIL *.check && ${{ secrets.REPORT_ROUTE_STATUS_URL == '' }}) | |
grep -H -e "# of nets with routing errors[. :]\+0" *.check.log || ${{ secrets.REPORT_ROUTE_STATUS_URL == '' }} | |
# But CheckPhysNetlist must have no differences | |
grep "INFO: No differences found between routed and unrouted netlists" *.check.log | |
# Check no multiple sources, no stubs | |
grep "UserWarning: Found [0-9]\+ sources" *.wirelength && exit 1 | |
grep "UserWarning: Found [0-9]\+ stubs" *.wirelength && exit 1 | |
# Check wirelength was computed | |
grep "^Wirelength: [1-9][0-9]*" *.wirelength | |
- name: Verify fail (nxroute-poc) | |
if: matrix.router == 'nxroute-poc' | |
run: | | |
set -x | |
grep -H FAIL *.check | |
# Only expect report_route_status output if URL given | |
grep -H -e "# of nets with routing errors[. :]\+[1-9]" -e "# of unrouted nets[. :]\+[1-9]" *.check.log || ${{ secrets.REPORT_ROUTE_STATUS_URL == '' }} | |
# But CheckPhysNetlist must have no differences (except koios because out-of-memory) | |
grep "INFO: No differences found between routed and unrouted netlists" *.check.log || ${{ matrix.benchmark == 'koios_dla_like_large' }} | |
# Check no multiple sources, but expect possibility of stubs since nxroute is unlikely to fully route the design | |
grep "UserWarning: Found [0-9]\+ sources" *.wirelength && exit 1 | |
grep "UserWarning: Found [0-9]\+ stubs" *.wirelength || true | |
# Allow wirelength computation to fail since nxroute may not have routed anything or wirelength_analyzer was not run | |
grep "^Wirelength: [1-9][0-9]*" *.wirelength || true | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: logs-${{ matrix.router }}${{ matrix.router == 'rwroute' && matrix.lutpinswapping && '-lutpinswapping' || ''}}${{ matrix.router == 'rwroute' && matrix.lutroutethru && '-lutroutethru' || ''}}-${{ matrix.benchmark }} | |
path: | | |
*.log | |
*.check | |
*.wirelength | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ matrix.router }}${{ matrix.router == 'rwroute' && matrix.lutpinswapping && '-lutpinswapping' || ''}}${{ matrix.router == 'rwroute' && matrix.lutroutethru && '-lutroutethru' || ''}}-${{ matrix.benchmark }} | |
compression-level: 0 | |
path: | | |
*.dcp | |
*.phys | |
${{ matrix.benchmark }}.netlist.edn/* | |
*_load.tcl | |
!*_unrouted.phys | |
merge-logs: | |
runs-on: ubuntu-latest | |
needs: make | |
steps: | |
- uses: actions/upload-artifact/merge@v4 | |
with: | |
name: logs | |
pattern: logs-* | |
delete-merged: true |