后端设计流程_第1页
后端设计流程_第2页
后端设计流程_第3页
后端设计流程_第4页
后端设计流程_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

后端设计流程后端设计流程 ASIC SoC 后端设计作业流程剖析 Toshiba 美国 秦晓凌 Trident 上海 潘中平 关键词 place route DSM megacell clock tree STA OPT ECO 引言 众所周知 ASIC 产品是从用硬件描述语言 verilog HDL VHDL 开始进行数字逻辑电路设计 的 经过相关的仿真 综合出门级网表 验证直至完成电路布局布线并优化 最终经流片成功形成的芯片产 品 随着中国经济的持续稳定地增长 国内生产厂家对 IC 需求增长势头强劲与自身设计 IC 能力薄弱的突 出矛盾已经被国家和企业认识 为了缓解这一矛盾并更多地实现 IC 自主设计 近两年国内陆续出现了一些 著名的传统通信系统厂商设立的 IC 设计队伍 以及归国留学人员领头创办的创业型 IC 设计公司 他们大多 数有相当强的前端设计能力 但在 IC 后端设计领域的实践经验还较欠缺 在完成前端逻辑设计综合出门级 网表后 真正能做好后端设计的公司还不多 有的则通过委托设计服务的方式完成后端布局布线及流片 本 文 作者有多年从事覆盖前后端 IC 设计全流程并有每年几次成功流片数百万门级深亚微米 SoC 的经验 并担任 IC 设计的项目管理工作 对国外大公司的设计流程十分熟悉 并愿意就积累的经验与国内同行分享交 流 以利于国内 IC 设计水平的提高 本文着重介绍国内设计公司薄弱的后端设计 介绍其流程并对在设计过 程中的关键步骤进行一些讨论 传统的后端设计流程指的是从门级网表 gate level netlist 开始的 根据设 计要求的不同 后端流程可以分为扁平流程 flat flow 和层次化流程 hierarchy flow 两种 在深亚微米 DSM deep sub micron 领域 又增加了布局加逻辑合成的前后端合二为一的扁平流程 flat flow 和分层流 程 hierarchy flow 我们首先介绍传统的两种后端流程 前后端合一的流程将作为另一个专题在以后讨论 一 扁平流程 Flat flow 介绍 最简单的后端设计是扁平 flat 流程 一般四百万门以下的设计均可使用这一流程 芯片设计的 最高境界是设计完成后一次性投片 Tape Out 成功 这一成功必须建立在正确的前端电路逻辑设计和科学合 理及高效的后端布局布线上 要想获得最后的成功 设计阶段就来不得带有半点的侥幸心态 否则就算在电路 功能上满足设计要求 在参数性能上的任何失误也是导致返工的重要因素 因此 后端设计阶段很难保证一 遍成功 走几个来回是常事 要期望在最终投片时一次成功 就需要在设计阶段多下工夫 我们不妨给这 些大循环起个名字 第一轮叫试验 trial 第二轮叫首次签收 first Sign Off 第三轮叫最后签收 final Sign Off 每轮包括的前后端设计主要任务和结果如表一所示 不同的循环应该有不同的侧重点 为了节省时间 这些大循环还应该尽可能安排前后端设计同步进行 Trial 80 模块设计完成数据库准备 流程确认 流程运行中问题的解决 主要设计数据 芯片大小 总体布局 大体时序 的可行性确认 First Sign Off 100 设计 DFT I O 完成 数据库已确定 时序收敛基本完成 没有大的拥塞 congestion Final Sign Off 最后细小的功能修改 时序收敛 所有时序和布局布线问题解决 我们在简单介绍每一步工作的同时 着重介绍应该注意的问题 遇到的困难和解决的方法 A 质量检查 Quality check 在流程的开始 至少有三样东西需要前端工程师提供 门级网表 gate level netlist 时序约束 timing constraint 和时序分析报告 timing analysis report 其中网表文件是最重要的 拿到它之后 先不 要急于将它放到后端 EDA 软件里去 而是要先检查一下它的质量 确认已消除哪怕是细小的错误 瑕疵 比 如检查有无以下情况 文法错误 连接短路 无任何连接的 net 无驱动的输入引脚 pin assign 语句 wire 类型以外的 net 使用了由 开始的特别字符 数据总线的写法 名字的长度等 不同的厂家和软件 对此都会有一些限制 为了后续工作的方便 建议定义一套比较严格的网表书写规则 例如 不许有 无任何连接的 net 和 无驱动的输入 pin 无 assign 语句 只允许线 wire 型 net 所 有名字只许使用大小写英文字母 数字和下划线 头一个文字是英文字母 长度小于 1024 模块之间的 调用一律使用 explicit 格式 这些要求看似繁琐 但是只要事先同前端工程师说明 在做逻辑合成之前设 定好几个参数就可以了 并不增加他们的工作量 其次要看设计是否需要 DFT 可测试性 ATPG 自动测 试格式生成 如果要的话 检查是否符合扫描链 scan chain 和存储器内建自测 memBist Memory BIST 的设计要求 然后要仔细阅读拿到的时序约束 timing constrain 文件 检查时序设定是否完整 合理 最 后要流览时序分析报告 如果有 setup violation setup 冲突 存在的话 一般不允许大于时钟周期的 10 hold violation 暂时可以不解决 留到布线后再去除 B I O 单元布置 I O Place 按顺序摆放 I O PAD 本不是难事 但是如果考虑到内部各模块的位置 电源 PAD 的个数和种 类时 有时排放 I O PAD 也要仔细斟酌才行 不同种类的信号 PAD 需要不同种类的电源 有些相同电压 的电源也是不能共用的 特别是模拟信号及其电源本身都需要与其它信号隔离 电源 PAD 的个数计算要兼 顾芯片封装的最低要求和芯片内部的功耗 近两年常用的一种叫倒装片 flip chip 封装 其核心电路的供电 不象传统的芯片由四周的电源 PAD 供电 而是由芯片中部的电源 PAD 直接从顶部灌到芯片中去 这种设 计大大降低了对四周电源 PAD 的个数要求 在试验轮 trial 时如果无法确定 PAD 个数 种类和位置 可 以暂时跳过这步 并同时无视与 PAD 直接相连 net 的时序 C 兆单元布置 Megacell Place ADC DAC PLL memory 这类部件属于兆单元或称巨集 megacell 所有的后端 EDA 布局软件都有自动放置兆单元 megacell 的功能 但是很少听说厂家建议用户去相信自动放置后的结果 基本上来讲 在有五个以上兆单元 megacell 的设计中 这一步属于手工劳动 排放前要同前端工程师 沟通 了解运算数据的流向 各大模块间的关系和位置 依此来决定兆单元 megacell 的大体位置 在 逐一放置各个兆单元 megacell 时 要考虑其引脚 pin 的位置 方向 数量及相互间的对应关系 因为兆单元 megacell 常常会禁止几层金属布线层的使用 所以要注意给穿过它的信号线留有足够的空 间 特别是兆单元 megacell 之间的距离 如果兆单元 megacell 本身没有电源环 power ring 则 要在它四周留下更大的空间以备加环 环的宽度由厂商提供的公式 依速度 数据变化率求得 有些软件 可以将相邻的几个兆单元 megacell 合在一起做个环以节省空间 此时公共环的宽度应该是各个单独环 宽度中最大者 常见的布局规划 floor plan 方法是兆单元 megacell 放在四周 标准单元 standard cell 放在中间 留给标准单 standard cell 的空间形状以方形为好 应尽量避免采用预留 L 形 U 形或几个分 离的标准单元 standard cell 空间方法 但是这也不可以一概而言 它和设计本身关系密切 要依据情况 分析而定 兆单元 megacell 的排放极其重要 它可以决定后期工作的难易 建议在此多花工夫 找专 家商量一下 力求精益求精 D 行通道生成 Row Generation 行通道 Row 是为放标准单元 standard cell 用的 其整体形状已经被兆单元 megacell 的位置大致决定 行通道 row 和兆单元 megacell 之间要留有一定的空间 以利于兆单元 megacell 的信号连线 在兆单元 megacell 之间做少许行通道 row 以备连线过长 加缓冲器 接力 或生成时钟树时使用 E 电源布线 Power Routing 电源布线前的功耗估算不是一件简单的事情 过于保守则功耗过大 芯片封装无法承受 过于 乐观则有供电不足而影响速度的危险 到底什么才是合适的功耗只有在芯片做成之后才知道 建议在管脚 和面积允许的范围之内多留一些富裕 电源布线时依各个模块的功耗不同 布线密度并不相同 布线完了 应该用 IR drop 检验整体的供电情况 在传统的通过四周管脚供电 标准单元 standard cell 放在中央的 设计中 标准单元 standard cell 集中的 row 的四周应该考虑加一圈电源环 环的宽度按如下方法计算 环 的宽度 所有 row 的电源线宽度之和 四周直接供电电源条数之和 E 布局 Placement 布局主要指的是如何合理地放置标准单元 standard cell 我们并不希望软件过多地移动已经 放好的兆单元 megacell 布局可以简单地根据 cell 的连接进行 也可以根据时序要求来做 还可以以 拥塞程度 congestion 为主进行 随着芯片速度的提高 越来越多的人首先选择按时序要求来布局 这时 先前入手的时序约束 timing constrain 就派上用场了 在布局开始之前 有人喜欢做一些分组 group 或分 区 region 其好处是可以告诉布局软件一个大致的摆放范围 但是有一点要记住 这种作法会同所给的 时序要求发生矛盾 特别是对边界的连接单元 cell 所以建议在定义分组 group 或分区 region 时 尽量 宽松一些 并允许一定百分比的单元 cell 放在分组 group 或分区 region 之外 这样 做的结果同所谓的 变形虫 amoeba 布局有同样的效果 如果使用有时序要求的布局 而布局用的 时序引擎 timing engine 与布线或计算延迟用的引擎 engine 不一样 则要注意引擎 engine 之间的计算误 差 它们有时会有 10 倍之差 如何有效地减小误差是一件技术性很强的工作 因为这常常涉及到数据库中最底层参数的变动 不 同的软件多少都会留几个相关的参数用来调整误差 要谨慎使用两三年前出售的布局软件中的再优化功能 先作个小的验证后再决定是否使用 如果有扫描链 scan chain 可以考虑在此时按照单元 cell 的物理位 置做一次重新排序 以减少不必要的连线长度 但是在空间不紧张的情况下 不做扫描链 scan chain 重 新排序也未尝不可 毕竟它要花费时间 还要重新生成测试向量 F 时钟树 Clock Tree 我们将时钟树 clock tree 和缓冲器树 buffer tree 合在一起 并且着重讨论时钟树 clock tree 因为二者的区别是缓冲器树 buffer tree 一般只考虑驱动能力而不在乎树的延迟 和扭曲 skew 等问题 它主要用于复位 reset 扫描使能 scan enable 等无时序要求的连线 所以知道了如何做时钟树 再来做 缓冲器树就变得容易多了 做时钟树会碰到以下几项必要的指标 树的根结点 时钟周期 树的最大延迟 树的最小延迟 扭曲 skew 传递时间 transition time 和缓冲器的种类 还有一些可选项 特别要作叶 子的结点 leaf pin 特别不要作叶子的结点 excluded pin 和特别需要保留在时钟树里的单元 cell 保 护单元 preserved cell 等 搞清楚各个指标的优先顺序 按其特点设定一组特别的参数 可以检测出 软件的潜在能力 比如 CADENCE 的 CTGen 如果设定树的最小延迟为 0 0ns 树的最大延迟为 0 1ns 扭曲 skew 为 0 0ns 或是设定树的最小延迟为 0 0ns 树的最大延迟为 10 0ns 扭曲 skew 为 0 0ns 在这两种不近情理的极端情况下 可以得到最小延迟和最小扭曲 skew 的时钟树 时钟树对位 置十分敏感 有时稍微调整一下中间几个单元 cell 的位置就会得到意想不到的好结果 这是一种需要多 实践 多摸索的经验 再复杂一些的问题有 门时钟 gated clock 生成时钟 generated clock 多时钟 multiple clock 和时钟树与时钟树之间的扭曲 skew 一般软件可以自动处理 gated clock 但是不一定会 处理 generated clock 和 multiple clock 解决方法是 让软件做两次树的生成 第一次生成主要的树 第 二次生成另一个 并在已经做好的树的根结点上加一个特别的延迟 对于时钟树与时钟树之间的扭曲 skew 如果软件不会自行处理 则要用树的最大最小延迟来控制 最后提醒一句 做时钟树时也要计算 线间延迟 所以同样会有布局中提到的不同时序引擎 timing engine 之间的误差的问题 最近有些软件会 利用时钟扭曲 clock skew 帮助解决 setup 冲突 setup violation 其结果是时钟扭曲 clock skew 很大 但 是时序很好 G 静态时序分析和优化 STA OPT 到此我们已经有了一个完整的布局结果 如果没有拥塞 congestion 问题 就可以按预估线长 提取延迟数据作静态时序分析和再优化了 此时要注意的问题有 延迟数据的精度和误差 静态时序分析 所用条件的更改 例如把理想时钟 ideal clock 变成传播时钟 propagated clock 输入 input 和输出 output 延迟的更改 再优化时是否提供了详细的布局信息和所用时序引擎 timing engine 之间的误差等 再优化软件的选择非常重要 好的软件可以很快达到收敛的目的 差的软件会一遍一遍地绕圈 浪费很多 时间 软件的好坏与设计和工艺密切相关 很难一概而论 若要更详细的资料 请留意参阅本文作者在其 它同期 IC 相关刊物上发表的文章 EDA 工具的选择 事先对再优化软件作个性能评估是明智和必要的 H 布局工程变更 Placement ECO 通常我们说 ECO 是指所变更 包括增加和删除 单元 cell 的总数少于 10 的情况 太大的变更 建议从头再来一遍 如果不想变更时钟树 则要求 ECO 没有触发器的增减和位置的挪动 但是可以允许 变更现有触发器的大小 size up down 如果时钟树尚未布线 而一般的逻辑组合单元 cell 则可以作任 何的修改 布局变更 Placement ECO 和静态时序分析和再优化 STA OPT 可以多次循环 直到没有大 的冲突 violation 为止 I 布线 Routing 布线时首先留出模拟信号用的走线和隔离空间 然后考虑时钟树的布线 此时因为还没有数字 信号走线 所以可以有很大的自由来选择用传输速度较快的金属层作时钟树布线 最后是数字信号布线 如果布线软件可以考虑时序要求 建议使用这一功能 如果没有这个功能 并且又有一些关键路径 critical path 则可以加权给这些 net 让它们优先被布线 布好线的结果中 如果没有大面积或集中在 一起的布线问题 可以暂时不去修正自动布线产生的小问题 而先作 STA 因为很可能会有布线工程变 更 routing ECO 要作 J 静态时序分析和再优化 STA OPT 因为布线已经完成 这时提取出来的延迟数据应该是十分真实的了 在此基础上作的再优化应 该能够有效地去除任何 setup 和 hold 冲突 violation 其它注意事项与布局后的 STA OPT 相似 万一试 过手头所有的软件 仍然有少量冲突 violation 存在时 手工修改是最后一招了 K 布线工程变更 Routing ECO 这时 ECO 所受到的限制比布局变更 placement ECO 更多 不能有任何触发器的修改 只能变 更逻辑组合单元 cell 任何与时钟树相连单元 cell 的变更都会导致时钟树连线的变化 为了尽可能地减 少对时序的影响 建议用手工做时钟树的修改 布线变更 routing ECO 可以循环多次 直到所有 setup 和 hold violation 去除为止 L 签收交付 Tap Out 以上是对传统的后端 flat 流程的简单介绍 在实际工作中 还会有不少附加的工作 例如对有小修 改的网表做 formal 验证 在几个大的里程碑处 做详细的仿真 以确保电路与原设计功能一致 如果希 望结合利用不同软件的优点来完成整个流程 数据传送和格式转换又是另一个话题 在这些过程中 工程 师需要自己写一些小的脚本程序 script 去帮助完 成工作 二 层次化流程 Hierarchy flow 简介 当芯片的规模过大时 考虑到软件的承受能力和运行时间 我们不得不使用层次 hierarchy 化流程 与扁平 flat 流程相比 分层 hierarchy 流程有不少附加的工作要做 如果不是必须 工程师一般不愿意用 它 下面的心得 体会 重点放在没有扁平 flat 流程的环节上 A 顶层布局规划 Top floorplan 主要决定每个物理模块的大小 形状和位置 除一些模拟电路有特殊要求 需要放在最顶层以 外 尽量将数字电路归入各个模块 其余事项与扁平 flat 流程的兆单元布置 megacell place 相似 B 创建和布置宏单元 Create Place Macro 生成和放置各个模块时 要注意模块间的间距 最顶层的走线 缓冲器的插入都会使用这些空 间 C 电源布线 Power routing 用与扁平 flat 流程相同的方法在最顶层做完电源布线后 可以将结果打到各个模块中去 这样也就把各模块的电源布线做完了 D 全局引脚优化 Global Pin Optimization 一般软件会按照最短距离来自动决定所有模块的输入输出引脚 IO PIN 依据条件可以分别对 模块的 PIN 间距 使用的金属层和方向 哪侧可以使用 哪侧不能使用 做特别定义 注意检验优化好的 PIN 不要和电源线有冲突 如果一个模块被多次调用 在同时对这几个模块作 PIN 优化时 因为每个模块 的位置不同 一个 PIN 会有多个最优化的位置 哪个是需要的 要事先指定清楚 或者干脆就不允许一 个模块的多次调用 E 时序分配预算 Timing Budget 从最顶层的时序要求算出各个模块的时序要求时 要验证算法的合理性 比如 从模块 A 到模 块 B 共有 10ns 的时间 A 本身要 2ns B 本身要 5ns 剩下的 3ns 如何分配 全部给 A 全部给 B 一 半一半 还是按比例分配 以上各种分法都算合法 但是如果将这 3ns 用两次 既给 A 又给 B 就不合 理了 相反 在时序不够时 也会有类似的问题发生 F 模块分层 Block Level 各个模块内部的布局布线 作法大致与扁平 flat 流程相同 不再赘述 在完成最后的布线后 为了最顶层的布局布线 要多一步 抽取模块的物理属性和时序属性的工作 模块的时序属性是为减少最顶层的运算量准备的 这在 SoC 中 十分有效 G 修改布局规划 Update Floorplan 做完模块内布局布线的各步工作后 再回到最顶层 首先用抽出的实际物理属性和时序属性替 换以前的模块 H 顶层布局 Top Placement 如果有其它未确定位置的单元 cell 还要做一次最顶层的布局 I 顶层时钟树 Top Clock tree 因为各模块已经有时钟树 最顶层的时钟树只需要作到各个模块的 PIN 为止 由于每个模块中 时钟树的最大最小延迟不同 要象扁平 flat 流程中提及的方法那样 在 PIN 上设定一个特别得到延迟 顶层布线 Top Routing 和交付 Tap Out 无特别需要另外陈述的 结束语 本文介绍的后端设计流程是对后端设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论