ICC2命令每日精要 | 打破DRC噩梦的“Keepout Margin”秘籍

大家好!今天我要给大家安利一个数字后端物理设计中的“救命稻草”——ICC2里的 create_keepout_margin 命令!这个命令堪称解决布局混乱、短路问题的神器,尤其在面对那些“易短路的AOI/OAI单元”时,简直是物理设计工程师的福音!

一、什么是 Keepout Margin?
想象一下,你刚摆好一块精密的电路模块,如果周围没有“安全距离”,布线时很容易出现信号打架、短路甚至 DRC 报警。create_keepout_margin 的作用就是给这些模块划出“禁飞区”,确保其他元件和布线不会靠近,相当于给电路模块拉了一道“警戒线”。

这个命令有两种边界设置:

  • 外边界(outer):完全禁止其他元件靠近模块的外侧区域,是防止干扰的第一道防线。
  • 内边界(inner):在模块内部设置隔离缓冲区,常用于层次化设计,确保模块内部的关键信号不受干扰。

你以为这是在“自找麻烦”?No!这是让工具自动避坑的高效操作,避免后期 DRC 翻车!

⚙️ 二、三大核心选项分类与实战
虽然 create_keepout_margin 的选项看起来很多,但其实可以分为三大类,每类都有自己的“杀手锏”:

【门派1:边距控制】

  • -outer {左 下 右 上}:直接指定模块四周的禁区尺寸,是防止干扰的“硬核武器”。
    案例:给所有 A0I* 单元设置左0.28、右0.23的外边距(底部/顶部不限制)

    create_keepout_margin -outer {0.28 0 0.23 0} [get_lib_cells */A0I*]  
    
  • -inner {左 下 右 上}:控制模块内部的隔离区域,适合层次化设计。

    create_keepout_margin -inner {5 5 5 5} [get_cells hierarchical_block]  
    
  • -tracks_per_macro_pin:根据引脚密度自动计算禁区尺寸,数值越大越保守(0.5是黄金值)。
    搭配技:用 -min_padding_per_macro-max_padding_per_macro 限制推导结果的上下限,避免设计过激。

    create_keepout_margin -tracks_per_macro_pin 0.5 -min_padding_per_macro 0.1 -max_padding_per_macro 0.2 [get_cells macro_xy]  
    

【门派2:类型约束】

  • -type:决定禁区的“硬核程度”。

    • hard:工具必须100%遵守,适合初版设计(DRC终结者)。
    • soft:允许动态调整,适合优化阶段(灵活试探)。
      案例:硬核模式保护关键模块
    create_keepout_margin -type hard -outer {0.3 0 0.3 0} [get_cells critical_macro]  
    
  • -layers:指定特定金属层设置禁区,不影响其他层的布线自由度。
    案例:仅在 M2-M4 层设置布线禁区

    create_keepout_margin -layers "M2 M3 M4" -outer {0.2 0 0.2 0} [get_cells noise_sensitive_block]  
    

【门派3:隐藏技能】

  • block_and_cell_list:指定要保护的模块/单元列表,支持通配符快速批处理。
    案例:批量保护所有 ARM 核单元
    create_keepout_margin -outer {0.5 0.5 0.5 0.5} [get_cells ARM*]  
    

三、应用场景:对号入座,精准开大

  1. 宏模块防干扰:硬核外边界 + 自动计算,适合引脚密集的 Memory/CPU 模块。

    create_keepout_margin -type hard -tracks_per_macro_pin 0.5 [get_cells ddr_controller]  
    
  2. 敏感信号隔离:严格限制特定层的绕线禁区,降低串扰风险。

    create_keepout_margin -layers M3 -outer {0.15 0.15 0.15 0.15} [get_cells clk_gen]  
    
  3. 临时调试禁区:非致命区域用 soft 类型,兼顾规则和绕线灵活度。

    create_keepout_margin -type soft -outer {0.1 0 0.1 0} [get_cells debug_interface]  
    

四、血泪Tips:少走弯路的经验包

  1. 先硬后软:初版设计用 hard 确保收敛,后期优化再尝试 soft 释放空间。
  2. 别堆太多层layers 参数尽量精简,过度限制会让绕线资源雪上加霜。
  3. 持续迭代:如果发现 Short 问题未解决,可能需要结合其他命令(如调整布线规则)。

最后分享一个冷知识:芯片设计中 60% 的 Short 问题 都是因为忽略了这个简单的禁区设定!所以下次遇到诡异的 DRC 报警,别急着挠头,先检查你的 Keepout Margin 是否“拉够”!

看完这篇文章,立刻动手在你的设计里试试这个命令吧!实践出真知,评论区欢迎分享你的实战翻车或救场经历~

你可能感兴趣的:(icc2命令每日精要,数字后端,物理设计,icc2,fc)