Calibre 3Dstack --每日一个命令day1【die】(3-1)
Calibre 3Dstack --每日一个命令day2【component】(3-2)
Calibre 3Dstack --每日一个命令day3【stack】(3-3)
Calibre 3Dstack --每日一个命令day4【connect】(3-4)
Calibre 3Dstack --每日一个命令day5【config】(3-5)
Calibre 3Dstack --每日一个命令day6【process&export_layout】(3-6)
Calibre 3Dstack --每日一个命令day7【centers】(3-7)
Calibre 3Dstack --每日一个命令day8【connected】(3-8)
Calibre 3Dstack --每日一个命令day9【copy】(3-9)
Calibre 3Dstack --每日一个命令day10【custom_check】(3-10)
Calibre 3Dstack --每日一个命令day11【dangling_ports】(3-11)
Calibre 3Dstack --每日一个命令day12【density】(3-12)
Calibre 3Dstack --每日一个命令day13【enclosure】(3-13)
Calibre 3Dstack --每日一个命令day14【external】(3-14)
Calibre 3Dstack --每日一个命令day15【extra_ports】(3-15)
Calibre 3Dstack --每日一个命令day16【floating_pads】(3-16)
Calibre 3Dstack --每日一个命令day17【floating_texts】(3-17)
Calibre 3Dstack --每日一个命令day18【floating_trace】(3-18)
Calibre 3Dstack --每日一个命令day19【internal】(3-19)
Calibre 3Dstack --每日一个命令day20【locations】(3-20)
Calibre 3Dstack --每日一个命令day21【missing_ports】(3-21)
Calibre 3Dstack --每日一个命令day22【multi_texts】(3-22)
Calibre 3Dstack --每日一个命令day23【multi_trace】(3-23)
Calibre 3Dstack --每日一个命令day24【no_texts】(3-24)
Calibre 3Dstack --每日一个命令day25【no_trace】(3-25)
Calibre 3Dstack --每日一个命令day26【offgrid_centers】(3-25)
Calibre 3Dstack --每日一个命令day27【overlap】(3-27)
Calibre 3Dstack --每日一个命令day28【select_checks】(3-28)
Calibre 3Dstack --每日一个命令day29【unselect_checks】(3-29)
Calibre 3Dstack --每日一个命令day30【3dstack_block】(3-30)
density
本文介绍了Calibre3Dstack中的密度检查命令(density)的详细使用方法。该命令用于验证指定数据采集窗口内输入层的密度是否符合约束条件,支持自定义密度计算表达式。文章详细说明了命令参数,包括必选的检查名称、层类型和约束条件,以及可选的堆叠应用范围、检查方向、窗口尺寸、步长设置等。特别介绍了数学函数和运算符在密度表达式中的应用,并提供了窗口处理方式和数据采集范围的定义方法。该命令适用于验证如"版图中每个50×50区域内的metal2密度必须超过25%"等设计规则,支持复杂自定义计算需求。
检查指定放置实例的密度约束。
用法
tcl
density -check_name check_name { -layer_types {placed_layer_type ...} }
[-stack '{' stack_name_list '}'] [-direction {up | down | both}]
-constraint "constraint_expression" [-expression "density_expression"]
[-window {wxy | wx wy} [-step {sxy | sx sy}] ]
[-window_type {truncate | backup | ignore | wrap}] [-inside { extent | placed_layer}]
[-centers value] [-comment "comment"] [rve_option ...]
参数
-
**
-check_name check_name**必选参数,指定检查名称,该名称用于写入输出结果。 -
-layer_types {placed_layer_type ...}参数集,指定执行检查的层类型。所有几何检查均作用于由堆叠定义的交互(接口)放置层,放置层指裸片放置实例对应的层。 -
-stack '{' stack_name_list '}'可选参数集,指定应用该规则检查的堆叠。若未指定此参数集,检查将应用于所有 堆叠。指定的堆叠名称必须已定义;若指定-stack参数,检查仅应用于指定的堆叠。 -
**
-direction {up | down | both}**可选参数集,指定检查的方向。若指定此参数,检查仅在指定方向上执行。-
up:检查仅从堆叠的底部到顶部执行,为默认值。 -
down:检查仅从堆叠的顶部到底部执行。 -
both:检查在两个方向上均执行。
-
-
-constraint "constraint_expression"必选参数,指定约束条件。不允许 使用约束表达式" < 0 "。-
若未指定
density_expression,则输出面积比满足constraint_expression的数据采集窗口。在此情况下,若面积比以百分比为单位,constraint_expression应使用 0 到 1 之间的数值(已完成除以 100 的换算)。 -
若提供了
density_expression,则输出表达式值满足constraint_expression的数据采集窗口。
-
-
**
-expression "density_expression"**可选参数,执行涉及层数据的计算。-
若未提供
density_expression,密度的计算方式为:数据采集窗口内输入层的面积 与数据采集窗口自身面积的比值。 -
若提供了
density_expression,则在每个数据采集窗口内计算该表达式的值(以用户单位为基准)。若表达式值满足constraint_expression,则该窗口会按常规方式输出。 -
density_expression可包含数字(包括数值变量)、运算符、括号()以及下表中的函数。 -
表达式结果不得为严格负数 ,因为此类值无法通过
constraint_expression进行检查。除以零 的情况被定义为不满足任何constraint_expression。 -
括号在数值计算中具有最高优先级,可用于对项进行分组。
表 3-7 密度数学函数
函数 定义 AREA(input_layer)输入层的面积,单位为用户长度的平方。 AREA()表示数据采集窗口的面积。EXP(x)x 的指数函数(以 e 为底) LOG(x)x 的自然对数 SIN(x)x 的正弦值(单位为弧度) COS(x)x 的余弦值(单位为弧度) TAN(x)x 的正切值(单位为弧度) MIN(expression1,expression2)返回两个表达式的较小值。表达式的格式必须与主 density_expression相同,且不含方括号。MAX(expression1,expression2)返回两个表达式的较大值。表达式的格式必须与主 density_expression相同,且不含方括号。运算符说明
-
一元运算符 (
+、-、!、~):仅需一个数值参数,所有此类运算符优先级相同。-
+、-:常规的正负号。 -
!:若参数非零,返回 0(假);若参数为 0,返回 1(真)。 -
~:若参数为正,返回 0(假);若参数为非正,返回 1(真)。
-
-
二元运算符 (
^、*、/、+、-):需两个数值参数。-
^:与 C 语言pow()函数相同,表示x^y即 x 的 y 次幂。 -
*、/、+、-:分别为乘、除、加、减,遵循常规优先级。^与*、/优先级相同。
-
-
逻辑运算符 (
||或、&&与):与 C 语言同类型运算符功能相同,但优先级与二元+、-相同,要求输入为数值。- 示例:
AREA(via) && AREA(met)若两个输入均非零,返回 1;否则返回 0。
- 示例:
表 3-8
!和~运算符组合示例x !(x)!!(x)!(x-1)!!(x-1)~(x)~~(x)~(x-1)~~(x-1)3 0 1 0 1 0 1 0 1 2 0 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 1 0 1 0 -1 0 1 0 1 1 0 1 0 -2 0 1 0 1 1 0 1 0 -3 0 1 0 1 1 0 1 0 运算符组合解释
-
!(x):检测是否不存在(0 表示不存在)。 -
!!(x):检测是否存在(非 0 表示存在)。 -
!(x-r):检测值是否等于 r。 -
!!(x-r):检测值是否不等于 r。 -
~(x):检测是否不存在(x ≤ 0 表示不存在)。 -
~~(x):检测是否存在(x > 0 表示存在)。 -
~(x-r):检测值是否小于等于 r。 -
~~(x-r):检测值是否大于 r。
-
-
**
-window {wxy | wx wy}**可选参数,指定执行密度检查的数据采集窗口尺寸。-
-window wxy:指定正方形窗口,高和宽均为wxy用户单位,wxy必须为正实数。 -
-window wx wy:指定矩形窗口,高为wy用户单位,宽为wx用户单位,wx和wy必须为正实数。 -
窗口会在数据采集范围上进行平铺,范围由操作指定的关键字决定。满足
constraint_expression的窗口会被输出,写入 DRC 结果数据库的窗口会被合并。 -
若未指定此参数,默认窗口尺寸为运行时读取的版图数据库范围,或由
-inside条件(若指定)定义。若窗口在 x 或 y 方向上超出边界,会在相应方向上被截断至边界尺寸。
-
-
-step {sxy | sx sy}可选参数,需与-window同时指定,指定数据采集窗口在数据采集范围上平铺的网格增量。-
sxy:指定窗口以sxy用户单位为增量向右、向上平铺,sxy必须为正实数。 -
sx sy:指定窗口向右平铺增量为sx用户单位,向上平铺增量为sy用户单位,sx和sy必须为正实数。 -
若同时指定
-step和-window,则sxy、sx、sy必须分别能整除wxy、wx、wy。 -
若未指定此参数,默认步长由
-window尺寸定义。 -
分步数据采集窗口从数据采集范围的左下角开始,首先以
sxy或sx为增量向右平铺;到达范围右边缘后,以sxy或sy为增量向上移动,再从左边缘重新开始平铺。
-
-
**
-window_type {truncate | backup | ignore | wrap}**可选参数,指定窗口类型。-
truncate:数据采集窗口在数据采集范围的边界处被截断 ,截断窗口的密度计算基于窗口的截断尺寸。为默认行为。
-
backup:若窗口与数据采集范围的右边缘或上边缘重叠,窗口会向左或向下移动 ,直至不再重叠,然后执行密度计算。
-
ignore:若窗口与数据采集范围的右边缘或上边缘重叠,该窗口会被忽略 ,不输出该窗口位置的数据。
-
wrap:若窗口与数据采集范围的右边缘或上边缘重叠,数据采集范围及其数据会被复制 并添加到原始边界框的右侧或顶部,然后在与复制范围相交的窗口中进行密度测量。
-
-
**
-inside { extent | placed_layer}**可选参数,定义数据采集窗口平铺的数据采集范围。-
extent:指定数据采集范围为输入placed_layer_type参数的矩形范围。 -
placed_layer:指定数据采集窗口的输出与placed_layer的多边形重合 。placed_layer必须为原始或派生的多边形层,数据采集范围为该层多边形的矩形范围。 -
若未指定此参数,默认数据采集范围为运行时读取的数据库范围。Calibre 3DSTACK 不会读取运行时计算输出不需要的数据库层,未读取的层不会计入 Calibre 3DSTACK 数据库范围。
-
-
-centers value可选参数,为正浮点数(单位为用户单位)。启用此参数后,密度检查的几何输出为边长为value × value的正方形 ,位于默认情况下会输出的矩形的中心。 -
-comment "comment"可选参数,指定规则检查的注释。可使用\n转义序列指定多行注释。 -
rve_option ...可选参数集,控制 Calibre RVE 如何显示规则检查结果,允许指定多个选项。rve_option的允许值详见第 201 页的 **"Calibre 3DSTACK 检查文本覆盖注释"**。
说明
密度验证检查通常用于计算指定数据采集窗口内输入层的密度 ,例如设计规则:"版图中每个 50×50 区域内的 metal2 密度必须超过 25%"。默认密度函数定义为:数据采集窗口内输入层的总面积 与窗口自身面积的比值。窗口在指定数据采集范围上平铺时会计算密度,每个满足约束值的窗口位置会作为合并层的一部分输出。
数据采集窗口的大小、数据采集范围以及窗口在范围上的平铺方式均由相关选项控制。density_expression 选项可用于提供自定义计算,替代默认的密度计算方式。
示例
本示例检查计算输入层中 route 和 bump 类型的密度:
tcl
density -check_name den1 -layer_types {route bump} -constraint "<0.1"