cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
jpol
Level IV

How to determine clusters of semiconductor wafer defect / sort patterns?

HI,

I have just recently installed JMP 12.

One of the main reasons I did so was to improve our data mining capabilities by possibly using  the "Clustering Improvements" introduced in JMP 12.

My basic need is to divide wafer patterns into groups in order to perform a commonality analysis with the intention of finding the sources of variation.

As stated in the JMP 12 release notes:

"In the semiconductor and other industries, it is important to determine clusters of wafer defect patterns. This previously meant creating one variable to make XY coordinates, then splitting on this dimension, clustering, and merging the clusters. Now, JMP accomplishes this in one step."

There is an illustration showing an example of what I would like to do:

10286_pastedImage_0.png

I have a need to perform such analyses quite often. An example from this week is seen below:

10287_pastedImage_1.png

I need to determine how many similar patterns exist and how many wafers belong to each pattern?

Has anyone performed such an analysis?

Is there a good tutorial / guide available anywhere?

I am sure that this is of major interest to semiconductor and MEMs device manufacturers.

This case could be a good candidate for some forthcoming JMP Discovery Summit

All advice and  input is appreciated.

-  Philip

14 REPLIES 14
jpol
Level IV

Re: How to determine clusters of semiconductor wafer defect / sort patterns?

Thanks Michael for your comprehensive reply.

Looking forward to making some spatial exploration.

I appreciate the time and effort you have put into this topic.

Best Regards,

Philip

Greenhorn
Level III

Re: How to determine clusters of semiconductor wafer defect / sort patterns?

Hi Mike,

 

I'd like to try out the Wafer Stacked method. However, I encounter the problem with " not enough nonmissing data".

I don't understand that at all. I compared my data with sample data "wafer stacked.jmp".

Nothing is different im principle.

Are there any other known issues?

 

@martindemel 

jerry_cooper
Staff (Retired)

Re: How to determine clusters of semiconductor wafer defect / sort patterns?

Hi @Greenhorn ,

It's difficult to know for sure without seeing your data, however, I believe the error you're receiving may be a result of trying to stack incomplete wafer maps, or, attempting to stack wafers with different layouts. If your data only contain the defective die (and their locations), you'll need to fill in your table with the "good" die locations for each wafer and indicate they are not defective, i.e. enter a 0 in the Defects column. This may sound daunting but can easily be done with a join after you have created a table with all the possible die locations for your wafer map.  This approach assumes each wafer has the same layout.

 

Trying to compare wafers with different layouts with this platform would require some significant data manipulation and creativity. 

 

Posting your data, if you can, would be helpful in determining a more definitive course for you.

Greenhorn
Level III

Re: How to determine clusters of semiconductor wafer defect / sort patterns?

Hi @jerry_cooper ,

 

Due to measerment setup "stop on fail" I lose values. That means I have missing values.

I use "Missing value imputation" to overcome my problem. Thanks for you reply!!

 

Another question: The heatmap I see. How is it calculated or normalezed?

min/max of column/ variable = range?

And then the color of a certain value is assigned within that range?

 

 

 

hogi
Level XI

Re: How to determine clusters of semiconductor wafer defect / sort patterns?

What is the easiest way to fill in a table with the "good" die locations?

 

I guess there is a much easier way than this one ...


Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Wafer Stacked.jmp" );
dt << Select Where( :Defects == 0 ) << Delete Rows;

xmin = -21;
ymin = -21;
xmax = 21;
ymax = 21;
dx= xmax-xmin;
dy= ymax-ymin;
nItems= (dx +1)*(dy + 1)-1;


tmp = New Table();
tmp<< Add Rows( nItems );
tmp: column1 << Data Type( Character ) <<  set name("Lot");
tmp << new column("Wafer");
tmp << new column("x", Set Each Value(xmin + Floor((row()-1)/dx)));
tmp << new column("y", Set Each Value(ymin +Mod((row()-1),dy)));
label= new column("label",Character, Set Each Value(Char(:x)||" "||Char(:y)));
tmp << new column("missing");

myEntries = tmp:label << get values();


entriesAsCols = tmp << Split(
	Split By( :x, :y ),
	Split( :missing ),
	Group( :lot, :wafer ),
	OutPut Table("split")
);


 myMatrix = entriesAsCols << Join(
	With( dt ),
	Merge Same Name Columns,
	Match Flag(0),
	By Matching Columns( :Lot = :Lot, :Wafer=:Wafer ),
	Drop multiples( 0, 1 ),
	Include Nonmatches( 0, 1 ),
	OutputTable("Matrix")
);


// Stack data table
// → Data Table( "Untitled 26" )

cols = Transform each ({col},As List( myEntries),Column(myMatrix,Char(col)));

myMatrixStacked = myMatrix << Stack(
	columns(cols),
	Source Label Column( "label" ),
	Stacked Data Column( "Data" ),
	"Non-stacked columns"n( Keep( :Lot, :Wafer ) ),
	Output Table("stacked")
);

myMatrixStacked << new Column ("Defects", Set Each Value(.));


colX = myMatrixStacked << new column ("X_Die",Set Each Value(Num(Word(1,:label," "))));
colY = myMatrixStacked << new column ("Y_Die",Set Each Value(Num(Word(2,:label," "))));


floodedTable = dt << Join(
	With( myMatrixStacked ),
	Match flag(0),
	Merge Same Name Columns,
	By Matching Columns(
		:Lot = :Lot, :Wafer = :Wafer, :X_Die = :X_Die, : Y_Die = :Y_Die
	),
	Include Nonmatches( 1, 1 ),
	OutputTable("flooded")

);

	floodedTable << Recode Column(
		dt:Defects,
		{Map Value( _rcOrig, {., 0}, Unmatched( _rcNow ) )},
		Target Column( :Defects )
	);

CLose(dt,myMatrix,entriesAsCols,myMatrixStacked, noSave);