1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 | ###############################################################################
# Copyright (c) 2020-2024 by Altair Engineering, Inc.
# All rights reserved.
#
# Altair Engineering, Inc. makes this software available as part of the Vision
# tool platform. As long as you are a licensee of the Vision tool platform
# you may make copies of the software and modify it to be used within the
# Vision tool platform, but you must include all of this notice on any copy.
# Redistribution without written permission to any third party, with or
# without modification, is not permitted.
# Altair Engineering, Inc. does not warrant that this software is error free
# or fit for any purpose. Altair Engineering, Inc. disclaims any liability for
# all claims, expenses, losses, damages and costs any user may incur as a
# result of using, copying or modifying the software.
# =============================================================================
# @userware
# Report Design Hierarchy
# @section
# Create Reports
# @description
# Example Tcl script that uses ZDB API commands to get information about
# the design hierarchy in a given design and print a report to an output
# file.
# Usage:
# starsh reportDesignHierarchy.tcl design.zdb report.txt
# @files
# cust33/reportDesignHierarchy.tcl
# @tag
# zdb batch report
###############################################################################
# =============================================================================
# Start - Start reporting the design hierarchy.
# =============================================================================
#
proc ReportDesignHierarchy:Start {db report} {
##
# Open the report file.
#
set out [open $report "w"]
##
# Get the top design.
#
set top [$db get_top_design]
##
# Report the top level module.
#
puts $out [$db oid oname $top]
##
# Traverse the design starting from the top level module.
#
ReportDesignHierarchy:_traverse $db $out $top 0
##
# Close the report file.
#
close $out
}
# -----------------------------------------------------------------------------
# _traverse - Print next level of hierarchy to the file out.
# If a child is a node then call this procedure recursive.
# -----------------------------------------------------------------------------
#
proc ReportDesignHierarchy:_traverse {db out module indent} {
##
# Loop over all instances in the given module.
#
$db foreach inst $module inst {
##
# Skip all instances of leaf cells.
#
if {![$db isModule $inst]} {
continue
}
##
# Report this module instance.
#
puts $out [format "%s%s (%s)" \
[string repeat " " [expr {($indent + 1) * 4}]] \
[$db oid oname $inst] \
[$db oid cname $inst] \
]
##
# Continue traversing the hierarchy one level down.
#
incr indent
ReportDesignHierarchy:_traverse $db $out [$db moduleOf $inst] $indent
incr indent -1
}
}
##
# Check for 2 command line options
#
if {$argc != 2} {
set msg "Wrong #of args. Usage:\n"
append msg "[info nameofexecutable] [info script] <BINFILE> <REPORTFILE>"
error $msg
}
##
# The design is given as the first argument on the command line.
#
set binfile [lindex $argv 0]
##
# The report file is the second argument on the command line.
#
set report [lindex $argv 1]
##
# Open the binfile.
#
set db [zdb open $binfile]
##
# Call the main procedure to start creating the hierarchy report.
#
ReportDesignHierarchy:Start $db $report
##
# Close the opened database.
#
$db close
|