ICC Custom Floorplan
本文介绍 ICC 进行特定形状的 Floorplan 设计以及PIN脚摆放的方法。
需求背景
在混合信号电路中,数字电路部分的Floorplan通常需要配合模拟电路,因此需要实现特定的形状,以及固定于模拟电路位置匹配的PIN脚位置。ICC的图形界面中提供了一些快捷的T型、L型等Floorplan的设计方法,但仍然难以满足定制化设计的需求。本文介绍使用脚本完整 ICC Custom Floorplan 的方法。
Custom Pin Location
确定PIN脚位置
在顶层设计中,先固定模拟电路以及数字电路的接口位置,以便两边可以根据定义提前进行后续设计。在Cadence Virtuoso中可以到处PIN脚位置描述文件,其格式示例如下:
*********************************************
Library : layout_test
Cell Name : test_cell
View Name : layout
Created : Feb 17 15:58:58 2021
*********************************************
"signal_i<0>" 1125.05 1200.05 "M3" "pin"
"signal_o<0>" 2500.05 2800.05 "M4" "pin"
我们需要自己编写脚本文件(例如Python),将其转化为 ICC 可以读取的 tcl 文件。
# pin_physical_constraints.tcl
set_pin_physical_constraints \
-pin_name {signal_i[0]} \
-layer {M3} \
-off_edge location \
-location {1125.05 1200.05}
set_pin_physical_constraints \
-pin_name {signal_o[0]} \
-layer {M4} \
-off_edge location \
-location {2500.05 2800.05}
WARNING: ICC中确定PIN位置的location坐标,指的是PIN这个方格的左下角。而Virtuoso一般默认为label所在位置。在脚本文件中需要手动加以校正。
ICC 读取 PIN 脚约束
set ICC_IN_PIN_PAD_PHYSICAL_CONSTRAINTS_FILE "pin_physical_constraints.tcl"
read_pin_pad_physical_constraints $ICC_IN_PIN_PAD_PHYSICAL_CONSTRAINTS_FILE
set_fp_pin_constraints \
-block_level \
-hard_constraints {layer location}
WARNING: 必须使用 set_fp_pin_constraints
命令,否则及同读入了tcl文件,ICC也不会按照它的设定工作。
Custom Floorplan
Synopsys 的Student Guide中推荐使用 ``命令。但该命令建立的floorplan的尺寸和用户设定的值有偏差,会自动偏移到最小height/width的整数倍(猜测)。因此如果要准确的定义 floorplan,则不能用此命令。(ICC Version: …)
假设我们需要实现下图所示的floorplan,分两步进行。首先建立一个 boundaray,之后再boundary的基础上建立floorplan 并制定 io2core 的值。这样得到的 floorplan的尺寸和我们设定的才能完全一致。
########################################
## (50,100) (100,100)
## _______
## | |
## (0,50) | |
## --------- |
## | |
## | |
## | |
## -----------------
## (0,0) (100,0)
########################################
create_boundary -poly \
{ {0 0} \
{100 0} \
{100 100} \
{50 100} \
{0 50} \
}
initialize_rectilinear_block \
-use_current_boundary \
-left_io2core 10 \
-right_io2core 10 \
-top_io2core 10 \
-bottom_io2core 10
NOTES:ICC 还提供了另外一种方法 (记不清了,回忆起来后补充)。但在ICC运行到该命令时总是崩溃退出。
Leave a comment