Virtuoso 电压规则(VDR)工具操作指南——自动生成电压标签!

Voltage-dependent Spacing DRC 规则的辅助检查工具。

兔二思
兔二思
技术博主

在 IC 设计的世界里,工艺设计规则就像是工程师必须遵守的”交通规则”。其中有一类规则和金属线的电位大小相关,它就是 Voltage-dependent Spacing Rule。这个规则要求处于不同电位的金属层必须保持足够的安全距离。这是因为当不同电压的金属导体过于接近时,它们之间的电场强度会显著增加,随着时间推移,可能导致绝缘介质逐渐退化并最终击穿。

📑Voltage-dependent Spacing Rule

那么实际验证过程中,DRC 检查工具是如何知道哪些金属线需要更大的间距呢?

答案在于”Voltage Marker Layer/电压标签”。

想象每条信号线都带有一个”身份证” — MinV 和 MaxV 标签,标明了它承载的最低和最高电压。检查工具通过读取相邻信号线的标签,计算出两条线之间的最大电压差,然后根据这个电压差对照规则间距确定它们需要保持的最小安全距离。

这套验证机制在理论上很完美,但也存在一个显著的”盲点”:它完全依赖于设计人员正确标记的电压信息。如果某些信号线“没带身份证”,DRC 工具就会视而不见,无法检查出潜在的安全距离问题。

在一个复杂的 SoC 设计中,可能存在成千上万条信号线,手动确保每条线都有正确的电压标签是极其困难的。特别是在多电源域设计中,电压关系变得更加复杂。

所以🤔,我们如何解决手动标记电压标签的问题呢?

Virtuoso 平台中的 Voltage-Dependent Rules (VDR) 工具提供了电压标签层的自动生成功能,省去了手动标记的繁琐和错误风险。

( VLS >> Tools - Voltage Dependent Rules )


VDR工具支持三种不同的实现流程,可适应不同的设计需求。

① 仿真驱动的VDR流程 - 让数据说话

这是我个人最推荐的方法,因为它基于实际的电路行为,而不是理论假设。

具体操作起来相当直观:首先在 ADE 中运行电路仿真,让工具捕获每个节点的实际电压摆幅。这些真实的最小值(MinV)和最大值(MaxV)会被存储在 Datasets 数据集中。然后在 Virtuoso Layout 中使用工具命令(Tools > Voltage Dependent Rules > Create Labels From Simulation Voltages…)自动在版图中创建电压标签。

📌版图设计师不需要再手动猜测或标记这些电压信息,一切都基于电路的实际行为。

② 原理图驱动的VDR流程 - 设计师的直觉

在这种流程中,电路设计人员使用 VSE 工具中的 Navigator / Property Editor Assistant,直接在原理图设计阶段为每个节点标记上最小(MinV)和最大(MaxV)电压属性。

这些关键信息会在 Layout XL 生成过程中自动从原理图传递到版图,版图设计师只需在版图环境中执行命令(Tools > Voltage Dependent Rules > Create Labels From Net Voltages…),就能基于这些预定义的属性自动生成所有电压标签。

③ 版图驱动的VDR流程 - 灵活应对

正如以上介绍的两种流程,电压可以从原理图或仿真传递到版图。版图设计师也可以直接在版图的信号线上指定电压属性,无需依赖前期原理图或仿真信息。虽然这种方法看起来有点”老派”,但它提供了最大的灵活性,特别适合处理特殊情况或局部修改。

通过三种 VDR 流程的比较分析,大家在实际项目中可以根据团队工作流程和使用场景,灵活使用这三种方法。


我们已经了解了 VDR 的三种流程,现在开始详细介绍「仿真驱动」的实施流程。

Virtuoso 的许多高级功能都依赖于技术文件 (techfile.tf) 的正确配置,就像建房子需要先打好地基一样,使用 VDR 工具前,我们需要先确保 techfile 的配置正确。这是整个流程能否顺利进行的关键!

技术文件配置

电压标签配置要求

要让 VDR 工具正确创建电压标签,你的 techfile.tf 必须满足这三个条件:

✅在techPurposes段落中定义电压标签的Purpose名称(如vlo和vhi)。

✅在techLayerPurposePriorities段落中建立这些特殊Purpose与各个Metal Layer的关联映射。

✅在techDisplays段落中将相关LPP组合定义为可见且有效。

以 GPDK045 工艺为例,它的配置是这样的:👇

;******************************** 
; LAYER DEFINITION 
;******************************** 
layerDefinitions( 

 techPurposes( 
  ;( PurposeName       Purpose#   Abbreviation ) 
  ;( -----------       --------   ------------ ) 
  ;User-Defined Purposes: 
  (vlo        15    vlo)
  (vhi        16    vhi)
 ) ;techPurposes 

 techLayerPurposePriorities( 
  ;layers are ordered from lowest to highest priority 
  ;( LayerName                Purpose      ) 
  ( Metal1                    vlo        ) 
  ( Metal1                    vhi        ) 
  ( Metal2                    vlo        ) 
  ( Metal2                    vhi        ) 
 ) ;techLayerPurposePriorities 

 techDisplays( 
  ;( LayerName   Purpose Packet        Vis Sel Con2ChgLy DrgEnbl Valid ) 
  ( Metal1       vlo      vdr              t t t t t )
  ( Metal1       vhi      vdr              t t t t t )
 ) ;techDisplays 

) ;layerDefinitions 

支持的电压标签类型

VDR 工具支持”通用”和”受约束”这两种类型的电压标签,选择哪种取决于你的工艺要求。

通用 VDR 标签

这是 Virtuoso 默认的生成机制,就像是给每层金属”贴标签”。系统利用预定义的特殊 Purpose 属性从金属层(如Metal1:drawing)自动衍生出两个特殊图层:

  • 一个用于最小电压 MinV —— Metal1:vlo

  • 一个用于最大电压 MaxV —— Metal1:vhi

比如,在 Metal1 的信号线上创建 Metal1:vlo 和 Metal1:vhi,在 Metal2 上创建 Metal2:vlo 和 Metal2:vhi,依此类推……

该机制通过 Purpose 属性(vlo/vhi)来区分最小和最大电压,且保持了层次一致性,确保每层金属都有对应的电压标签图层表示。

受约束的 VDR 标签

有些 Foundry 有他们自己的专用电压标记层(Voltage Marker Layer)及其映射规则,就像下面的例子:

📑Layer mapping table:

为了适应这些特定规则,还需要:

✅在techfile中通过”voltageLabelMapping”或”voltageMarkerMapping”创建电压映射层的constraintGroups。

✅在.cdsenv文件中设置环境变量vdrConstraintGroupName指向这个Constraint Group。

layout vdrConstraintGroupName string "myVDRLppCg"

( .cdsenv 环境变量设置 )

constraintGroups 参考示例:

constraintGroups( 
  ;( group    [override]    [definition]    [operator] )
  ;( ------------------------------------------------- )
  ( "myVDRLppCg"  nil  nil 'and  
   spacings(
   ( voltageLabelMapping "M1"
    'layer "VLO"
    'purpose "metal1"
    "minVoltage"
   )
   ( voltageLabelMapping "M1"
    'layer "VHI"
    'purpose "metal1"
    "maxVoltage"
   )
   ( voltageLabelMapping "M2"
    'layer "VLO"
    'purpose "metal2"
    "minVoltage"
   )
   ( voltageLabelMapping "M2"
    'layer "VHI"
    'purpose "metal2" 
    "maxVoltage"
   )     
  ) ;spacings 
 ) ;myVDRLppCg
) ;constraintGroups

⚠️Tips:这两种类型的标签不能在同一设计中混合使用。

仿真驱动VDR流程实操

接下来继续介绍仿真驱动 VDR 流程的后续步骤:如何从仿真结果中提取电压信息,以及如何使用 VDR 工具将这些信息转化为实际的电压标签。

Step1:电路仿真设置

首先,我们需要在 ADE 中设置仿真环境,正确的仿真设置是获取准确电压信息的基础。

仿真类型选择:

  • 瞬态分析(Transient) 或 DC Sweep ✔

仿真参数配置:

  • 工艺角✔

  • 扫描温度范围✔

  • 不同负载情况✔

( 仿真设置界面示意 )

📌Tips:为了获取最准确的电压范围,建议运行多个工艺角、多个温度点和多个供电电压条件下的仿真。这样可以确保捕获到最宽的电压摆幅范围。

Step2:创建VDR电压数据集Datasets

执行仿真前,在 ADE 中选择 ”EAD” > “Setup” 设置 EAD Setup 选项卡:

  • 启用 ☑“Enable Electrical Data Capture for EAD Flow”

  • 勾选 ☑“Min and Max Voltage (Vmin/Vmax)”

( 仿真前的设置 - EAD Setup )

仿真运行完成后,创建并保存 Datasets 即可。

Create Dataset 可以看我之前写的关于Layout EAD工具的一系列文章,里面有详细的操作描述~

Step3:使用VDR工具生成电压标签

有了准确的 Dataset,接下来就可以在版图中创建电压标签了。

首先执行 VDR 标签创建命令:

  • 在版图编辑器中,选择 “Tools” > “Voltage Dependent Rules” > “Create Labels From Simulation Voltages…”

  • 在弹出的对话框中:

    • 选择之前创建的 Simulation Datasets
    • 勾选 Generate Voltage Labels
    • 选用”通用“标签类型的,选择对应的Voltage Purpose层次
    • 选用”约束“标签类型的,Voltage Purpose层次选用None

配置完成后点击”Apply”,VDR 工具将基于仿真数据自动在各金属层上生成对应的vlo/vhi标签。

wxv_3921158138107412481

Step4:DRC验证

最后一步是运行 DRC 检查,验证设计是否满足电压相关的设计规则。


通过本文介绍的步骤,你现在应该能够从仿真结果中提取准确的电压信息,并使用 VDR 工具将这些信息转化为版图中的电压标签。这个流程不仅自动化了一个原本繁琐的手动任务,更确保了电压信息的准确性和一致性。

💬你的团队使用哪种方法来处理电压标签?欢迎在评论区分享你的经验和想法!

⋅ END ⋅

参考文档:

<install_dir>/doc/vvdrflow/vdrflow.pdf <install_dir>/doc/ascitechconstr/ascitechconstr.pdf