Updated DRC doc and enhanced generation of DRC doc somewhat (bigger images, no exaes etc.)
|
|
@ -102,7 +102,7 @@ def run_demo(gen, cmd, out)
|
|||
|
||||
gen.produce(cell.shapes(l1), cell.shapes(l2))
|
||||
|
||||
view.zoom_box(RBA::DBox::new(-2.0, -1.0, 8.0, 9.0))
|
||||
view.zoom_box(RBA::DBox::new(-2.0, -2.0, 8.0, 9.0))
|
||||
view.max_hier
|
||||
|
||||
t = RBA::Text::new(cmd, -1500, 8500)
|
||||
|
|
@ -144,7 +144,7 @@ SCRIPT
|
|||
end
|
||||
|
||||
view.update_content
|
||||
view.save_image(res_path + "/" + img_path + "/" + out, 400, 400)
|
||||
view.save_image(res_path + "/" + img_path + "/" + out, 500, 500)
|
||||
|
||||
puts "---> written #{res_path}/#{img_path}/#{out}"
|
||||
|
||||
|
|
@ -709,5 +709,36 @@ run_demo gen, "labels & input2", "drc_textpoly1.png"
|
|||
run_demo gen, "labels - input2", "drc_textpoly2.png"
|
||||
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
s1.insert(RBA::Polygon::new(RBA::Box::new(0, 0, 6000, 2000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(3500, 3000, 6000, 4000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(0, 5000, 2500, 7000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(3500, 5000, 6000, 7000)))
|
||||
end
|
||||
end
|
||||
|
||||
gen = Gen::new
|
||||
|
||||
run_demo gen, "input1.separation(input2, 3.5.um, projection, \n shielded)", "drc_shielded1.png"
|
||||
run_demo gen, "input1.separation(input2, 3.5.um, projection, \n transparent)", "drc_shielded2.png"
|
||||
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
s1.insert(RBA::Polygon::new(RBA::Box::new(0, 0, 2500, 2000)))
|
||||
s1.insert(RBA::Polygon::new(RBA::Box::new(3500, 0, 6000, 2000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(3500, 0, 6000, 2000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(0, 5000, 2500, 7000)))
|
||||
s2.insert(RBA::Polygon::new(RBA::Box::new(3500, 5000, 6000, 7000)))
|
||||
end
|
||||
end
|
||||
|
||||
gen = Gen::new
|
||||
|
||||
run_demo gen, "input1.separation(input2, 3.5.um, projection, \n shielded)", "drc_shielded3.png"
|
||||
run_demo gen, "input1.separation(input2, 3.5.um, projection, \n transparent)", "drc_shielded4.png"
|
||||
|
||||
|
||||
QRCGenerator::instance.finish
|
||||
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
<grid-color>#404040</grid-color>
|
||||
<grid-micron>0.1</grid-micron>
|
||||
<grid-show-ruler>true</grid-show-ruler>
|
||||
<grid-style0>lines</grid-style0>
|
||||
<grid-style0>invisible</grid-style0>
|
||||
<grid-style1>dots</grid-style1>
|
||||
<grid-style2>tenths-dotted-lines</grid-style2>
|
||||
<grid-visible>true</grid-visible>
|
||||
|
|
|
|||
|
|
@ -83,6 +83,14 @@ module DRC
|
|||
DRCSizingMode::new(4)
|
||||
end
|
||||
|
||||
def shielded
|
||||
DRCShielded::new(true)
|
||||
end
|
||||
|
||||
def transparent
|
||||
DRCShielded::new(false)
|
||||
end
|
||||
|
||||
def projection_limits(*args)
|
||||
DRCProjectionLimits::new(*args)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2471,6 +2471,8 @@ CODE
|
|||
# @li @b projection_limits(min, max) or projection_limits(min .. max) @/b:
|
||||
# this option makes the check only consider edge pairs whose projected length on
|
||||
# each other is more or equal than min and less than max @/li
|
||||
# @li @b transparent @/b: performs the check without shielding (polygon layers only) @/li
|
||||
# @li @b shielded @/b: performs the check with shielding (polygon layers only) @/li
|
||||
# @/ul
|
||||
#
|
||||
# Note that without the angle_limit, acute corners will always be reported, since two
|
||||
|
|
@ -2508,6 +2510,18 @@ CODE
|
|||
# @td @img(/images/drc_width4.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# "shielding" is a concept where an internal or external distance is measured only
|
||||
# if the opposite edge is not blocked by other edges between. Shielded mode makes
|
||||
# a difference if very large distances are to be checked and the minimum distance
|
||||
# is much smaller: in this case, a large distance violation may be blocked by features
|
||||
# located between the edges which are checked. With shielding, large distance violations
|
||||
# are not reported in this case. Shielding is also effective at zero distance which has
|
||||
# an adverse effect: Consider a case, where one layer A is a subset of another layer B. If
|
||||
# you try to check the distance between features of B vs. A, you cannot use shielding,
|
||||
# because B features which are identical to A features will shield those entirely.
|
||||
#
|
||||
# Shielding is enabled by default, but can be switched off with the "transparent" option.
|
||||
|
||||
# %DRC%
|
||||
# @name space
|
||||
|
|
@ -2685,6 +2699,7 @@ CODE
|
|||
alim = nil
|
||||
whole_edges = false
|
||||
other = nil
|
||||
shielded = nil
|
||||
|
||||
n = 1
|
||||
args.each do |a|
|
||||
|
|
@ -2699,6 +2714,8 @@ CODE
|
|||
elsif a.is_a?(DRCProjectionLimits)
|
||||
minp = @engine._prep_value(a.min)
|
||||
maxp = @engine._prep_value(a.max)
|
||||
elsif a.is_a?(DRCShielded)
|
||||
shielded = a.value
|
||||
elsif a.is_a?(Float) || a.is_a?(1.class)
|
||||
value && raise("Value already specified")
|
||||
value = @engine._prep_value(a)
|
||||
|
|
@ -2711,6 +2728,15 @@ CODE
|
|||
if !value
|
||||
raise("#{f}: A check value must be specified")
|
||||
end
|
||||
|
||||
args = [ value, whole_edges, metrics, alim, minp, maxp ]
|
||||
if shielded != nil
|
||||
if self.data.is_a?(RBA::Region)
|
||||
args << shielded
|
||||
else
|
||||
raise("#{f}: shielding can only be used for polygon layers")
|
||||
end
|
||||
end
|
||||
|
||||
border = (metrics == RBA::Region::Square ? value * 1.5 : value)
|
||||
|
||||
|
|
@ -2718,13 +2744,13 @@ CODE
|
|||
if other
|
||||
raise("No other layer must be specified for single-layer checks (i.e. width)")
|
||||
end
|
||||
DRCLayer::new(@engine, @engine._tcmd(self.data, border, RBA::EdgePairs, :#{f}_check, value, whole_edges, metrics, alim, minp, maxp))
|
||||
DRCLayer::new(@engine, @engine._tcmd(self.data, border, RBA::EdgePairs, :#{f}_check, *args))
|
||||
else
|
||||
if !other
|
||||
raise("The other layer must be specified for two-layer checks (i.e. overlap)")
|
||||
end
|
||||
requires_same_type(other, "#{f}")
|
||||
DRCLayer::new(@engine, @engine._tcmd(self.data, border, RBA::EdgePairs, :#{f}_check, other.data, value, whole_edges, metrics, alim, minp, maxp))
|
||||
DRCLayer::new(@engine, @engine._tcmd(self.data, border, RBA::EdgePairs, :#{f}_check, other.data, *args))
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -3177,6 +3203,10 @@ CODE
|
|||
@data
|
||||
end
|
||||
|
||||
def data=(d)
|
||||
@data = d
|
||||
end
|
||||
|
||||
def requires_region(f)
|
||||
self.data.is_a?(RBA::Region) || raise("#{f}: Requires a polygon layer")
|
||||
end
|
||||
|
|
|
|||
|
|
@ -126,5 +126,15 @@ module DRC
|
|||
end
|
||||
end
|
||||
|
||||
# A wrapper for specifying shielded mode
|
||||
class DRCShielded
|
||||
def initialize(f)
|
||||
@value = f
|
||||
end
|
||||
def value
|
||||
@value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -2176,6 +2176,8 @@ make the check only consider edges enclosing angles of less than 45 degree. </li
|
|||
<li><b>projection_limits(min, max) or projection_limits(min .. max) </b>:
|
||||
this option makes the check only consider edge pairs whose projected length on
|
||||
each other is more or equal than min and less than max </li>
|
||||
<li><b>transparent </b>: performs the check without shielding (polygon layers only) </li>
|
||||
<li><b>shielded </b>: performs the check with shielding (polygon layers only) </li>
|
||||
</ul>
|
||||
</p><p>
|
||||
Note that without the angle_limit, acute corners will always be reported, since two
|
||||
|
|
@ -2213,6 +2215,18 @@ The following images show the effect of various forms of the width check:
|
|||
<td><img src="/images/drc_width4.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
"shielding" is a concept where an internal or external distance is measured only
|
||||
if the opposite edge is not blocked by other edges between. Shielded mode makes
|
||||
a difference if very large distances are to be checked and the minimum distance
|
||||
is much smaller: in this case, a large distance violation may be blocked by features
|
||||
located between the edges which are checked. With shielding, large distance violations
|
||||
are not reported in this case. Shielding is also effective at zero distance which has
|
||||
an adverse effect: Consider a case, where one layer A is a subset of another layer B. If
|
||||
you try to check the distance between features of B vs. A, you cannot use shielding,
|
||||
because B features which are indentical to A features will shield those entirely.
|
||||
</p><p>
|
||||
Shielding is enabled by default, but can be switched off with the "transparent" option.
|
||||
</p>
|
||||
<a name="with_angle"/><h2>"with_angle" - Selects edges by their angle</h2>
|
||||
<keyword name="with_angle"/>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.5 KiB |