Professional Documents
Culture Documents
TCL TK
TCL TK
What is Tcl?
Tcl Comments
## Comments
Comments in
in Tcl
Tcl are
are line-oriented
line-oriented
## If
If you
you wish
wish to
to comment
comment on
on the
the same
same line,
line, be
be sure
sure to
to use
use
## aa semicolon
before
the
comment:
semicolon before the comment:
set
set header_str
header_str output
output Header;#
Header;# Same
Same line
line comment
comment
Embedded Comments:
this semicolon is required!
Set_output_delay
Set_output_delay 55 -clock
-clock CLK
CLK [all_outputs]
[all_outputs]
Wildcards in Tcl
help
help create*
create*
set_input_delay
set_input_delay 55 -clock
-clock CLK
CLK [get_ports
[get_ports BUS?]
BUS?]
Variables in Tcl
To print variables
set
set myvar;
myvar; ## or
or
printvar
printvar myvar
myvar
set
set clock_period
clock_period 10
10
echo
echo clock_period
clock_period
____________________
____________________
echo
echo clock_period
clock_period == $clock_period
$clock_period
____________________
____________________
set
set period
period 10.0
10.0
set
set freq
freq [expr
[expr (1
(1 // $period)]
$period)]
echo
echo Freq
Freq == [expr
[expr $freq
$freq ** 1000]
1000] MH
MHZZ
_________________________________________
_________________________________________
set
set L1
L1 el1
el1 el2
el2 el3
el3
set
set Num_of_List_Elements
Num_of_List_Elements [1length
[1length $$ L1]
L1]
33
lappend
lappend
el1
el1 el2
el2
set
set
el1
el1
L1
L1 el4
el4 el5
el5
el3
el3 el4
el4 el5
el5
new_list
new_list [1minus
[1minus $L1
$L1 el2]
el2]
el3
el4
el5
el3 el4 el5
occur
set
set vendor_library
vendor_library $target_library
$target_library
switch
$vendor_library
switch $vendor_library {{
xlib
xlib {set_max_delay
{set_max_delay 2.8
2.8 [all_outputs]}
[all_outputs]}
zlib
{set_max_delay
3.1
[all_outputs]}
zlib {set_max_delay 3.1 [all_outputs]}
default
default [set_max_delay
[set_max_delay 3.4
3.4 [all_outputs]}
[all_outputs]}
}}
list_element
list_element $Mylist
$Mylist {{
$list_element
$list_element
## while
while loop
loop example
example
set
set
set
set
idx
idx 00
clk_per
clk_per 10.0
10.0
## Create
Create divided
divided clocks
clocks
while
{$idx
<
10}
while {$idx < 10} {{
create_clock
create_clock -period
-period
incr
idx
incr idx
set
set clk_per
clk_per [expr
[expr (2
(2
}}
on
on ports
ports CLK0
CLK0 -- CLK9
CLK9
$clk_per
$clk_per [get_ports
[get_ports CLK$idx]
CLK$idx]
** $clk_per)]
$clk_per)]
set
set my_long_list
my_long_list Input_Port_1
Input_Port_1 Input_Port_2
Input_Port_2 \\
Input_Port_3
Input_Port_3 Input_Port_4
Input_Port_4
redirect
redirect -append
-append my_log_file
my_log_file {1length
{1length $my_long_list}
$my_long_list}
source
source my_script_file.tcl
my_script_file.tcl
##
##
Use
Use the
the following
following for
for
source
-echo
-verbose
source -echo -verbose
debugging
debugging script
script files
files
my_script_file.tcl
my_script_file.tcl
pt_shell>
pt_shell> set
set myvar
myvar [all_inputs]
[all_inputs]
{IN1,
IN2,
IN3,
{IN1, IN2, IN3, IN4,
IN4, IN5}
IN5}
pt_shell>
printvar
myvar
pt_shell> printvar myvar
_sell21
_sell21
IN1
IN2
IN3
IN4
IN5
Application Attributes
Each design object has application attributes
You can control your scripts or create your own timing
analysis reports using these attributes
pt_shell> list_attributes -application -class clock
Attribute Name
Object
Type
----------------------------------------------------------clock_latency_fall_max
clock
float
clock_latency_fall_min
clock
float
clock_latency_rise_max
clock
float
clock_latency_rise_min
clock
float
full_name
clock
string
hold_uncertainty
clock
float
is_generated
clock
boolean
object_class
clock
string
period
clock
float
propagated_clock
clock
boolean
setup_uncertainty
clock
float
sources
clock
waveform
## Script
Script to
to loop
loop thru
thru all
all clocks
clocks and
and print
print their
their period
period
foreach_in_collection
foreach_in_collection clk_itr
clk_itr [all_clocks]
[all_clocks] {{
set
set clk_name
clk_name [get_attribute
[get_attribute $clk_itr
$clk_itr full_name]
full_name]
set
clk_per
[get_attribute
$clk_itr
period]
set clk_per [get_attribute $clk_itr period]
echo
echo Clock
Clock period
period for
for $clk_name
$clk_name is
is $clk_per
$clk_per
}}
Tcl Procedures
multadd.pt
proc
proc multadd
multadd {abc}
{abc} {{
expr
expr $a*$b+$c
$a*$b+$c
}}
pt_shell>
pt_shell>
pt_shell>
pt_shell>
11
11
source
source multadd.pt
multadd.pt
multadd
multadd 22 44 33
How
How do
doyou
youcall
callthis
thisprocedure?
procedure?
What
Whatdoes
doesthe
theprocedure
proceduregive
giveyou?
you?
slack.pt
proc
proc report_path_slack
report_path_slack {path}
{path} {{
set
set path_slack
path_slack [get_attribute
[get_attribute $path
$path slack]
slack]
if
{[get_attribute
$path
endpoint_clock]
if {[get_attribute $path endpoint_clock] !=
!= }
} {{
echo
echo Slack
Slack == $path_slack
$path_slack
}} else
else {{
echo
echo Slack
Slack == (unconstrained
(unconstrained path)
path)
}}
return
return $path_slack
$path_slack
}}