- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: How to get Process Parameter Group Yield per "Wafer ID in lot ID"?
What have you tried?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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
If nothing else, it is easier to visually verify what is going on (I haven't verified these calculations)