电子设计自动化软件:Cadence Virtuoso二次开发_(12).物理验证与DRC-LVS开发.docx

电子设计自动化软件:Cadence Virtuoso二次开发_(12).物理验证与DRC-LVS开发.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

物理验证与DRC/LVS开发

1.物理验证概述

物理验证是集成电路设计中非常重要的环节,用于确保设计在物理层面的正确性和可制造性。物理验证主要包括设计规则检查(DRC,DesignRuleCheck)和布局与原理图一致性检查(LVS,Layoutvs.?Schematic)。DRC用于检查版图是否符合制造工艺的规则,而LVS用于验证版图与原理图的一致性,确保电路功能正确。

1.1DRC的重要性

DRC是确保版图设计符合工艺制造规则的重要手段。常见的DRC检查项包括最小线宽、最小间距、最大层面积等。这些规则通常由半导体制造厂商提供,以确保设计能够在特定的工艺节点上成功制造。

1.2LVS的重要性

LVS用于验证版图与原理图的一致性,确保电路的功能正确。LVS检查包括节点连接、元件匹配、参数一致性等。通过LVS检查,可以发现设计中的潜在问题,如短路、开路、元件参数错误等。

2.DRC开发基础

2.1DRC脚本编写

DRC脚本用于定义具体的规则检查。CadenceVirtuoso使用的是Calibre工具,但也可以通过SKILL语言编写自定义DRC脚本。

2.1.1基本语法

SKILL语言是一种C语言风格的脚本语言,用于编写CadenceVirtuoso的自定义脚本。以下是一个简单的DRC脚本示例,用于检查最小线宽。

;;定义最小线宽规则

(defuncheckLineWidth(layerminWidth)

(let*((shapes(getShapeslayer));;获取指定层的所有形状

(results(list)))

(foreachshapeshapes

(let*((bbox(getBBoxshape));;获取形状的边界框

(width(bboxWidthbbox)));;计算宽度

(if(widthminWidth)

(push!resultsshape))))

results))

;;调用函数检查M1层的最小线宽

(checkLineWidthM10.13)

2.2DRC规则文件

DRC规则文件通常包含多个规则检查项,这些检查项可以通过SKILL脚本组合在一起。以下是一个包含多个DRC规则的示例文件。

;;定义DRC规则文件

(defunrunDRC()

(let*((results(list)))

;;检查M1层的最小线宽

(push!results(checkLineWidthM10.13))

;;检查M1层与M2层的最小间距

(push!results(checkSpacingM1M20.15))

;;检查M2层的最大面积

(push!results(checkMaxAreaM21000.0))

results))

;;运行DRC检查

(runDRC)

3.LVS开发基础

3.1LVS脚本编写

LVS脚本用于验证版图与原理图的一致性。CadenceVirtuoso提供了多种LVS工具,如Assura和Dracula,但也可以通过SKILL语言编写自定义LVS脚本。

3.1.1基本语法

以下是一个简单的LVS脚本示例,用于检查版图中的节点连接。

;;定义LVS脚本

(defuncheckNodeConnections(netlistlayout)

(let*((netlistNodes(getNetlistNodesnetlist));;获取原理图中的节点

(layoutNodes(getLayoutNodeslayout));;获取版图中的节点

(results(list)))

(foreachnetlistNodenetlistNodes

(let*((netlistConnections(getConnectionsnetlistNode))

(layoutConnections(getConnections(getLayoutNodenetlistNode))))

(if(not(equalnet

文档评论(0)

找工业软件教程找老陈 + 关注
实名认证
服务提供商

寻找教程;翻译教程;题库提供;教程发布;计算机技术答疑;行业分析报告提供;

1亿VIP精品文档

相关文档