本發(fā)明涉及FPGA數(shù)據(jù)處理技術(shù)領(lǐng)域,具體來說是一種用于光刻機(jī)矢量數(shù)據(jù)柵格化的快速填充的算法。
背景技術(shù):
激光直接成像技術(shù)(laser direct imaging,簡稱LDI)也稱為激光直寫,是近年來發(fā)展起來的一種用于半導(dǎo)體器件生產(chǎn)的技術(shù)。傳統(tǒng)的曝光工序是通過汞燈照射菲林將圖像轉(zhuǎn)移至基底上,而LDI則是用激光掃描的方法通過圖形發(fā)生器直接將圖像在基底上成像。相比較傳統(tǒng)的曝光技術(shù),LDI曝光過程不需要菲林,有效降低了成本,且工序簡單、圖像精度高,可適應(yīng)更精細(xì)的圖形曝光,也有利于提升生產(chǎn)的良率。
通常半導(dǎo)體器件設(shè)計(jì)的圖形數(shù)據(jù)為矢量數(shù)據(jù),包括GDS II、Gerber、ODB++等格式數(shù)據(jù),而激光直寫中圖形發(fā)生器需要的數(shù)據(jù)為bitmap格式的數(shù)據(jù),因此,需要將矢量數(shù)量柵格化處理,變成bitmap數(shù)據(jù)。柵格化數(shù)據(jù)的處理速度直接影響光刻機(jī)的產(chǎn)能,為了提高光刻機(jī)的產(chǎn)能,則需要提高柵格化的速度。
矢量圖的柵格化處理一般分為3個(gè)步驟:求掃描線與多邊形各個(gè)邊的交點(diǎn);對(duì)交點(diǎn)進(jìn)行排序;將排序之后的點(diǎn)進(jìn)行組合填充。傳統(tǒng)的柵格化處理方法是由LDI系統(tǒng)中的主機(jī)進(jìn)行圖形資料解析后,將圖形資料轉(zhuǎn)化為利于下位機(jī)處理的圖形坐標(biāo)點(diǎn)程序,然后傳輸給現(xiàn)場可編程門陣列(FPGA)來處理還原成待曝光的bitmap數(shù)據(jù)。其中,F(xiàn)PGA的處理主要涉及排序和填充兩個(gè)步驟。這兩個(gè)步驟中,排序是最消耗邏輯資源和時(shí)間的,排序的快慢直接影響矢量圖的填充速度及所使用的FPGA的價(jià)格。而對(duì)于非自相交多邊形填充,最大的難度就是掃描線與多邊形交點(diǎn)的計(jì)算與排序,如何簡化排序過程是填充方法的關(guān)鍵因素之一。
現(xiàn)行的基于FPGA的填充算法僅能實(shí)現(xiàn)三角形和四邊形的填充,而對(duì)于非自相交多邊形填充,為了簡化FPGA填充的難度,多數(shù)方案選擇是由計(jì)算機(jī)對(duì)多邊形進(jìn)行三角化或直角梯形化,大大增加了計(jì)算機(jī)的處理難度和計(jì)算量。存在一種進(jìn)步的算法可以實(shí)現(xiàn)對(duì)凸多邊形進(jìn)行填充。但在實(shí)際環(huán)境中,多邊形多數(shù)是非自相交凹多邊形。因此開發(fā)基于FPGA對(duì)非自交任意多邊形的填充算法,不僅可以簡化計(jì)算的處理,也可以充分利用FPGA的計(jì)算效率,大大提升生產(chǎn)效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是針對(duì)現(xiàn)有FPGA填充算法中排序復(fù)雜、資源消耗大和排序時(shí)間長的不足,以及現(xiàn)有基于FPGA的填充算法無法直接填充凹多邊形的不足,提供一種快速的在FPGA中填充任意非自相交多邊形的方法。
本發(fā)明僅針對(duì)非自相交多邊形,即除多邊形的頂點(diǎn)外,多邊形的各邊無其他交點(diǎn)。本發(fā)明的技術(shù)方案如下:
一種在FPGA中填充非自相交多邊形的填充方法,包括如下步驟:
(1)坐標(biāo)獲取步驟,獲取多邊形各頂點(diǎn)的Y坐標(biāo)值,得出各頂點(diǎn)的Y坐標(biāo)值的最大值點(diǎn)Ymax、最小值點(diǎn)Ymin以及非極值點(diǎn),并對(duì)多邊形各邊進(jìn)行編號(hào)。
(2)交點(diǎn)計(jì)算步驟,獲取Y=Ymin的直線與多邊形各邊的交點(diǎn)的X坐標(biāo)值并記錄交點(diǎn)個(gè)數(shù)以及交點(diǎn)所在邊的編號(hào)。
(3)交點(diǎn)排序及邊排序步驟,對(duì)交點(diǎn)的X坐標(biāo)值進(jìn)行排序,然后按照X值由小到大的順序?qū)稽c(diǎn)進(jìn)行交點(diǎn)排序,并對(duì)交點(diǎn)所在邊依據(jù)交點(diǎn)排序的順序進(jìn)行邊排序,記錄邊排序后各個(gè)邊編號(hào)的順序。
(4)組合填充步驟,對(duì)排序后的交點(diǎn)從x值最小的交點(diǎn)開始每兩個(gè)組合為一組,每個(gè)交點(diǎn)不重復(fù)參加組合,同一組的兩個(gè)交點(diǎn)之間進(jìn)行填充,其余位置不填充。
(5)條件判斷步驟,令Y=Y+1,判斷Y是否大于Ymax。
若Y>Ymax時(shí)結(jié)束填充過程。
若Y不大于Ymax,則返回并執(zhí)行交點(diǎn)計(jì)算步驟,然后進(jìn)行極值點(diǎn)判斷:
若交點(diǎn)中不存在非極值點(diǎn)的頂點(diǎn)或交點(diǎn)中存在非極值點(diǎn)的頂點(diǎn)但該頂點(diǎn)擁有的兩條邊均在當(dāng)前Y直線的同一側(cè)時(shí),則執(zhí)行交點(diǎn)排序及邊排序步驟及之后的步驟,直至Y>Ymax時(shí)結(jié)束填充過程;
若交點(diǎn)中存在非極值點(diǎn)的頂點(diǎn)且該頂點(diǎn)擁有的兩條邊在當(dāng)前Y直線的兩側(cè)時(shí),則進(jìn)行交點(diǎn)合并及邊替換,然后執(zhí)行交點(diǎn)排序及邊排序步驟及之后的步驟,直至Y>Ymax時(shí)結(jié)束填充過程。
其中,當(dāng)Y>Ymin且Y≤Ymax時(shí),所述交點(diǎn)排序及邊排序步驟存在簡化算法,所述簡化算法首先對(duì)當(dāng)前Y直線與多邊形的交點(diǎn)個(gè)數(shù)與上一次記錄的交點(diǎn)個(gè)數(shù)進(jìn)行比較,然后根據(jù)交點(diǎn)個(gè)數(shù)變化的情況執(zhí)行相應(yīng)簡化算法:
當(dāng)交點(diǎn)個(gè)數(shù)與上一次記錄的交點(diǎn)個(gè)數(shù)相同,且上一次記錄的交點(diǎn)不存在極值點(diǎn)的頂點(diǎn),則交點(diǎn)對(duì)應(yīng)的邊順序就是本次交點(diǎn)排序的順序;
當(dāng)交點(diǎn)個(gè)數(shù)與上一次記錄的交點(diǎn)個(gè)數(shù)相同,且上一次記錄的交點(diǎn)存在極值點(diǎn)的頂點(diǎn),則對(duì)極值點(diǎn)的頂點(diǎn)具有的兩條邊按照對(duì)應(yīng)交點(diǎn)的排序順序進(jìn)行排序,然后將所述兩條邊排序的結(jié)果作為整體參與邊排序。更優(yōu)選的方法是:若所述兩條邊排序的結(jié)果保持與上一次記錄的邊排序結(jié)果中此兩條邊的排序順序一致時(shí),則無需進(jìn)行邊排序,上一次記錄的邊排序結(jié)果即為本次的邊排序結(jié)果;若排序結(jié)果不一致,只需要將上一次記錄的邊排序結(jié)果中此兩條邊的排序順序交換,即是本次的邊排序結(jié)果。
當(dāng)交點(diǎn)個(gè)數(shù)比上一次記錄的交點(diǎn)個(gè)數(shù)多時(shí),對(duì)交點(diǎn)進(jìn)行排序,以交點(diǎn)排序的結(jié)果作為交點(diǎn)所在的邊的排序結(jié)果,將此交點(diǎn)所在的邊的排序結(jié)果作為整體參與邊排序;
當(dāng)交點(diǎn)個(gè)數(shù)比上一次記錄的交點(diǎn)個(gè)數(shù)少時(shí),將減少的交點(diǎn)對(duì)應(yīng)的邊從邊排序的序列中刪除,剩余的邊排序的序列保持不變,邊排序的結(jié)果是對(duì)應(yīng)交點(diǎn)的排序順序。
其中,所述交點(diǎn)合并的方法是:將非極值點(diǎn)的頂點(diǎn)對(duì)應(yīng)的兩個(gè)交點(diǎn)合并為一個(gè),然后進(jìn)行交點(diǎn)排序。
其中,所述邊替換的方法是:使用非極值點(diǎn)的頂點(diǎn)擁有的兩條邊中在當(dāng)前Y直線未填充一側(cè)的邊替換當(dāng)前Y直線已填充一側(cè)的邊參與邊排序。
以上填充方法適用于任意邊數(shù)的非自相交多邊形。
本發(fā)明具有如下有益效果:
本發(fā)明涉及一種在FPGA中填充非自相交多邊形的填充方法,與現(xiàn)有的算法相比,本發(fā)明的方法填充過程簡單,填充速度快。尤其本發(fā)明的填充方法中有關(guān)排序的處理算法,視交點(diǎn)個(gè)數(shù)變化的情況采用簡化的排序方法,大大降低填充過程中中交點(diǎn)的排序運(yùn)算量,極大地提高了填充速度。此外,本發(fā)明的方法不僅適應(yīng)于在FPGA中填充,也適用于在CPU中填充,可以有效降低CPU的時(shí)間成本。
附圖說明
圖1是本發(fā)明的在FPGA中填充非自相交多邊形的填充方法的流程圖;
圖2是本發(fā)明實(shí)施例1的填充過程若干Y直線與多邊形交點(diǎn)的示意圖;
圖3是本發(fā)明實(shí)施例1的填充過程的組合填充示意圖。
具體實(shí)施方式
下面將結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行清楚完整地描述。
本發(fā)明提供一種在FPGA中填充非自相交多邊形的填充方法,如附圖1所示,本發(fā)明的填充方法,包括如下步驟:
(1)坐標(biāo)獲取步驟:獲取多邊形各頂點(diǎn)的Y坐標(biāo)值,得出各頂點(diǎn)的Y坐標(biāo)值的最大值點(diǎn)Ymax、最小值點(diǎn)Ymin以及非極值點(diǎn),并對(duì)多邊形各邊進(jìn)行編號(hào)。
(2)交點(diǎn)計(jì)算步驟:獲取Y=Ymin的直線與多邊形各邊的交點(diǎn)的X坐標(biāo)值并記錄交點(diǎn)個(gè)數(shù)以及交點(diǎn)所在邊的編號(hào)。
(3)交點(diǎn)排序及邊排序步驟:對(duì)交點(diǎn)的X坐標(biāo)值進(jìn)行排序,然后按照X值由小到大的順序?qū)稽c(diǎn)進(jìn)行交點(diǎn)排序,并對(duì)交點(diǎn)所在邊依據(jù)交點(diǎn)排序的順序進(jìn)行邊排序,記錄邊排序后各個(gè)邊編號(hào)的順序。
(4)組合填充步驟:對(duì)排序后的交點(diǎn)從x值最小的交點(diǎn)開始每兩個(gè)組合為一組,每個(gè)交點(diǎn)不重復(fù)參加組合,同一組的兩個(gè)交點(diǎn)之間進(jìn)行填充,其余位置不填充。
(5)條件判斷步驟:令Y=Y+1,判斷Y是否大于Ymax。
若Y>Ymax時(shí)結(jié)束填充過程。
若Y不大于Ymax,則返回并執(zhí)行交點(diǎn)計(jì)算步驟,然后進(jìn)行極值點(diǎn)判斷:
若交點(diǎn)中不存在非極值點(diǎn)的頂點(diǎn)或交點(diǎn)中存在非極值點(diǎn)的頂點(diǎn)但該頂點(diǎn)擁有的兩條邊均在當(dāng)前Y直線的同一側(cè)時(shí),則執(zhí)行交點(diǎn)排序及邊排序步驟及之后的步驟,直至Y>Ymax時(shí)結(jié)束填充過程;
若交點(diǎn)中存在非極值點(diǎn)的頂點(diǎn)且該頂點(diǎn)擁有的兩條邊在當(dāng)前Y直線的兩側(cè)時(shí),則進(jìn)行交點(diǎn)合并及邊替換,然后執(zhí)行交點(diǎn)排序及邊排序步驟及之后的步驟,直至Y>Ymax時(shí)結(jié)束填充過程。
以下是本發(fā)明的具體實(shí)施例。
實(shí)施例1
附圖2(a)是本實(shí)施例待填充的多邊形ABCDEFG,對(duì)此多邊形的填充方法過程如下:
(1)坐標(biāo)獲取。獲取多邊形ABCDEFG各頂點(diǎn)Y坐標(biāo)值的最大值、最小值和非極值點(diǎn),如圖2(a)所示,A點(diǎn)為極小值點(diǎn),即;F點(diǎn)為極大值點(diǎn),即。B、C、D、E、G點(diǎn)為非極值點(diǎn)。對(duì)多邊形ABCDEFG各邊編號(hào),記為AB、BC、CD、DE、EF、FG、GA。
(2)交點(diǎn)計(jì)算。計(jì)算的直線與多邊形ABCDEFG的交點(diǎn),如圖2(b)所示,交點(diǎn)分別是和,交點(diǎn)個(gè)數(shù)為2,交點(diǎn)所在的邊分別是AG和AB。
(3)交點(diǎn)排序及邊排序。比較和值的大小,,因此交點(diǎn)排序任意;邊的排序?yàn)锳G、AB、BC、CD、DE、EF、FG或AB、AG、BC、CD、DE、EF、FG。
(4)組合填充。對(duì)排序后的交點(diǎn)從X值最小的交點(diǎn)開始每兩個(gè)組合為一組,每個(gè)交點(diǎn)不重復(fù)參加組合,同一組的兩個(gè)交點(diǎn)之間進(jìn)行填充,其余位置不填充。如圖3(a)所示,即對(duì)和之間進(jìn)行填充。
(5)進(jìn)行條件判斷。令,如圖2(c)直線,判斷得知,則返回交點(diǎn)計(jì)算步驟,計(jì)算直線與多邊形ABCDEFG的交點(diǎn),交點(diǎn)分別是和,交點(diǎn)個(gè)數(shù)為2,交點(diǎn)所在的邊分別是AG和AB。交點(diǎn)中無非極值點(diǎn)的頂點(diǎn),因此直接進(jìn)行交點(diǎn)排序及邊排序。
(6)交點(diǎn)排序及邊排序(簡化算法)。由于滿足且,因此可使用交點(diǎn)排序及邊排序的簡化算法。通過對(duì)當(dāng)前Y直線與多邊形的交點(diǎn)個(gè)數(shù)與上一次記錄的交點(diǎn)個(gè)數(shù)進(jìn)行比較,交點(diǎn)個(gè)數(shù)保持不變,且上一次記錄的交點(diǎn)存在極值點(diǎn)的頂點(diǎn),選用方案二,對(duì)上一次極值點(diǎn)的頂點(diǎn)具有的兩條邊AG和AB按直線與交點(diǎn)的X坐標(biāo)值從小到大排序排序。
首先對(duì)兩個(gè)交點(diǎn)和排序,,則AG和AB的排序順序?yàn)锳G、AB。
如果上次邊排序的結(jié)果為AG、AB、BC、CD、DE、EF、FG,則此次AG和AB的排序順序保持與上一次記錄的邊排序結(jié)果中AG和AB的排序順序一致時(shí),上一次記錄的邊排序結(jié)果即為本次的邊排序結(jié)果,即AG、AB、BC、CD、DE、EF、FG。
如果上次邊排序的結(jié)果為AB、AG、BC、CD、DE、EF、FG,則此次AG和AB的排序順序保持與上一次記錄的邊排序結(jié)果中AG和AB的排序順序不一致,因此將上一次記錄的邊排序結(jié)果中AG和AB的排序順序交換即是本次的邊排序結(jié)果,即AG、AB、BC、CD、DE、EF、FG。
邊排序的結(jié)果作為交點(diǎn)排序的結(jié)果,即。
(7)組合填充。如圖3(b)所示,對(duì)和之間進(jìn)行填充。
(8)進(jìn)行條件判斷。令,,判斷新的Y直線與的關(guān)系,只要,則返回進(jìn)行交點(diǎn)計(jì)算步驟,然后循環(huán)進(jìn)行步驟(6)和(7),直至?xí)r結(jié)束填充過程。
以下對(duì)于填充過程中一些特殊的Y直線位置進(jìn)行進(jìn)一步地闡述。
當(dāng)時(shí),如圖2(d)所示,Y直線與多邊形ABCDEFG的交點(diǎn)個(gè)數(shù)發(fā)生了變化,變?yōu)榱?個(gè),而的直線與多邊形的個(gè)數(shù)是兩個(gè)。計(jì)算直線與多邊形ABCDEFG的交點(diǎn),交點(diǎn)分別是、、、,交點(diǎn)所在的邊對(duì)應(yīng)是AG、AB、BC、CD。對(duì)交點(diǎn)、、、按X值從小到大進(jìn)行排序,,對(duì)應(yīng)的邊的排序是AG、AB、BC、CD,將其作為整體參與邊排序,邊排序結(jié)果是AG、AB、BC、CD、DE、EF、FG。
組合填充時(shí)將和之間和和之間進(jìn)行填充,和之間則不填充,填充示意圖如圖3(c)所示。
如圖2(e)所示,當(dāng)時(shí),直線與多邊形ABCDEFG的交點(diǎn)中出現(xiàn)了非極值點(diǎn)的頂點(diǎn)G,且該頂點(diǎn)G擁有的兩條邊AG和GF在當(dāng)前Y直線的兩側(cè),因此進(jìn)行交點(diǎn)合并及邊替換。
交點(diǎn)合并的方法是:將非極值點(diǎn)的頂點(diǎn)G對(duì)應(yīng)的兩個(gè)交點(diǎn)和合并為一個(gè),然后進(jìn)行交點(diǎn)排序,交點(diǎn)排序的結(jié)果是、、、、、。
邊替換的方法是:使用非極值點(diǎn)的頂點(diǎn)G擁有的兩條邊AG和GF中在當(dāng)前Y直線未填充一側(cè)的邊GF替換當(dāng)前Y直線已填充一側(cè)的邊AG參與邊排序。邊排序的結(jié)果是GF、AB、BC、EF、ED、CD。
組合填充時(shí),將和之間、和之間以及和之間進(jìn)行填充,和之間以及和之間不填充,填充示意圖如圖3(d)所示。
當(dāng)時(shí),如圖2(f)所示,Y直線與多邊形ABCDEFG的交點(diǎn)個(gè)數(shù)減少為4個(gè)。此時(shí)四個(gè)交點(diǎn)分別是、、、,減少的交點(diǎn)對(duì)應(yīng)的邊是AB和BC。將AB和BC從上一次記錄的邊排序的序列GF、AB、BC、EF、ED、CD中刪除,得到本次邊排序的結(jié)果為GF、EF、ED和CD,對(duì)應(yīng)交點(diǎn)的排序順序是、、、。
組合填充時(shí),將和之間和和之間進(jìn)行填充,和之間則不填充,填充示意圖如圖3(e)所示。
當(dāng)時(shí),如圖2(g)所示,Y直線與多邊形ABCDEFG的交點(diǎn)個(gè)數(shù)減少為2個(gè)。此時(shí)四個(gè)交點(diǎn)分別是、,減少的交點(diǎn)對(duì)應(yīng)的邊是ED和CD。將ED和CD從上一次記錄的邊排序的序列GF、EF、ED和CD中刪除,得到本次邊排序的結(jié)果為GF、EF,對(duì)應(yīng)交點(diǎn)的排序順序是、。
組合填充時(shí),將和之間,填充示意圖如圖3(f)所示。
和的填充過程相似,如圖2(h)和圖3(g)所示。時(shí)的填充完成后,執(zhí)行條件判斷,令,此時(shí)新的Y大于,填充過程結(jié)束。
以上應(yīng)用具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行了詳細(xì)闡述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。同時(shí),以上實(shí)施例的說明只是用于幫助理解本發(fā)明的核心思想,對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處。因此,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。