Can do a DRC check loop ?

Hi sir,
I want to check min. width in DRC that code as below , But I can't do that function ...
as that file , check rule by 5um first , if that is no any output , check rule by 6um / 7um....
Thanks.

;DRC command
Rule=5
CapRD = input(210,0)
CapRD.width(Rule.micron).output(254,1)

CapRDWidth = input(254,1)

CapRDWidth.is_empty? do
Rule=Rule+1
CapRD.width(Rule.micron).output(254,1)
CapRDWidth = input(254,1)
end

• First, CapRDWidth = input(254,1) is supposed to take the current status from "254/1"? So why not just taking the result of the "width" operation?

"is_empty?" can have a "do". So you mean "while"?

So I think the script is supposed to be this:

Rule=5
CapRD = input(210,0)

CapRDWidth = CapRD.width(Rule.micron)

while CapRDWidth.is_empty? do
Rule=Rule+1
CapRDWidth = CapRD.width(Rule.micron)
end

CapRDWidth.output(254, 1)

Matthias

• Hi Matthias ,
Thanks very much !!
I can run the DRC as below , this can working.
(but I have to output the rule result as a polygon layer first. or ".is_empty" can't working")

Check the min. spacing as looping

Rule=5
Step=1
CapRD = input(42,10)
CapRD.space(Rule.micron).output(254,Rule)
CapRDSpace=input(254,Rule)
while CapRDSpace.is_empty? do
Rule=Rule+Step
CapRD.space(Rule.micron).output(254,Rule)
CapRDSpace=input(254,Rule)
end

CapRDSpace.output(254, Rule)

• Hi sir,
Is it possible to check what the min. spacing in some one layer?
I mean export the min. value in the DRC wizard.
such as ...
the space rule is 10um , but my layout have spacing 9.8 ..9.7....9.8...9.8...9.7...9.6...9.5....9.4....

#

report("DRC _width script")
Rule=10
LayerName = PI1
CapRD = input(42, 10)
CapRD.width(Rule.micron).output(LayerName, "CapRD width violations")

#

in the DRC wizard , I can get all the location to shown where the layout out of rule.(so many location...)
but I can't get what the spacing value in that.
could you please let me know how /what solution for this request?
Thanks very much for your help.

• edited November 2020

No, the actual values are not accessible directly. That's how simple DRC usually works. Just error flags.

Regarding the previous question: you're right, "is_empty?" can be used on EdgePairs currently. But you can use "CapRDSpace.size == 0" instead. No need to read the output layer.

Matthias

• Hi Matthias,
Got it , I will try that way , Thanks very much for your help.

• when I change the code as this , it is workable.
Thanks.

layer Maping

CapRD = input(154,1)

Rule Mapping

ValueD=10
ValueE=10
Step=0.1

Loop programming for check min. spacing.

Rule=ValueE
CapRD.space(Rule.micron).output(354,Rule)
CapRDSpace=input(354,Rule)
while CapRDSpace.is_empty? do
Rule=Rule+Step
RuleLayer=(Rule*10).to_i
LayerName="CapRD_Space_ #{RuleLayer}"
CapRD.space(Rule.micron).output(354,RuleLayer,LayerName)
CapRDSpace=input(354,RuleLayer)
end