这一步也可以叫floorplan(布局规划),对设计进行布局规划。floorplan的合理性直接关系到芯片的时序收敛、布线畅通、电源稳定以及良品率等。这部分内容非常重要,只有这一步做好了,后面成功率就高。
floorplan阶段主要内容包括:
· 确定芯片的尺寸,core的面积
· 确定IO单元、corner pad和filler的位置
· 宏单元的位置和blockage的规划
· 电源地网络的分布
LAB2:Design Planning 设计规划
相关文件的准备:
orca_lib.mw/CEL:
orca_setup: 上一步 “ 数据设置 ” 后的ORCA设计,以Milkway格式保存。
design_data/ : 包含设计数据
ORCA_2.v 第二次通过的verilog网表
ORCA_2.sdc 第二次通过的sdc时序约束文件
scripts/: 包含各种布局规划脚本
2ns_pass_setup.tcl 执行第二遍数据设置的脚本
connect_pg.tcl 将所有P / G引脚逻辑连接到网络
insert_pad_filler.tcl 插入pad填充单元
keepout.tcl 对所有宏单元的位置隔离
macro_place_cons.tcl 宏位置约束
macro_pg_rings.tcl 创建宏组周的P/G ring
opt_ctrl.tcl 时序和优化控制
pad_cell_cons.tcl 定义pad单元位置
pns.tcl 电源网络约束/综合
preplace_macros.tcl 将三个宏单元连接到IO pad上
注:若遇到问题或卡住了,调用完整的脚本命令去恢复: .solution/run.tcl
1. 加载设计
- 启动ICC GUI模式
cd lab2_dp
icc_shell -gui
- 打开 orca_lib.mw 设计库中的 orca_setup 单元(该单元已经通过 " data setup " 阶段了),如下图:
由上图可以看到,Layout窗口中的所有宏单元、IO以及标准单元都叠放在坐标原点上。 - 执行时序和优化脚本文件
source scripts/opt_ctrl.tcl
- 依次选择以下步骤切换到Layout窗口中的 " Design Planning " 任务菜单。
2. 读入IO约束文件
- 创建physical noly cells(该lab可以忽略)
physical noly cells是指那些在网表中没有,但在芯片中又实际需要的一些单元,如IO corner、PG IO等。
在Layout 窗口的菜单栏中依次选择 " ECO" —" Create Cell "。即在弹出窗口中依次填入名字。(此次以IO corner举例)
注: a. IO corner是连接芯片拐角处两边的IO pad,连接衬底及衬底以上各个层,使得IO apd内部的电路形成一个电源地的供电环路。
b. IO corner不是必须的,当芯片只有一边或对边有IO时,为了节省面积,不需要IO corner;对于相邻边含IO时,一般会在拐角加上IO pad。如下图:
- 一般情况下,chip-level的芯片由core are和pad area两部分组成,core区域主要摆放std cells、macro。而IO约束文件指定了每个IO在整个芯片的位置和排列顺序,(如下图)。(如下图)
注: a. IO约束文件是需要自己手工编写的,所以在IO数目很多的情况下,比较容易出错。
b. 图中side指定了IO pad摆放在哪条边,其中从左边开始,顺时针方向依次为1、2、3和4;order指定IO pad的排列时序,从数字1开始,越大越往上或右摆放。 - 本lab提供的脚本文件已经完成了上面两个步骤,如下:
source -eco scripts/pad_cell_cons.tcl
查看日志文件(.log)输出为 " 1 ",表示这些单元已创建且被约束。
3. 创建布局规划
- 在Layout窗口的菜单栏中依次选择 “Floorplan”—“Create Floorplan”(2013前的ICC版本是initial_floorplan),弹出对话框如下:
- ICC工具有3种布局规划控制方案,如下:
a. Aspect ratio:指定芯片高宽比值及Core的利用率,当设计中不含macro时多用这种方案。
b. Width/Height:指定core具体的高度和宽度,一般含macro的设计,常用这种方案。
c. 指定core area和pad area之间的间隔。 - 将core utilization改为0.8,core到pad的间距均设为30,点击Ok,IO单元都已摆放在core四周,四个角落均有corner pad,每边都有4个PG pad如下图。