Merge branch 'master' into 5th-hao3 #509
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: | |
- hao3 | |
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: | |
# 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 (nxroute-poc only) | |
if: matrix.router == 'nxroute-poc' | |
run: | |
wget -q https://github.com/Xilinx/fpga24_routing_contest/releases/latest/download/xcvu3p.device | |
- 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.router == 'hao3') && matrix.lutpinswapping }} | |
RWROUTE_FORCE_LUT_ROUTETHRU: ${{ (matrix.router == 'rwroute' || matrix.router == 'hao3') && 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.router == 'hao3') && matrix.lutpinswapping && '-lutpinswapping' || ''}}${{ (matrix.router == 'rwroute' || matrix.router == 'hao3') && matrix.lutroutethru && '-lutroutethru' || ''}}-${{ matrix.benchmark }} | |
path: | | |
*.log | |
*.check | |
*.wirelength | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ matrix.router }}${{ (matrix.router == 'rwroute' || matrix.router == 'hao3') && matrix.lutpinswapping && '-lutpinswapping' || ''}}${{ (matrix.router == 'rwroute' || matrix.router == 'hao3') && 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 |