本文介绍在innovus里写一个tcl函数实现插入某cell的阵列的方法。
如上图,插入一个cell阵列,3行4列。只需要知道左下角的cell的坐标(x_start, y_start)
、X方向的间隔x_interval
、Y方向的间隔y_interval
,就可以算出所有cell的坐标。
除了坐标,还需要对inst进行编号,可以由前缀prefix
和起始计数器inst_start
组成。
下面是
#---------------------------------------------------------------
# func: add_inst_array
# cell
# prefix
# inst_start
# x_start
# x_interval
# x_total
# y_start
# y_interval
# y_total
#
proc add_inst_array {cell prefix inst_start x_start x_interval x_total y_start y_interval y_total} {
set y ${y_start}
set inst ${inst_start}
for {set i 0} {${i} < ${y_total}} {incr i} {
set x ${x_start}
for {set j 0} {${j} < ${x_total}} {incr j} {
puts "addInst -cell ${cell} -inst ${prefix}_${inst} -loc \"${x} ${y}\" -physical -place_status fixed"
addInst -cell ${cell} -inst ${prefix}_${inst} -loc "${x} ${y}" -physical -place_status fixed
incr inst
set x [expr ${x} + ${x_interval}]
}
set y [expr ${y} + ${y_interval}]
}
}
要使用时,需要读入上面这个函数定义,读一次就可以。然后调用add_inst_array
,并传入各个参数,就可以方便的添加这个阵列了。
add_inst_array FILLERCC16CS9 CAP 224 3166.22 0 1 174.16 4.32 19