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
22 REPLIES 22
Neo
Neo
Level VI

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

@jthi. If for a given wafer, any one of the members of a particular PPG is OOS, then its a test fail for this PPG. A site can fail a particular PPG test but pass tests on all other PPGs.

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"?

color the cells and then collect all rows with colors - what a creative workaround !

 

in a future version of JMP it will be much easier - if this wish collects enough Kudos ...
🙏 is in spec (value) 

 

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
);

 

Neo
Neo
Level VI

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

@hogi Testing your script inn my JMP 16.2

Second line appears to have a typo. It should be

col_names = dt << Get Column Group( "Processes" );

 and the this part is throwing error

dt sub << Group Columns( "PPGs", failcols );
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"?

sorry -> edited.

I should have cleared the symbols before double checking if the submitted code works.

Neo
Neo
Level VI

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

@hogi I have tested your script and it works as expected. However, I do not understand why the sum () (sum of fail count?) is necessary here.

Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);

Could you shed some light please?

Thanks

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

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

ColGroup contains a list of column names which are being summed together.  For column named "NPN Fail" the Sum() function is expanded to 

sum( :NPN1, :NPN2, :NPN3, :NPN4, :NPN5, :NPN6, :NPN7, :NPN8, :NPN9, :NPN10, :NPN11 )
Jim
Neo
Neo
Level VI

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

@hogi @txnelson Thanks. I note that this part of the script adds the number of fails per site for each member for a given PPG. I am not sure if I understand this.

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)))))))
);

If a site fails for any one member of a given PPG, this site fails the given PPG and it does not matter if more members under this PPG fail at this site (or does it matter?) for the PPG yield/wafer in a lot?

 

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"?

Hi @Neo 

yes, exactly, this is the applied logic to specify the yield per PP Group:

sum the fails and use USL = 0

if a site fails for one spec, it's fail.
If Sum of all candidates is 0, none of them is fail -> so pass for the complete group at the specific site.

 

Would you prefer another logic?

Neo
Neo
Level VI

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

@hogi . Cunning!!  I get it now. I cant agree more at your earlier statement. BTW I originally got it from here

I would still prefer the word "exploit"...

 

Neo_1-1721733855828.png

 

 

 

 

When it's too good to be true, it's neither