cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
Neo
Neo
Level VI

How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

The following example script gets the "Process Parameter" Yield per "Wafer ID in lot ID" using the sample Semiconductor Capability data table.

 

Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp"); // My actual data is similar
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID );
);
cdt_ps = Report(ps)[Outline Box( "Process Screening" )][Table Box( 1 )] << Make Combined Data Table;
Wait(1 );
ps<< SendToReport( Dispatch( {}, "Process Screening", OutlineBox, {Close( 1 )} ) );
Wait (1);
ps << close window;
cdt_ps << New Column( "PassingDie", Numeric, "Continuous", Format( "Best", 12 ), Formula(:Count - :Out of Spec Count));
cdt_ps << New Column( "ParaYield [%]", Numeric, "Continuous", Format( "Best", 12 ), Formula(100*(:PassingDie / :Count)));
cdt_ps:Column << Set Name( "Process Parameter" );

Now lets call a Process Parameter "PP", the Process Parameter Group "PPG" and a Wafer ID in lot ID "wfrIDinLotID" 

 

Next I want to extract the PPG yield per wfrIDinLotID where the PPG's are defined as:

  • All PNP's in one group
  • All NPN's in another group
  • All INM's are in another group and so on.
    i.e. all PPs generated by the line below but without the numbers at the end form the PPG names.

 

cdt_ps << Summary(Group( :Process Parameter ), Freq( "None" ), Weight( "None" ));

I do not yet know how to do get the PPG names in a new column in JSL. So, need some help here.

Some PPGs may have just one member which is fine.

The fail count of a given PPG is, I think, is the sum of fail counts of each of its members, later being available from the above script.

Therefore, for a particular wfrIDinLotID, the "Out of Spec Count" for a given PPG, is expected to have a single numerical value. This will go to a new column, lets call it OOSC_PPG.

The PPG yield for a given wfrIDinLotID would then be 100*(number of SITEs with OOSC_PPG = 0)/ Total SITEs tested.

Total sites tested per wfrIDinLotID is 5 in the example data table.

 

Finally, I would like to generate a report with 3 columns: wfrIDinLotID, PPG,  PPG yield.

Please could I have some direction on how to proceed with JSL?

 

When it's too good to be true, it's neither
1 ACCEPTED SOLUTION

Accepted Solutions
hogi
Level XII

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

 After supporting << get cell color with a Kudo, while waiting for JMP19++ , 
you could generate an auxiliary subset, overwrite the values with the pass/fail 0/1 information and sum them up by PPG :

 

dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );

col_names = dt << Get Column Group( "Processes" );
ps = dt << Process Screening(
	Process Variables( Eval( col_names ) ),
	Spec Limits Dialog( "No (skip columns with no spec limits)" ),
	Control Chart Type( "Indiv and MR" ),
	Grouping( :Wafer ID in lot ID ),
	Color Out of Spec Values
);
dt sub = dt << Subset( All rows, Selected columns only( 0 ) );                    

For Each( {col}, col_names, 
	
	specs = col << Get Property( "Spec limits" );
	
	If( Not( Is Empty( specs ) ),
		lsl = specs["LSL"];
		usl = specs["USL"];
	
		Eval( Eval Expr( col << set each value( Not( lsl < Expr( Name Expr( col ) ) < usl ) ) ) );
	
	);
);

prefixes = {"NPN","PNP","INM"};
PPGs = transform each ({prefix},prefixes,prefix || " fail");

for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);



dt sub << Group Columns( "PPGs", PPGs );

ps = dt sub  << Process Screening(
	Process Variables( Eval( PPGs ) ),
	Spec Limits Dialog( "No (skip columns with no spec limits)" ),
	Control Chart Type( "Indiv and MR" ),
	Grouping( :Wafer ID in lot ID ),
	Color Out of Spec Values
);

 

View solution in original post

22 REPLIES 22
jthi
Super User

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

What have you tried?

-Jarmo
Neo
Neo
Level VI

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

@jthi. First I need to separate the letters from the numbers in the Process Parameter names to arrange them in groups. Do not know how to do separate text from numbers in JSL.

 

When it's too good to be true, it's neither
hogi
Level XII

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?


cool trick: "abuse" the Process Screening platform to get out of spec counts per wafer.
very helpful : )

 

@Neo wrote:

The fail count of a given PPG is, I think, is the sum of fail counts of each of its members


I fear: no
- at least: not in general.

here is an example for  NPN5 & NPN6. If you sum the fail counts, you will count the blue+orange dots twice.
To generate grouped yields (via grouped pass/fail info), you have to start from the raw data. 

hogi_1-1721477464382.png

Neo
Neo
Level VI

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

@hogi . Hmm..

>>>To generate grouped yields (via grouped pass/fail info), you have to start from the raw data

I feared so....

 

but thinking again and contrary to what I thought before, if any one of the members of particular PPG is out of spec, the tested site fails for the particular PPG.

I have a feeling, this can be handled without going back to raw data. 

When it's too good to be true, it's neither
hogi
Level XII

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?


@Neo wrote:

 the tested site fails for the particular PPG.


But with the current approach, you aggregate in the Process Screening Platform - and lose the site information.

 

Let's say, for one of the wafers NPN5 fails at site 1, 2, 3 and NPN6 fails at 2, 3, 4.

Then in the Process Screening platform, you will get for this wafer:

  • out of spec count NPN5 : 3
  • out of spec count NPN6 : 3


I think the only way to find out how many of the sites failed for this wafer (NPN5 or NPN6) is:
go to the original table, count: 1,2,3,4

-> #fails = 4

jthi
Super User

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

I agree with @hogi , you have to perform the calculation on the level where you still have access to the site. If you use process screening you won't be able to differentiate between overlaps. Consider that you have 5 sites on a wafer and 10 tests. If the wafers has only failures on site 1 an ALL tests, would you want to count that as 1 failed site or as 10 failed tests (hogi's post has other example). I would think you don't want to count this as 10 failed sites?

-Jarmo
Neo
Neo
Level VI

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

@jthi @hogi Thanks. I can colour the OOS values using the following

 

Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");

col_names = dt << Get Column Group("Processes"); 
ps = dt << Process Screening (Process Variables( Eval( col_names )),  
                  Spec Limits Dialog( "No (skip columns with no spec limits)" ), 
                  Control Chart Type ("Indiv and MR"),                  
                  Grouping (:Wafer ID in lot ID ),
                  Color Out of Spec Values
                  );                  

I then need to do the following

1. Form a column for PPGs

2. Assign a fail to a particular PPG if any of its members have a coloured cell 

This will only need the raw data.

I do not yet know how to either of the above two steps, so requesting some direction here.

 

When it's too good to be true, it's neither
jthi
Super User

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

Creating the groups can be done using Regex() and getting the colored cells has been solved multiple times in the community, here is one older post How to get the row number of colored cells in a column and assign it a tag (say "1") in a newly crea... . This pattern might not be correct as I'm not sure how the groups should be created

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");

cont_cols = dt << Get Column Names("Continuous", String);

rgx_pattern = "^(.+?)\d*$";

For Each({colname}, cont_cols,
	groupname = Regex(colname, rgx_pattern, "\1");
	Write("\!N'", colname, "' belongs to '", groupname, "' group");
);

and to understand the pattern I suggest using https://regex101.com/ or some large language model (they are pretty good at explaining regex patterns)

-Jarmo
jthi
Super User

Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?

Also utilizing stacked table with something like this can be easier

jthi_0-1721591042143.png

If nothing else, it is easier to visually verify what is going on (I haven't verified these calculations)

jthi_2-1721591151596.png

 

 

-Jarmo