Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request capabilities #81

Open
fixrouter4400 opened this issue Oct 1, 2019 · 4 comments
Open

Request capabilities #81

fixrouter4400 opened this issue Oct 1, 2019 · 4 comments

Comments

@fixrouter4400
Copy link

Hi Doug,

First of all thank you for writing this wafer_map app. It was great and nice to use.
Tool is working fine for me and this is not an issue but a nice to have capabilities request.

At the moment I'm working mainly in Chip RETICLE(Mask) preparation and planning.
Most of our designs has a multiple combination of die i.e. 4 die in 1 RETICLE shot(MASK) with different die arrays X=6, Y=6 and sub arrays of die i.e die1 X=3, Y=4; die2 X=3, Y=4; die3 X=6, Y=1 and die4 X=6, Y=1

  1. Will you be able to add capability with an option to input mutiple die i.e Die 1....n
  2. Input die X and Y of each die i.e. 4 die we can input die1 X:Y and so on
  3. Input die array and sub arrays in 1 Reticle shot
  4. Then calculate number of total die per wafer

I hope that my request is clear again thank you for making this wonderful wafer map app.

Thanks!
Fixrouter

wafer_reticle_shot

@dougthor42
Copy link
Owner

Thanks for the suggestion! Can you explain a little more what you want?

I'm not understanding how a single subdie coord could be two different die. "die1 X=3, Y=4; die2 X=3, Y=4;" Do you mean you have two different reticle shots like so?

# reduced to a 2x2 reticle shot for simplicity
# numbers denote die type
# Shot A      # Shot B
+---+---+     +---+---+
| 1 | 2 |     | 1 | 3 |
+---+---+     +---+---+
| 3 | 4 |     | 5 | 6 |
+---+---+     +---+---+

This tool is not intended to be a gross-die-per-wafer calculator, so I don't think it makes sense to support reticles.

Instead, this is supposed to be for viewing die data to see any wafer-location-dependent patterns that may show up. For example, when plotting oxide thickness, a hot spot in the oxidation chamber could cause thicker oxide in the lower-left part of the wafer.

When I first wrote this, I did think about reticle support but I couldn't come up with a use case. Perhaps you can persuade me.

Also, note that I have very little time these days so I may not get to adding the feature 😢.

@fixrouter4400
Copy link
Author

Hi Doug,

Thank you for your reply and YES I'm mainly working on a RETICLE internal design.
These are the wafer info constants:
Wafer Dia = 300mm
Exclusion Edge =3mm
Flat or Notch Height =7.75mm
Street Line =0.08 -0.12mm

It is only a single reticle shot but with combination of up to 6 different die and different array and sub arrays.

Reticle shot =1 (Reticle X, Reticle Y)

Combination of 4 die with 4 x 4 array

Die Sub Array - Note All die X dimension is equal, Die 1 & 2 Y is equal and Die 3 & 4 Y is equal

#1 = 2 x 2
#2 = 2 x 2
#3 = 1 x 4
#4 =1 x 4

Please see attached sample reticle with an array of 4 x 4.
Thanks!
Fixrouter
ret4x4

@dougthor42
Copy link
Owner

Ah, I see what you mean. Sadly I didn't design the program to handle multiple die sizes 😞.

If you don't care about the difference in Y sizes (maybe it's a difference of only a few percent and won't be noticeable?), you can still use this to plot data - it might just look a little funny.

What you want to do is figure out function that tells you what the die type is. Based on your image, something like this might work:

def die_type(x, y):
    """`x` and `y` are the integer die coordinates"""
    # Top two rows
    if y % 4 == 0 or y % 4 == 1:
        if x % 4 == 0 or x % 4 == 1:
            _type = 1
        elif x % 4 == 2 or x % 4 == 3:
            _type = 2
        else:
            raise ValueError("This shouldn't be possible.")

    # Bottom two rows
    elif y % 4 == 2:
        _type = 3
    elif y % 4 == 3:
        _type = 4
    else:
        raise ValueError("How did you even get here???")

    return _type

You can then use that function to define the discrete bins. In example.py, you'd replace line

discrete_xyd = [(_x, _y, random.choice(bins))
with:

discrete_xyd = [(_x, _y, die_type(_x, _y))
                for _x, _y, _
                in xyd]

You'll end up with something like this:

image

That's about all you'll be able to do with the program in it's current state. You're welcome to try and make changes though! But I warn you - I think this code is pretty damn bad. My past self wasn't as good of programmer as I am today.

@fixrouter4400
Copy link
Author

Hi Doug,

Thank you for help and reply. Will try your suggestion.

Cheers,
Fixrouter4400

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants