From 790066a9053a7c59629042cb2c2c26df6e51af5d Mon Sep 17 00:00:00 2001 From: Chris Lavin Date: Tue, 11 Feb 2025 10:55:02 -0700 Subject: [PATCH] Routing Heat Map Example Signed-off-by: Chris Lavin --- .../xilinx/rapidwright/MainEntrypoint.java | 2 + .../rapidwright/router/RoutingHeatMap.java | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 src/com/xilinx/rapidwright/router/RoutingHeatMap.java diff --git a/src/com/xilinx/rapidwright/MainEntrypoint.java b/src/com/xilinx/rapidwright/MainEntrypoint.java index 6daad6dd1..d56fde89f 100644 --- a/src/com/xilinx/rapidwright/MainEntrypoint.java +++ b/src/com/xilinx/rapidwright/MainEntrypoint.java @@ -85,6 +85,7 @@ import com.xilinx.rapidwright.placer.handplacer.ModuleOptimizer; import com.xilinx.rapidwright.router.RouteThruHelper; import com.xilinx.rapidwright.router.Router; +import com.xilinx.rapidwright.router.RoutingHeatMap; import com.xilinx.rapidwright.rwroute.CUFR; import com.xilinx.rapidwright.rwroute.PartialCUFR; import com.xilinx.rapidwright.rwroute.PartialRouter; @@ -191,6 +192,7 @@ private static void addFunction(String name, MainStyleFunction func) { addFunction("ReportTimingExample", ReportTimingExample::main); addFunction("Router", Router::main); addFunction("RouteThruHelper", RouteThruHelper::main); + addFunction("RoutingHeatMap", RoutingHeatMap::main); addFunction("RunSATRouterExample", RunSATRouterExample::main); addFunction("RWRoute", RWRoute::main); addFunction("SLRCrosserGenerator", SLRCrosserGenerator::main); diff --git a/src/com/xilinx/rapidwright/router/RoutingHeatMap.java b/src/com/xilinx/rapidwright/router/RoutingHeatMap.java new file mode 100644 index 000000000..8f2d98b96 --- /dev/null +++ b/src/com/xilinx/rapidwright/router/RoutingHeatMap.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Author: Chris Lavin, AMD Research and Advanced Development. + * + * This file is part of RapidWright. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.xilinx.rapidwright.router; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import com.xilinx.rapidwright.design.Design; +import com.xilinx.rapidwright.design.Net; +import com.xilinx.rapidwright.device.PIP; +import com.xilinx.rapidwright.device.Tile; +import com.xilinx.rapidwright.device.TileTypeEnum; + +/** + * Simple tool for generating a routing heat map as a CSV for a given DCP. + */ +public class RoutingHeatMap { + + public static void main(String[] args) { + if (args.length != 2) { + System.out.println("USAGE: "); + return; + } + Design d = Design.readCheckpoint(args[0]); + Map heatMap = new HashMap<>(); + + for (Net n : d.getNets()) { + for (PIP p : n.getPIPs()) { + if (p.getTile().getTileTypeEnum() == TileTypeEnum.INT) { + heatMap.merge(p.getTile(), 1, Integer::sum); + } + } + } + + Tile[][] intTiles = d.getDevice().getTilesByRootName(TileTypeEnum.INT.name()); + + try (BufferedWriter bw = new BufferedWriter(new FileWriter(args[1]))) { + for (int i = 0; i < intTiles.length; i++) { + Tile[] intArray = intTiles[i]; + for (int j = 0; j < intArray.length; j++) { + Tile t = intArray[j]; + Integer val = heatMap.get(t); + bw.write((val == null ? 0 : val) + ","); + } + bw.write("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +}