專利名稱:集成電路版圖驗(yàn)證并行處理解決方案的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是一種適用于集成電路版圖驗(yàn)證工具中的并行處理方案,所屬的技術(shù)領(lǐng)域是集成電路計(jì)算機(jī)輔助設(shè)計(jì)領(lǐng)域,尤其是涉及集成電路版圖的設(shè)計(jì)規(guī)則檢查(DRC)和版圖與原理圖的一致性檢查(LVS)領(lǐng)域。
背景技術(shù):
近30年來,集成電路技術(shù)一直按照“摩爾定律”向前發(fā)展。芯片的特征尺寸越來越小,單個(gè)芯片的集成度也越來越高。隨著芯片規(guī)模的擴(kuò)大,在集成電路設(shè)計(jì)的各個(gè)階段所需驗(yàn)證的設(shè)計(jì)規(guī)則也在不斷增多。其中集成電路版圖的設(shè)計(jì)規(guī)則檢查(DRC)以及集成電路版圖與原理圖的一致性檢查(LVS)變得越來越重要,它們對(duì)于消除錯(cuò)誤、降低設(shè)計(jì)成本和減少設(shè)計(jì)失敗的風(fēng)險(xiǎn)具有重要作用。在超大規(guī)模集成電路設(shè)計(jì)中,版圖規(guī)模急劇膨脹,如何 在有效時(shí)間內(nèi)完成設(shè)計(jì)方案的驗(yàn)證工作成為各大EDA廠商急需解決的問題。并行處理包括分布式處理和多線程兩種關(guān)鍵技術(shù)。分布式處理研究如何把一個(gè)需要非常巨大的計(jì)算能力才能解決的問題分成許多小的部分,然后把這些部分分配給許多計(jì)算機(jī)進(jìn)行處理,最后把這些計(jì)算結(jié)果綜合起來得到最終的結(jié)果。多線程是處理對(duì)象粒度比分布式更小的并行處理方式。分布式處理每個(gè)處理單位的數(shù)據(jù)處理對(duì)象是一個(gè)進(jìn)程,而多線程的處理對(duì)象是一個(gè)線程。每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。線程是程序中一個(gè)單一的順序控制流程。在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程。線程和進(jìn)程的區(qū)別在于,多個(gè)進(jìn)程有不同的代碼和數(shù)據(jù)空間,而多個(gè)線程則共享數(shù)據(jù)空間,每個(gè)線程有自己的執(zhí)行堆棧和程序計(jì)數(shù)器為其執(zhí)行上下文。線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU。無論進(jìn)程調(diào)度還是線程調(diào)度,都可以用統(tǒng)一的生產(chǎn)者-消費(fèi)者模型描述。在這個(gè)模型中,有I個(gè)(或多個(gè))生產(chǎn)者每隔一段時(shí)間就生產(chǎn)出一件產(chǎn)品,放入緩沖區(qū)中,有I個(gè)(或多個(gè))消費(fèi)者每隔一段時(shí)間就從緩沖區(qū)取出一件產(chǎn)品消費(fèi)。緩沖區(qū)的大小是有限的,如果生產(chǎn)者發(fā)現(xiàn)緩沖區(qū)已滿,只能暫停生產(chǎn),直到消費(fèi)者繼續(xù)消費(fèi)一個(gè)產(chǎn)品使緩沖區(qū)不滿才能繼續(xù)生產(chǎn)。如果消費(fèi)者發(fā)現(xiàn)緩沖區(qū)已空,也只能等待生產(chǎn)者生產(chǎn)一個(gè)產(chǎn)品。簡單的生產(chǎn)者-消費(fèi)者模型如圖I所示。進(jìn)程調(diào)度的輸入是命令圖。命令圖是一組命令的集合,命令之間有依賴關(guān)系,即一條命令的結(jié)果可能會(huì)是另外一條命令的輸入。線程調(diào)度的輸入是單元(Cell)拓?fù)潢P(guān)系圖,這是一種樹形圖,最頂層單元是根,而最低層是葉子節(jié)點(diǎn),從最頂層單元到最低層單元是一種調(diào)用關(guān)系。單元是集成電路設(shè)計(jì)的基本邏輯單位,單元之間可以相互調(diào)用,一個(gè)單元內(nèi)部是一些來源于不同物理層(Layer)的圖形和其他單元實(shí)例(Instance)的集合。
發(fā)明內(nèi)容
本發(fā)明針對(duì)甚大規(guī)模集成電路版圖驗(yàn)證過程中所面臨的運(yùn)行速度過慢,運(yùn)行時(shí)間過長,導(dǎo)致版圖驗(yàn)證最終不可解的問題,提出了一種基于分布式和多線程技術(shù)的并行處理解決方案。在實(shí)際工程應(yīng)用中,此方案能夠極大加速版圖驗(yàn)證工具的運(yùn)行速度,提高可驗(yàn)證版圖規(guī)模。本發(fā)明的主要技術(shù)方案包括以下兩個(gè)模型I.命令調(diào)度 Manager-Worker 模型。在Manager-Worker 模型中,Manager 是生產(chǎn)者,Worker 是消費(fèi)者。Manager 負(fù)責(zé)生產(chǎn)出每條命令,由Worker執(zhí)行,Worker執(zhí)行完畢后將結(jié)果反饋給Manager,Manager獲得 結(jié)果后生產(chǎn)出新的命令,直到所有命令都執(zhí)行完畢。因此,Manger的工作方式包括了以下幾個(gè)步驟(I)編譯命令文件,生成命令調(diào)度圖。命令調(diào)度圖是一種拓?fù)溆邢驁D,其中的節(jié)點(diǎn)表示命令,弧表示數(shù)據(jù)依賴關(guān)系。(2)讀入⑶S文件,生成單元調(diào)用拓?fù)潢P(guān)系圖。⑶S是集成電路路版圖的一種標(biāo)準(zhǔn)文件格式。(3)生成待處理命令。待處理命令即命令圖中入度為0的節(jié)點(diǎn)。(4)調(diào)度待處理命令。將命令發(fā)向一個(gè)空閑的Worker。如果沒有Worker空閑,則Manager等待。Manager和Worker之間的通信使用Socket。Worker和Worker之間不進(jìn)行任何通信。(5)接收命令結(jié)果。Manager在進(jìn)行調(diào)度的同時(shí)要接收Worker命令結(jié)果反饋,當(dāng)有結(jié)果反饋時(shí),Manager要計(jì)算新的入度為0的命令節(jié)點(diǎn)。(6)結(jié)束。當(dāng)所有命名都執(zhí)行完畢,Manager向所有Worker發(fā)送結(jié)束標(biāo)志,所有Worker退出。然后Manager退出。Worker的工作方式包含以下幾個(gè)工作步驟(I)接收Manager的命令分配。Worker上的數(shù)據(jù)除了單元拓?fù)潢P(guān)系圖外,所有其他數(shù)據(jù)都是局部的,Manager會(huì)將命令和輸入數(shù)據(jù)一起打包發(fā)向Worker進(jìn)程。(2)執(zhí)彳丁具體命令。如果是退出命令,Worker退出,否則計(jì)算命令結(jié)果。在執(zhí)彳丁命令期間,Worker不再接受新的任務(wù)。(3)命令執(zhí)行完畢,將結(jié)果返回給Manager。2.單兀調(diào)度 Worker-Slave 模型。在Worker-Slave模型中,Worker是生產(chǎn)者,Slave是消費(fèi)者。Worker負(fù)責(zé)生產(chǎn)出每個(gè)可執(zhí)行單元,由Slave執(zhí)行,Slave執(zhí)行完畢后將結(jié)果反饋給Worker,Worker獲得結(jié)果后根據(jù)單元調(diào)用關(guān)系圖后生產(chǎn)出新的命令,直到所有單元都執(zhí)行完畢。Worker的工作方式可以用以下幾個(gè)步驟來描述(I)接收Mananger進(jìn)程的指令,如果是退出指令,生成與Slave數(shù)量相同的退出指令,放入TaskPool(任務(wù)池)中,然后Worker線程退出。否則計(jì)算入度為0的單元節(jié)點(diǎn),所有該類節(jié)點(diǎn)放入TaskPool中。(2)從ResultsPool (結(jié)果池)中獲取Slave線程計(jì)算結(jié)果,然后產(chǎn)生新Task (任務(wù))放入TaskPool中。
Slave線程的工作方式如下(I)遍歷TaskPool,如果不為空,獲得一個(gè)任務(wù),如果該任務(wù)是退出指令,Slave線程退出,否則開始執(zhí)行。(2)任務(wù)執(zhí)行完畢后,將結(jié)果放入ResultsPool中,繼續(xù)第(I)步。在Worker-Slave模型中,TaskPool和ResultsPool是兩個(gè)臨界資源,多線程對(duì)臨界的訪問必須加鎖,同一時(shí)間只能允許幾個(gè)線程訪問臨界資源,否則會(huì)產(chǎn)生錯(cuò)誤結(jié)果或者內(nèi)存錯(cuò)誤。TaskPool 的鎖命名為 TaskLock,ResultsPool 的鎖命名為 ResultsLock。Worker將Task放入TaskPool的工作步驟可以如下來描述 (I) Lock (TaskLock);(2)將 Task 放入 TaskPool ;(3) Unlock (TaskLock);同理,Worker從ResultsPool 獲取結(jié)果,以及 Slave 訪問 TaskPool 和 ResultsPool的工作方式與以上步驟相同。
圖I生產(chǎn)者-消費(fèi)者模型;圖2Manager_Worker模型工作流程圖;圖3Worker_Slave模型工作流程圖;圖4示例命令拓?fù)潢P(guān)系圖。圖5示例單元調(diào)用拓?fù)潢P(guān)系圖。
具體實(shí)施例方式無論基于命令圖的Manager-Worker進(jìn)程模型,還是基于單元拓?fù)潢P(guān)系圖的Worker-Slave線程模型,都要解決執(zhí)行單位(一個(gè)命令或一個(gè)單元)之間的依賴關(guān)系。以進(jìn)程調(diào)度(以命令為單位)為例,一條命令單元可以處理的必要條件是該命令所需要的輸入數(shù)據(jù)是原始物理層數(shù)據(jù),或者是中間層數(shù)據(jù),并且中間層的數(shù)據(jù)已經(jīng)產(chǎn)生。示例命令序列如下,命令圖如圖4所示,其中0_ND,0_N0DRC, 0_MEMID和0_NWEL是原始層,ND, NTAP,NWEL_1和NWEL是中間層。ND = 0_ND NOT INSIDE 0_N0DRCNTAP = ND NOT INTERACT 0_MEMIDNWEL_1 = 0_NWEL NOT INSIDE 0_N0DRCNWEL = NWEL_1 NOT CUT 0_MEMIDNW. a4N-Well extension of N+diffusion is 0. 15umENC NTAP NWEL < 0. 15 ABUT SINGULAR REGION}示例版圖有5個(gè)單元,TOP調(diào)用A,B和C三個(gè)單元,A和C又調(diào)用了 D單元。單元拓?fù)潢P(guān)系圖如圖5所75。在該方案中Manager只能有I個(gè),假設(shè)有2個(gè)Worker (Master),每個(gè)Worker有2個(gè)Slave。則可能的執(zhí)行流程為
(I)初始時(shí)刻,Manager首先需要編譯命令文件(Rule File)生成命令圖。然后讀入⑶S生成單元拓?fù)湔{(diào)用關(guān)系圖。(2)編譯后可知,入度為零的節(jié)點(diǎn)是2個(gè)INSIDE命令節(jié)點(diǎn)。Manager分別將這兩個(gè)命令(INSIDE)以及輸入數(shù)據(jù)(0_ND,0_N0DRC 和 0_NWEL)發(fā)向 Workerl 和 Worker2。然后Manager阻塞,等待結(jié)果反饋。(3) Worker I接收到數(shù)據(jù)后。計(jì)算入度為0的節(jié)點(diǎn)只有T0P,這時(shí)Workerl將TOP放入TaskPool中,并打算從ResultsPool中取出一個(gè)Cell,但該ResultsPool為空,因此Workerl被阻塞。(4) Slavel從TaskPool中取出TOP任務(wù),并開始執(zhí)行任務(wù)。(5)Slave2打算從TaskPool中取出一個(gè)任務(wù),但隊(duì)列為空,Slave2阻塞。 (6) Slavel完成TOP任務(wù),將TOP放入ResultsPool中,這時(shí)阻塞Workerl被喚醒。Slavel 訪問 TaskPool,發(fā)現(xiàn) TaskPool 為空,Slavel 也被阻塞。(7) Worker I處理TOP單元的結(jié)果,將TOP調(diào)用的A、B、C三個(gè)Cell的入度分別減1,由于減I后它們的入度都為0,所以可將它們依次放入TaskPool,Workerl阻塞。(8)Slave2和Slavel分別從TaskPool中獲得了任務(wù)A和B,解除阻塞狀態(tài),開始執(zhí)行。(9)假設(shè)Slave2先完成,將A的結(jié)果放入ResultsPool中。然后獲得了 C任務(wù)繼續(xù)執(zhí)行。(IO)Workerl從ResultsPool中獲得了 A任務(wù)的結(jié)果,將D的入度減1,但D的入度為I,不能放入TaskPool中。Workerl阻塞。(11)假設(shè)Slavel和Slave2同時(shí)完成。并將B和C結(jié)果放入ResultsPool中。兩個(gè)Slave都阻塞。(12) Worker I 從 ResutlPool 中取出 B 和 C 的結(jié)果。并將 D 放入 ResutlPool 中。Workerl 阻塞。(13) Slavel獲得D任務(wù),完成后將D結(jié)果放入ResultsPool中。Slavel阻塞。(14) Workerl獲得D結(jié)果,發(fā)現(xiàn)整條命令都已經(jīng)執(zhí)行完畢。然后將INSIDE命令的結(jié)果反饋給Manager。(15) Worker2的工作方式與Workerl的工作方式((3) _ (14)步)相同。假設(shè)Worker2剛好也已經(jīng)完成,將結(jié)果返回給Manager。(16)Manager 獲得了 Workerl 和 Worker2 的結(jié)果,將 INTERACT 和 CUT 命令的入度減1,這時(shí)這兩個(gè)節(jié)點(diǎn)的入度都為0,將這兩條命令分別發(fā)向Workerl和Worker2。(17)Workerl和Work2接收到命令后,繼續(xù)執(zhí)行(3)-(14)步的工作。產(chǎn)生命令結(jié)果反饋Manager。(18)Manager接收到INTERACT和CUT命令的結(jié)果,將ENC命令發(fā)向Workerl執(zhí)行。(19)Workerl完成命令后將結(jié)果返回Manager。(20)Mangager接收到結(jié)果后,發(fā)現(xiàn)所有命令都已經(jīng)完成,分別向Workerl和Worker2發(fā)送退出命令。然后Manager進(jìn)程退出。(21)兩個(gè)Worker接收到退出指令后,將所有Slave線程終止,然后兩個(gè)Worker進(jìn)程退出。整個(gè)處理過程完畢。
權(quán)利要求
1.一種甚大規(guī)模集成電路版圖驗(yàn)證并行處理方案,其技術(shù)特征在于包含以下兩個(gè)模型①M(fèi)anager-Worker模型。Manager是生產(chǎn)者,Worker是消費(fèi)者。Manager負(fù)責(zé)生產(chǎn)出每條命令,由Worker執(zhí)行,Worker執(zhí)行完畢后將結(jié)果反饋給Manager,Manager獲得結(jié)果后生產(chǎn)出新的命令,直到所有命令都執(zhí)行完畢。②Worker-Slave模型。在Worker-Slave模型中,Worker是生產(chǎn)者,Slave是消費(fèi)者。Worker負(fù)責(zé)生產(chǎn)出每個(gè)可執(zhí)行單元,由Slave執(zhí)行,Slave執(zhí)行完畢后將結(jié)果反饋給Worker,Worker獲得結(jié)果后根據(jù)單元調(diào)用關(guān)系圖后生產(chǎn)出新的命令,直到所有單元都執(zhí)行完畢。
2.根據(jù)權(quán)利要求I所述的并行處理方案,其特征在于①M(fèi)anager-Worker模型是進(jìn)程級(jí)的并行,而Worker-Slave模型是線程級(jí)的并行。②Manager-Worker模型的處理對(duì)象是命令,Worker-Slave模型的處理對(duì)象是集成電路單元。
3.根據(jù)權(quán)利要求I所述的并行處理方案,其技術(shù)特征包含以下兩個(gè)模型的4個(gè)工作流程(1)Manager-Worker模型。
Manager進(jìn)程工作流程 ①編譯命令文件,生成命令調(diào)度圖。
②讀入GDS文件,生成單元調(diào)用拓?fù)潢P(guān)系圖。
③生成待處理命令。
④調(diào)度待處理命令。
⑤接收命令結(jié)果。
⑥執(zhí)行結(jié)束,向Worker進(jìn)程發(fā)送退出指令。
Worker進(jìn)程工作流程 ①接收Manager的命令分配。
②執(zhí)行具體命令。
③命令執(zhí)行完畢,將結(jié)果返回給Manager。(2)Worker-Slave 模型。
Worker線程工作流程 ①根據(jù)Manager分配的命令,生成待處理單元放入TaskPool。
②從ResultsPool中獲取Slave線程計(jì)算結(jié)果,然后產(chǎn)生新任務(wù)放入TaskPool中。
Slave線程工作流程 ①遍歷TaskPool,如果不為空,獲得一個(gè)任務(wù),如果該任務(wù)是退出指令,Slave線程退出,否則開始執(zhí)行。
②任務(wù)執(zhí)行完畢后,將結(jié)果放入ResultsPool中,繼續(xù)第(I)步。
全文摘要
本發(fā)明是一種適用于集成電路版圖驗(yàn)證工具中的并行處理方案,所屬的技術(shù)領(lǐng)域是集成電路計(jì)算機(jī)輔助設(shè)計(jì)領(lǐng)域,尤其是涉及集成電路版圖的設(shè)計(jì)規(guī)則檢查(DRC)和版圖與原理圖的一致性檢查(LVS)領(lǐng)域。本發(fā)明創(chuàng)造性地提出了基于命令調(diào)度圖的多進(jìn)程(Manager-Worker模型)和基于單元調(diào)用關(guān)系的多線程(Worker-Slave模型)并行處理方法,并將這兩種方法相結(jié)合用于解決甚大規(guī)模集成電路版圖驗(yàn)證過程中所面臨的運(yùn)行時(shí)間過長,驗(yàn)證效率低,進(jìn)而導(dǎo)致版圖無法驗(yàn)證的問題。實(shí)際應(yīng)用中表明,該并行處理方案能夠在用戶可接受的時(shí)間內(nèi)解決超大規(guī)模版圖驗(yàn)證問題。
文檔編號(hào)G06F9/52GK102855339SQ20111018013
公開日2013年1月2日 申請(qǐng)日期2011年6月29日 優(yōu)先權(quán)日2011年6月29日
發(fā)明者宋德強(qiáng), 王國慶, 王鵬 申請(qǐng)人:北京華大九天軟件有限公司