如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?以下範例腳本使用範例半導體能力資料表取得每個「批次 ID 中的晶圓 ID」的「製程參數」產量。
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" );現在讓我們呼叫製程參數「PP」、製程參數組「PPG」和批次 ID「wfrIDinLotID」中的晶圓 ID
接下來,我想提取每個 wfrIDinLotID 的 PPG 產量,其中 PPG 定義為:
- 所有 PNP 都在一組
- 另一組中的所有 NPN
- 所有 INM 都在另一個組中,依此類推。
即由下面的行產生但末尾沒有數字的所有 PP 形成 PPG 名稱。
cdt_ps << Summary(Group( :Process Parameter ), Freq( "None" ), Weight( "None" ));
我還不知道如何在 JSL 的新列中取得 PPG 名稱。所以,這裡需要一些幫助。
有些 PPG 可能只有一名成員,這沒有問題。
我認為,給定 PPG 的失敗計數是其每個成員的失敗計數的總和,稍後可以從上面的腳本中獲取。
因此,對於特定的 wfrIDinLotID,給定 PPG 的「不合格計數」預計具有單一數值。這將轉到一個新列,我們將其稱為 OOSC_PPG。
給定 wfrIDinLotID 的 PPG 產量將為 100*(OOSC_PPG = 0 的站點數量)/測試的站點總數。
在範例資料表中,每個 wfrIDinLotID 測試的站點總數為 5。
最後,我想產生一個包含 3 列的報表:wfrIDinLotID、PPG、PPG 產量。
請問我可以指導如何繼續使用 JSL 嗎?
自動化和腳本編寫視窗回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?你嘗試過什麼?
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?
很酷的技巧:「濫用」工藝篩選平台來超出每個晶圓的規格計數。
很有幫助 : )
@Neo寫道:
我認為給定 PPG 的失敗計數是其每個成員的失敗計數總和
我擔心:沒有
- 至少:一般情況下不是。
這是 NPN5 和 NPN6 的範例。如果將失敗計數相加,則藍色+橙色點將計數兩次。
要產生分組產量(透過分組通過/失敗資訊),您必須從原始資料開始。

回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@jthi 。首先,我需要將過程參數名稱中的字母與數字分開,以便將它們分組。不知道如何在 JSL 中將文字與數字分開。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi 。嗯..
>>>要產生分組產量(透過分組通過/失敗資訊),您必須從原始資料開始
我就很害怕這樣......
但再想一想,與我之前的想法相反,如果特定PPG 的任何一個成員不符合規範,則測試站點對於特定 PPG 會失敗。
我有一種感覺,這可以在不返回原始資料的情況下處理。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?
@Neo寫道:測試站點對於特定 PPG 失敗。
但採用目前方法,您會在流程篩選平台中進行聚合,並遺失網站資訊。
假設其中一塊晶圓 NPN5 在位置 1、2、3 失效,NPN6 在位置 2、3、4 失效。
然後在Process Screening平台中,您將獲得該晶圓:
- 超出規格數量 NPN5:3
- 超出規格數量 NPN6:3
我認為找出該晶圓(NPN5 或 NPN6)有多少個站點失敗的唯一方法是:
轉到原始表,計數:1,2,3,4
-> #失敗= 4
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?我同意@hogi ,您必須在您仍然可以訪問該網站的層級上執行計算。如果您使用流程篩選,您將無法區分重疊。假設您在晶圓上有 5 個位置和 10 個測試。如果晶圓僅在 1 個站點的所有測試中出現故障,您是否要將其計為 1 個失敗站點或 10 個失敗測試( hogi 的帖子有其他示例)。我認為您不想將其算作 10 個失敗網站?
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@jthi @hogi謝謝。我可以使用以下方法為 OOS 值著色
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
); 然後我需要執行以下操作
1. 為 PPG 建立專欄
2. 如果特定 PPG 的任何成員具有彩色單元格,則將失敗指派給該 PPG
這僅需要原始數據。
我還不知道如何執行上述兩個步驟,因此在此請求一些指導。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@jthi 。如果對於給定的晶圓,特定 PPG 的任何一個成員是 OOS,則該 PPG 的測試失敗。網站可能無法通過特定 PPG 測試,但可以通過所有其他 PPG 測試。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?為單元格著色,然後用顏色收集所有行 - 多麼有創意的解決方法!
在 JMP 的未來版本中,這將變得更加容易 - 如果這個願望獲得足夠的榮譽...
:folded_hands: 符合規格(數值)
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?在支援<< get cell color with a Kudo 之後,在等待 JMP19++ 時,
您可以產生一個輔助子集,用通過/失敗 0/1 資訊覆寫這些值,並透過 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
);
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi在我的 JMP 16.2 中測試您的腳本
第二行似乎有錯字。它應該是
col_names = dt << Get Column Group( "Processes" );
這部分拋出錯誤
dt sub << Group Columns( "PPGs", failcols );
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?抱歉 -> 已編輯。
我應該在仔細檢查提交的代碼是否有效之前清除這些符號。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?建立群組可以使用 Regex() 完成,獲取彩色單元格已在社區中多次解決,這是一篇較舊的帖子如何獲取列中彩色單元格的行號並為其分配標籤(例如“1 ")在新建立的列中? 。此模式可能不正確,因為我不確定如何建立群組
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");
);
為了理解模式,我建議使用https://regex101.com/或一些大型語言模型(它們非常擅長解釋正規表示式模式)
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?另外,利用堆疊表與類似的東西會更容易

如果不出意外的話,更容易直觀地驗證正在發生的事情(我還沒有驗證這些計算)

回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi我已經測試了你的腳本,它按預期工作。但是,我不明白為什麼這裡需要 sum () (失敗計數總和?)。
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);你能透露一些資訊嗎?
謝謝
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?ColGroup 包含匯總在一起的列名清單。對於名為「NPN Fail」的列,Sum() 函數擴展為
sum( :NPN1, :NPN2, :NPN3, :NPN4, :NPN5, :NPN6, :NPN7, :NPN8, :NPN9, :NPN10, :NPN11 )
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi @txnelson謝謝。我注意到腳本的這一部分添加了給定 PPG 的每個成員的每個站點的失敗次數。我不確定我是否理解這一點。
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)))))))
);如果某個站點的給定PPG 的任何一個成員失敗,則該站點未能使給定的PPG 失敗,並且該PPG 下的更多成員在該站點失敗並不重要(或者重要嗎?)對於批次中的PPG 產量/晶圓?
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?嗨@Neo
是的,確切地說,這是指定每個 PP 組產量的應用邏輯:
對失敗求和並使用USL = 0
如果一個網站在某一規範上失敗了,那麼它就失敗了。
如果所有候選者的總和為 0,則沒有一個失敗 -> 因此特定站點的整個群組通過。
您喜歡另一種邏輯嗎?
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi 。狡猾!我現在明白了。我非常同意你之前的說法。順便說一句,我最初是從這裡得到的。
我還是比較喜歡「利用」這個詞...

回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?@hogi我現在正在用我的實際數據表測試腳本。
在我的例子中,參數名稱的形式為ABCD_1_X_Y_1_Z,PPG 由 ABCD...GH 的各種組合定義(A 總是字母,其餘可以是字母或數字)。
X和Y是數字,而Z可以是數字、字母或組合。
不要問我為什麼命名是這樣的——不是我做的。
PPG 的形成方式如下
- U33P_1_0_0....將包含在 PPG「U33P」中
- CASMAPUL23Out_1_0_1_...將包含在 PPG「CASMAPUL23Out」中,依此類推
因此,要取得 PPG 名稱,我需要取得參數名稱中第一個底線之前的字母組合。如何修改以下內容以適合我的情況。
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?查看 Word() 和 Words() 函數,它們通常對於此類事情非常有用。
回覆:如何取得每個「批次 ID 中的晶圓 ID」的製程參數組良率?正如@jthi所說,
colGroup = Filter Each({col}, col_names, Word(1, col << getname(),"_") == myName);會做的工作:)