From 2965bd3c9de136bb03d68e611979365c368e244a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 31 Oct 2024 21:23:58 +0100 Subject: [PATCH] skew: 3d plot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe --- BUILD.bazel | 14 +++++++------- plot-3d-slack.py | 24 ++++++++++++------------ slack-positions.tcl | 30 +++++++++++++++--------------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 16be483..0cff28f 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -310,20 +310,20 @@ boom_regfile_rams = { ] orfs_run( - name = "slack", - src = ":BoomTile_cts", - outs = ["slack.txt"], + name = "xy_stats", + src = ":BoomTile_1_cts", + outs = ["xy_stats"], arguments = { - "OUTPUT": "$(location :slack.txt)", + "OUTPUT": "$(location :xy_stats)", }, script = ":slack-positions.tcl", ) sh_binary( - name = "show_slack", + name = "show_skew", srcs = ["plot-3d-slack.py"], - args = ["$(location :slack)"], - data = ["slack"], + args = ["$(location :xy_stats)"], + data = ["xy_stats"], visibility = ["//visibility:public"], ) diff --git a/plot-3d-slack.py b/plot-3d-slack.py index f2a8fbb..bad2dc9 100755 --- a/plot-3d-slack.py +++ b/plot-3d-slack.py @@ -13,27 +13,27 @@ def load_data(filename): with open(filename, "r") as file: for line in file: parts = line.split() - if len(parts) == 4: - s = float(parts[1]) - slack.append(s) - x.append(float(parts[2])/1000) - y.append(float(parts[3])/1000) + if len(parts) == 5: + s = float(parts[2]) + slack.append(s * pow(10, 12)) + x.append(float(parts[3])) + y.append(float(parts[4])) return np.array(x), np.array(y), np.array(slack) -def plot_3d(x, y, slack): +def plot_3d(x, y, z): # Create grid data for surface plot grid_x, grid_y = np.mgrid[0: 2000: 100j, 0: 2000: 100j] - grid_z = griddata((x, y), slack, (grid_x, grid_y), method="linear") + grid_z = griddata((x, y), z, (grid_x, grid_y), method="linear") fig = plt.figure() ax = fig.add_subplot(111, projection="3d") surf = ax.plot_surface(grid_x, grid_y, grid_z, cmap="viridis") - ax.set_xlabel("X Position") - ax.set_ylabel("Y Position") - ax.set_zlabel("Slack") + ax.set_xlabel("X") + ax.set_ylabel("Y") + ax.set_zlabel("Skew") fig.colorbar(surf, ax=ax, shrink=0.5, aspect=5) plt.show() @@ -41,5 +41,5 @@ def plot_3d(x, y, slack): if __name__ == "__main__": filename = sys.argv[1] - x, y, slack = load_data(filename) - plot_3d(x, y, slack) + x, y, z = load_data(filename) + plot_3d(x, y, z) diff --git a/slack-positions.tcl b/slack-positions.tcl index 401a57f..025426a 100644 --- a/slack-positions.tcl +++ b/slack-positions.tcl @@ -1,28 +1,28 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 4_cts.odb 4_cts.sdc +source $::env(SCRIPTS_DIR)/open.tcl set paths [find_timing_paths -path_group reg2reg -sort_by_slack -group_count 1000000] set db [::ord::get_db] set block [[$db getChip] getBlock] -# open file set fp [open $::env(OUTPUT) w] foreach path $paths { set endpoint [get_property $path endpoint] - set instance [$endpoint instance] + set instance [sta::sta_to_db_inst [$endpoint instance]] + set port [sta::sta_to_db_port [$endpoint port]] set name [get_property $endpoint full_name] - set slack [get_property $path slack] - - # If DFF is in the $name and it ends with /D - if {[regexp {DFF} $name] && [regexp {/D$} $name]} { - # remove the /D suffix - set name [string range $name 0 end-2] - # replace [ and ] with \[ and \] - set name [string map { {[} {\[} {]} {\]} } $name] - set b [$block findInst $name] - set bbox [$b getBBox] - puts $fp "$name $slack [$bbox xMin] [$bbox yMin]" + set obj {NULL} + if {$port!={NULL}} { + set obj $port + } elseif {$instance!={NULL}} { + set obj $instance + } else { + puts "Nothing found for $name" + continue } + set slack [get_property $path slack] + set skew [$path clk_skew] + set bbox [$obj getBBox] + puts $fp "$name $slack $skew [ord::dbu_to_microns [$bbox xMin]] [ord::dbu_to_microns [$bbox yMin]]" } close $fp