do DRC in each cell

Hi Sir,
I want to do a pattern shift check , and here is my code..
first, I want to check cell "DIE_PI1" , and compare 51/ 1 and 93/0.
and second , I want to check cell "DIE_CapRD" and compare 56/1 and 94/0......
But , Look like that have some wrong result that is not what I need.
it anythink I missed?

######2021-06-16
DIE=input(71,0)
shiftcheck=0.05
LayoutLibrary = RBA::Application::instance.main_window.current_view.active_cellview.name
puts "Library :  #{LayoutLibrary}"
LayerList=[["DIE_PI1",51,1,93,0],["DIE_CapRD",154,1,94,0],["DIE_PI2",56,1,93,0],["DIE_UBM",152,1,94,0]]
LayerList.each { |n|
puts "========================"
compareCell=n[0]
layer1num=n[1]
layer1pur=n[2]
layer2num=n[3]
layer2pur=n[4]
currentcell = source.cell(compareCell)
puts "compare cellname:  #{compareCell}"
#########################################
layer1=currentcell.input(layer1num,layer1pur)
layer2=currentcell.input(layer2num,layer2pur)
centerpatternsize=10
findingsize=150.micron
shiftcheckvalue=shiftcheck / 2
checkNonBump = centerpatternsize *2 + shiftcheck
checksize = (centerpatternsize / 2.0) - shiftcheck
########Check layer 1 and layer 2 is match by amount , no any non bumps issue############
layer1p=layer1.inside(DIE).middle.size(centerpatternsize.micron)
layer2p=layer2.inside(DIE).middle.size(centerpatternsize.micron)
no_Bump = "Compare_NoBump_#{layer1num}_vs_#{layer2num}"
bump_Shift = "Compare_BumpShift_#{layer1num}_vs_#{layer2num}"
(((layer1p.xor(layer2p)).size(-checksize.micron)).width(checkNonBump.micron)).output(no_Bump)
input(no_Bump).size(findingsize).output(no_Bump)
no_Bump = input(no_Bump)
#########################################################################
(((layer1p.xor(layer2p)).not(no_Bump)).size(-shiftcheckvalue.micron)).width(checkNonBump.micron).output(bump_Shift)
(input(bump_Shift).merged).size(findingsize).output(bump_Shift)

########################################
puts  "Check Layer 1: #{layer1num}/ #{layer1pur}"
puts  "Check Layer 2: #{layer2num}/ #{layer2pur}"
bumpshift = 0
bumpmiss=0

rule=input(bump_Shift)
if rule.is_empty?
bumpshift = 1
end

rule=input(no_Bump)
if rule.is_empty?
bumpmiss = 1
end

if bumpmiss == 1 && bumpshift == 1
puts  "GA Shift OK"
end

if bumpmiss == 0 || bumpshift == 0
puts  "Check Result : NG,Check Bump_Shift / No_Bump Layer"
end
}

Comments

  • I think this is wrong:

    currentcell = source.cell(compareCell)
    puts "compare cellname:  #{compareCell}"
    #########################################
    layer1=currentcell.input(layer1num,layer1pur)
    layer2=currentcell.input(layer2num,layer2pur)
    ...
    

    Just switching the cell is sufficient:

    cell(compareCell)
    puts "compare cellname:  #{compareCell}"
    #########################################
    layer1=input(layer1num,layer1pur)
    layer2=input(layer2num,layer2pur)
    ...
    

    Matthias

  • Hi Matthias,
    Thanks a lot , It is workable!!

Sign In or Register to comment.