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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 | ###############################################################################
# Copyright (c) 2017-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.
# =============================================================================
# @plugin
# Save and Restore Configured Clocked Cells
# @namespace
# SaveRestoreClockedCells
# @section
# Miscellaneous Userware Examples
# @description
# This plugin allows you to save manually configured clocked cell
# information to a text file and restore it from the file.
# @files
# saveRestoreClockedCells.tcl
# @example
# demo/verilog/gl85.v
# @cmdline
# -verilog @example[0]
# -userware @files[0]
# @tag
# gui database
###############################################################################
# =============================================================================
# Init - Initialize the plugin.
# =============================================================================
#
proc SaveRestoreClockedCells:Init {} {
##
# Add menu entries.
#
gui menu command {"Userware" "Save Clocked Cells Configuration"} \
[list SaveRestoreClockedCells:Save]
gui menu command {"Userware" "Restore Clocked Cells Configuration"} \
[list SaveRestoreClockedCells:Restore]
}
# =============================================================================
# Finit - Finalize the plugin.
# This procedure is automatically called when deactivating the plugin.
# =============================================================================
#
proc SaveRestoreClockedCells:Finit {} {
##
# Undo modifications of the GUI.
#
gui menu removeEntry {"Userware" "Save Clocked Cells Configuration"}
gui menu removeEntry {"Userware" "Restore Clocked Cells Configuration"}
}
# =============================================================================
# Save - Save the clocked cells configuration to a text file.
# =============================================================================
#
proc SaveRestoreClockedCells:Save {{fname ""}} {
set db [gui database get]
if {$db == {}} {
return
}
if {$fname eq ""} {
set fname [gui window fileDialog saveFile \
"Save Clocked Cells Configuration" \
{{"Clocked Cells Configuration" ".txt"}}]
}
if {$fname eq ""} {
return
}
set out [open $fname wb]
$db foreach cell cell {
if {![$db flag $cell is clock]} {
continue
}
set line {}
lappend line [$db oid oname $cell]
$db foreach port $cell port {
if {[$db flag $port is clock]} {
lappend line [$db oid oname $port]
}
}
puts $out $line
}
close $out
}
# =============================================================================
# Restore - Restore the clocked cells configuration from a text file.
# =============================================================================
#
proc SaveRestoreClockedCells:Restore {{fname ""}} {
set db [gui database get]
if {$db == {}} {
return
}
if {$fname eq ""} {
set fname [gui window fileDialog openFile \
"Restore Clocked Cells Configuration" \
{{"Clocked Cells Configuration" ".txt"}}]
}
if {$fname eq ""} {
return
}
set in [open $fname rb]
while {![eof $in]} {
set line [gets $in]
set cellName [lindex $line 0]
if {$cellName eq ""} {
continue
}
set cell [$db search cell $cellName]
if {[$db oid isnull $cell]} {
zmessage print WAR "Cell '$cellName' not found."
continue
}
$db flag $cell set clock
foreach portName [lrange $line 1 end] {
set port [$db search port $cell $portName]
if {[$db oid isnull $port]} {
zmessage print WAR "Port '$portName' at $cellName not found."
continue
}
$db flag $port set clock
}
}
close $in
gui database changed $db
}
# =============================================================================
# Call the initialization procedure.
# =============================================================================
#
SaveRestoreClockedCells:Init
|