1 - TCL Tutorial CAD Glossary PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

Backend CAD

Winter 2015-2016

Tutorial 1 Tcl tutorial & CAD glossary


[email protected]

Office hours:
Intel employees: you can contact me on internal
messenger
All others: send your CVs
Both: mail me for schedule

Amnon Stanislavsky
Please open an account in the VLSI lab
A representative from the lab will come next week to handle
this
An industrial tool will be used for homework execution
(Synopsys IC compiler)
We will talk about it next tutorial
6 HWs. 50% of the final grade
Hand outs and hand ins are staggered
The other 50% will be an exam or a mini project. Still to
be decided

Administration
Moodle site is here:
http://moodle.technion.ac.il/course/view.php?id=3186

Please make sure you are subscribed for the message


board forum

For questions that will benefit the entire course please


use the Q&A forum. For private issues mail me

Moodle
Introduction to Tcl
Tcl = Tool Command Language
An interpreted programming language
Build on-the-fly commands, procedures
Platform-independent
Language used to operate Synopsys IC compiler

What is Tcl?
1. Run inside IC compiler or any other Tcl using CAD
program (for example: design compiler, PrimeTime,
Conformal)
2. Open a Tcl Shell. There are several Shells to choose from.
(For example: tcl, tclsh, wish)
A program can reside in a file or written on-the-fly

How to run a Tcl program


print to screen (puts)
puts nonewline "Hello, world!"
puts "!!"
assignment (set)
set income 32000
puts "income is $income"
(using '$' to get the value of a variable)
mathematical expressions (expr)
set a 10.0
expr $a + 5
expr int($a/3)

Basic operations
# : single-line comments, similar to "//" in C
;# : in-line comments, just like "//" in C
\ : escape character, same function as in C
: also used to break a long line of code to two lines
$ : get the value of a variable
var : name of variable
$var : value of variable
[] : evaluate command inside brackets

Special characters
if then else
set income 32000
if {$income > 30000} {
puts "$income -- high" This is the
} elseif {$income > 20000} {
correct syntax!
puts "$income -- middle"
} else {
puts "$income -- low"
}
while loops
set i 0
while {$i < 100} {
puts "I am at count $i"
incr i
}

Control structures (1)


for loops
for {set i 0} {$i < 100} {incr i} {
puts "I am at count $i and going up"
after 300
update
}
for {set i 100} {$i > 0} {set i [expr $i - 1]} {
puts "I am at count $i and going down"
}

foreach loops
set lstColors {red orange yellow green blue purple}
foreach c $lstColors {
puts $c
}

Control structures (2)


foreach loops (con't)
set lstColors {red orange yellow green blue purple}
foreach {a b c} $lstColors {
puts "$c--$b--$a"
}

set lstFoods {apple orange banana lime berry grape}


foreach f $lstFoods c $lstColors {
puts "a $f is usually $c"
}

foreach {a b} $lstFoods c $lstColors {


puts "$a & $b are foods. $c is a color."
}

Control structures (3)


Command evaluation
set b [expr $a + 5]
puts "The value of b is $b"

create your own procedure (called by value only)


proc foo {a b c} {
return [expr $a * $b - $c]
}
puts [expr [foo 2 3 4] + 5]

proc bar { } {
puts "I'm in the bar procedure"
}
bar

Procedures
local and global variables
set a 5
set b 6
set c 7
proc var_scope { } {
global a
set a 3
set b 2
set ::c 1
}
var_scope
puts "The value for a b c is: $a $b $c"

Variable scope
Everything is a list!
Many ways to create a list
set myList [list a b c]
set myList "a b c"
set myList {a b c}

set myList [list $a $b $c]


set myList {$a $b $c}

set myList [list a b c]


set myList "a b c"

set s Hello
puts "The length of $s is [string length $s]."
=> The length of Hello is 5.
puts {The length of $s is [string length $s].}
=> The length of $s is [string length $s].

Lists in Tcl
set lstStudents [list "Fan" "Kristy" "Susan"]
puts [lindex $lstStudents 0]
puts [lindex $lstStudents end]
puts [llength lstStudents] (unexpected result!)
puts [llength $lstStudents]
lappend $lstStudents "Peter" (wrong!)
lappend lstStudents "Peter"
puts [linsert lstStudents 2 "Tom"] (wrong!)
puts [linsert $lstStudents 2 "Tom"]
set lstStudents [linsert $lstStudents 2 "Tom"]
set lstStudents [lreplace $lstStudents 3 3 "Rachel"]
set lstStudents [lreplace $lstStudents end end]
set lstStudents [lsort ascii $lstStudents]
puts [lsearch $lstStudents "Peter"]

List operations
set a [list [list x y z]]
puts [lindex $a 0]
puts [lindex [lindex $a 0] 1]
puts [lindex [lindex $a 1] 0] (unexpected result)
set a [list x [list [list y] [list z]]]
=> How to get to the z?

set arg1 [list g [list f [list h [list i X]]] [list r Y] k]


set arg2 [list g [list f [list h [list i Y]]] [list r b] L]
set both [list $arg1 $arg2]
puts $both

Lists of lists (of lists)


Associative arrays (string as index)
set color(rose) red
set color(sky) blue
set color(medal) gold
set color(leaves) green
set color(blackboard) black
puts [array exists color]
(tests if an array with the name "color" exists)
puts [array exists colour]
puts [array names color] (returns a list of the index strings)
foreach item [array names color] {
puts "$item is $color($item)"
} (iterating through array)
set lstColor [array get color] (convert array to a list of lists)
array set color $lstColor (convert list to array)

Array operations
regsub
set stmt "Fan is one of Shanias fans"
regsub nocase "fan" $stmt "Kristy" newStmt
?switches? exp string subSpec ?varName?
puts "$newStmt"
regsub nocase all "fan" $stmt "Kristy" newStmt
puts "$newStmt"
regexp
(returns 1 if the regular expression matches the string, else returns 0)
puts [regexp nocase "fan" $stmt]
?switches? regexp string

Regular expressions
set statement " Fan is a student "
set statement [string trim $statement]
puts [string length $statement]
puts [string length statement]
puts [string index $statement 4]
puts [string index $statement end]
puts [string first "is" $statement]
(string last)
puts [string first $statement "is"]
puts [string range $statement 4 end]
puts [string replace $statement 9 end "professor"]
puts [string match "*student" $statement] (* ? [])

String operations
set fRead [open source.txt r]
set fWrite [open target.txt w]
while {![eof $fRead]} {
set strLine [gets $fRead] ;#or gets $fRead strLine
regsub nocase all "fan" $strLine "kristy" strLine
puts $fWrite $strLine
}
close $fRead
close $fWrite

################ source.txt ################


Fan is a CSE student.
Fan is also one of Shanias fans.
Kristy and Fan are classmates.

File operations
unset: destroy a variable
unset num

Info exists : check whether the named variable has been defined
if {![info exists num]} {
set num 0
}
incr num

Notice the lack of $ in these commands

Some useful commands


eval: execute a command dynamically built up in your
program
set Script {
set Number1 17
set Number2 25
set Result [expr $Number1 + $Number2]
}
eval $Script
exec: execute external programs

Miscellaneous commands
pseudocode:
create a path which just has the start state
make this path the only member of the list of alternatives to be explored
while list of alternatives is not empty and not done
set firstpath to be the first path from the list of alternatives
update alternatives so it doesn't include the first path
set last to be the last member of firstpath
for each cell connected to the last member
create newpath with cell at the end of firstpath
if cell is 16
display path
else
add newpath to end of list of alternatives

Maze Tcl example


set bDone 0
set path [list 1]
set alternatives [list $path]
while {[llength $alternatives] > 0 && !$bDone} {
set firstpath [lindex $alternatives 0]
set alternatives [lrange $alternatives 1 end]
set last [lindex $firstpath end]
foreach cell $connected($last) {
set newpath [linsert $firstpath end $cell]
if {$cell == 16} {
puts "Answer is $newpath"
set bDone 1
break
} else {
lappend alternatives $newpath
}
}
}

Maze Tcl example


Help file
http://www.tcl.tk/scripting/
http://www.msen.com/~clif/TclTutor.html
Search site:
http://xyresix.com/nwsbook/search.html
List of Tcl commands with man pages
http://tcl.activestate.com/man/tcl8.4/TclCmd/contents.htm
Tcl examples:
http://www.beedub.com/book/2nd/tclintro.doc.html#2668
All code in this tutorial (plus some) and expected output
ftp://cslu.ece.ogi.edu/pub/kristina/
tutorial.tcl, tutorial_output.txt, source.txt

Tcl references and resources


CAD glossery
The CAD world contains many definitions
Not all CAD companies use the same name to describe an
object
In this course we will use the Synopsys notation

Introduction
Cell
Pin
Port
Net
Module
Instance
Netlist
Hierarchy
Flat
Standard cell
Cell row
Tracks

Definitions
cell

pins
Module

ports

instance
instance
A1
Q17

nets
Hierarchical netlist
Flat netlist
Cell rows Standard cells
tracks

You might also like