750 likes | 1.06k Views
自动布局布线软件. 2012 年 04 月 18 日. 功能要求. 功. 能. 要. 求. 系统建模. 系统建模. 行为设计. 不满足. Verilog. /. VHDL. (. ). 不满足. 电路仿真. 行为仿真. 满足. 满足. 综合. 、. 优化. 手工设计. 网表. 版图. 不满足. 不满足. 时序仿真. 满足. 后仿真. 版图自动. 满足. 布局. 、. 布线. 流片. 、. 封装. 、. 测试. 不满足. 后仿真. 满足. 流片. 、. 封装. 、. 测试. IC 典型流程.
E N D
自动布局布线软件 2012年04月18日
功能要求 功 能 要 求 系统建模 系统建模 行为设计 不满足 Verilog / VHDL ( ) 不满足 电路仿真 行为仿真 满足 满足 综合 、 优化 手工设计 网表 版图 不满足 不满足 时序仿真 满足 后仿真 版图自动 满足 布局 、 布线 流片 、 封装 、 测试 不满足 后仿真 满足 流片 、 封装 、 测试 IC典型流程 数字VLSI 流程 模拟IC 流程 Matlab Matlab Modelsim, Questasim, Muxplus II Spectre Virtuoso, laker Design Compiler Astro, Encounter Spectre Calibre Modelsim, Questasim, Muxplus II
主要内容 • 自动布局布线基本概念 • 自动布局布线工具介绍 • Astro工具使用 • 后仿真 • 演示
自动布局布线基本概念 • 版图,GDS,(Graphic Data System),用来控制集成电路光掩膜绘制 。 • 自动布局+自动布线=画完版图
自动布局布线工具介绍 1.Synopsys的Astro。2002年以前叫Apollo,2007年以后软件名称改为IC Compiler(ICC) 。 2. Cadence的SOC Encounter
两个工具比较 工艺库格式不同,Astro需要二进制db格式,Encounter需要ASCII形式的.lef文件 Astro一个进程可以打开多个cell,命令行不占用Terminal,而Encounter一个进程只能打开一个cell,命令行占用Terminal。 Astro能读入GDS,支持CEL view,Encounter不支持读入GDS。 Astro没有提供Calibre的接口,不能读入Calibre DRC的结果,Encounter可以直接读入Calibre的运行结果
参考库 时序约束文件 IO管脚排列文件 工艺文件 门级网表 数据输入 布局规划 布线 布局 静态时序分析,后仿真 时钟综合 DRC、LVS 流片 Astro自动布局布线流程
数据输入 • 工艺库文件--是Foundry或IP提供商提供的各种库(标准单元库、IO库、SRAM库和IP库)和工艺文件 --网站下载 • 设计文件—网表文件(.sv文件)和时序约束文件(.sdc文件)--都是DC综合得到 • 管脚排列文件(.tdf文件)--手动编写,保存成XXX.tdf到任意你能找到目录里。 • 课件中是在软件启动目录下创建了一个data目录来保存tdf文件
IO管脚排列文件 • IO顺序 • 插入一些特殊的IO单元: • IO电源 • IO地 • Corner
IO管脚排列文件--tdf 注意空格 • ;1.1V digital core power/ground • insertPad "VDD" "PVDD1RN" "VDD" "VDD" • insertPad "VSS" "PVSS1RN" "VSS" "VSS" • ;3.3V digital IO power/ground • dbCreateCellInst (geGetEditCell) "" "PVDD2RN" "VDD_IO" "0" "No" '(0 0) "fsk0323" • dbCreateCellInst (geGetEditCell) "" "PVSS2RN" "VSS_IO" "0" "No" '(0 0) "fsk0323" • ;Corner cell • dbCreateCellInst (geGetEditCell) "" "PCORNERRN" "CORNER1" "0" "No" '(0 0) "fsk0323" • dbCreateCellInst (geGetEditCell) "" "PCORNERRN" "CORNER2" "0" "No" '(0 0) "fsk0323" • dbCreateCellInst (geGetEditCell) "" "PCORNERRN" "CORNER3" "0" "No" '(0 0) "fsk0323" • dbCreateCellInst (geGetEditCell) "" "PCORNERRN" "CORNER4" "0" "No" '(0 0) "fsk0323" • tdfPurgePadConstr • pad "CORNER1" "Bottom" • pad "CORNER2" "Right" • pad "CORNER3" "Top" • pad "CORNER4" "Left" • pad "VDD_IO" "left" 1 • pad "VSS_IO" "left" 2 • pad "data_in_block" "top" 1 • pad "fsk_out_block" "top" 2 • pad "VDD" "right" 1 • pad "VSS" "right" 2 • pad "clk_block" "bottom" 2 • pad "en_block" "bottom" 1 insertPad 使用方法: insertPad netName padCellName padName connectPin dbCreateCellInst 使用方法: dbCreateCellInst cellId childLibName chlidCellName chilidInstName rotationStr mirrorStr Points topCellName
工具启动 • 创建软件启动目录 mkdir astro • 进入软件启动目录 cd astro • 创建保存tdf文件的目录 data • source /opt/demo/synopsys.env • astro_shell &
工具界面 命令输入 例如:help “insertPad” 查看insertPad 命令使用方法
创建设计库 Technology File: /home/smic/smic_40/SCC40NLL_HS_RVT_V0p1a/astro/tf/scc40nll_hs_7lm_1tm.tf
任意名 设计文件导入1/3 逻辑综合后得到的网表的顶层模块名
设计文件导入2/3 • 设置 电源线VDD 地线VSS
设计文件导入3/3 /home/smic/smic_40/SCC40NLL_HS_RVT_V0p1a/astro/SCC40NLL_HS_RVT_V0p1 /home/smic/smic_40/SP40NLLD2RN_3P3V_V0p2/apollo/SP40NLLD2RN_3P3V_V0p1_7MT_1TM/ • 添加两个参考库 • 一个是标准单元 • 一个是IO
布局规划 • 确定芯片的尺寸、 • 模块的位置、 • 标准单元的排列形式、 • IO单元及宏单元的位置放置、 • 电源和地线的分布
布局规划--流程 1.装载IO管脚排列文件 整体规划 2.芯片面积、标准单元布局方式的选择 3.宏单元放置 1.将标准单元、IO单元和宏单元的电源、地端口与电源线、地线相连。 电源/地线规划 2.在核(Core)和IO单元之间加入电源/地环(ring)。 3.加Strap。 4.将芯片的Ring连接到电源/地IO的电源、地端口。 加Pad Filler 加布局障碍
整体规划—标准单元布局 芯片面积受两方面因素决定: • pad限制的设计 (Pad Limited Design), IO数量较多。 • core限制的设计(Core Limited Design),标准单元和宏单元(SRAM和IP)的数量较多。
整体规划—标准单元布局 在设计窗口中选择 Design Setup->setup floorplan
IO摆放 • IO之间的间距 取决于封装厂封 装水平
电源/地线规划 • 电源/地线网络分布在整个芯片,其作用: • 为每一个单元提供稳定的电压 • 直接关系到芯片的性能 • 一个完整的电源/地网络的设计还应考虑: • 电压降(lR Drop) • 电迁移(EM,Electromigration)
电源/地 环规划 • 在核(Core)和IO单元之间加入电源/地环(ring)。 • 连接内部电源/地和电源/地IO的纽带。 • 电源/地环上的电流是最大的,因此它的线宽也最大。(一般是1mA/um ) • 在设计窗口中选择PreRoute->Rectangular
电源/地线规划 • 将标准单元和宏单元的电源、地端口与电源线、地线进行逻辑相连。 • 在设计窗口中选择Pre Route->Connect Ports to P/G
电源/地线规划 VDD 的net type是 Power VSS 的net type 是 Ground
再连接VSS 电源/地 环 与电源/地Pad 连接
加Pad Filler • 加Pad Filler是为了填充IO单元与IO单元之间的间隙,使IO连在一起。在设计窗口中选择PostPlace->Add Pad Fillers • 在Filler栏填写Filler单元名称时要注意填写顺序,要求宽度大的填在前面。 • 40nm 库中得pad filler 有以下几种: PFILL20RN, PFILL10RN, PFILL5RN, PFILL2RN, PFILL1RN, PFILL01RN, PFILL001RN,
布局 • 布局(Placement)是确定每个标准单元位置的过程。一个合理的布局要求: • 每个标准单元都放在有效的位置上 • 单元间没有重叠。 • 布局的好坏影响: • 芯片的面积, • 芯片的性能、 • 布通率 • 整个后端设计的时间
装载时序约束文件(Load SDC) 时序设置(Timing Setup) 布局选项设置(Set Placememt Optiom) 预布局(Pre Place ) 布局(In Place) 布局后的第一次优化(Post Place) 布局流程
布局流程—装载时序约束文件 • 时序约束文件(top_pad.sdc是逻辑综合软件DC产生的)主要定义了: • 芯片的工作时钟频率,时钟歪斜、抖动 • 输入输出延时以及输出负载
布局流程—时序设置 • 在设计窗口中选择Timing-> Timing Setup,在弹出的窗口中进行用于静态时序分析的选项设置。 0.1
布局流程—布局选项设置 在设计窗口中选择InPlace->Placement Common Options,在弹出菜单的“Optimiaztion Mode”一栏中选择“Congestion”和“Timing”,表示选用时序和拥塞共同驱动的布局。其他选项可以缺省。
布局流程—预布局及时序分析 • 预布局阶段主要是对高扇出网线进行优化: 1.在设计窗口中选择InPlace->Auto Place, 2.在弹出窗口的“Stage”一栏选择“Pre-place”,并点击菜单中的“Detail Options”按钮, 3.在“Pre-Place optimization”一栏中选择“Cell Down Size”,其他选项缺省
Slack 为负表示不满足,需要再优化 布局流程—预布局及时序分析
时钟树综合 • 时钟树综合的主要目的是减小时钟偏差。 • 时钟偏差是指从时钟源点(Source)到各时钟汇点(Sink)的最大延时时间的差值。
时钟树综合 • 时钟树综合:在时钟网络中插入时钟缓冲器(buffer) 。 • 在布局之后布线之前,这时: • 每个单元的位置确定 • 电源/地已预布线, • 关键时序路径上的单元已被优化, • 不存在建立时间上的时序违反,
时钟树综合—时钟选项 • 时钟树综合前,首先要设置时钟树选项。这些选项包括: • 环境 (最好、最坏及典型)、 • 时钟偏差类型 (全局时钟偏差、局部时钟偏差及有用时钟偏差)、 • 优化程度、 • 时钟定义、 • 时钟缓冲器及倒相器定义、 • 时钟树结构和时钟树优化方式以及目标的设置。 • 在设计窗口中选择Clock->Clock Common Options,在窗口中进行相关选项的设置 。
时钟树综合—时钟偏差分析 • 时钟树综合后,分析时钟偏差、最小插入延时是否符合设计要求。在设计窗口中选择Clock->Skew analysis。
时钟树综合—重新时序分析 • 时钟树综合之前,所有的静态时序分析都是基于一个理想的时钟网络(时钟偏差为0)来分析的。 • 时钟树综合后,需要考虑Clock Skew后再次进行静态时序分析,因此需要重新设置时序选项。 (tcl “set_propagated_clock [all_clock]”)
做到这一步,setup slack 一定要为正,hold slack最好也为正,不过如果slack为-0.0X也可以,等布线完再优化。 时钟综合后的布局优化及时序分析
布线 • 布线工具根据单元的连接关系及时序约束进行自动布线,使关键路径上的连线尽量短。布线包括: • 时钟布线 • 普通信号布线 • 布线主要分: • 全局布线(Global Route) • 布线通道分配(Track Assignment) • 详细布线(Detail Route) • 布线修补(Search & Refine)