趙 強(qiáng),甄江平,楊 菊,原玉章
(西安電子科技大學(xué)CAD研究所,陜西西安 710071)
目前市場上常用的EDA軟件,例如Cadence公司的 SI仿真軟件,雖已包含 PCB 板圖審查功能[1-2],但缺乏整板仿真能力[3]。另外,雖不同EDA軟件的審查功能模塊各具特色,但軟件平臺間并不具備統(tǒng)一的文件交換接口規(guī)范,造成不同EDA軟件開發(fā)平臺間資源共享困難,無法實(shí)現(xiàn)PCB板圖的整體優(yōu)化設(shè)計(jì)。因此,為解決各種EDA軟件之間的數(shù)據(jù)交換問題和PCB板圖的整板仿真問題,開發(fā)統(tǒng)一數(shù)據(jù)交換接口和自動整板仿真平臺尤為重要。
本文著重描述了基于ODB++的統(tǒng)一數(shù)據(jù)交換接口的實(shí)現(xiàn)方法研究。因各軟件已經(jīng)能輸出ODB++文件,故本文只針對 ODB++文件的輸入做出研究[4]。此研究基于Altium Designer軟件和PLV平臺,PLV平臺是一個以PCB工程審查為主要功能的軟件。
ODB++(Open Data Base)―開放式數(shù)據(jù)庫。
ODB++標(biāo)準(zhǔn)文件是由VALOR提出的一種ASCII碼,雙向傳輸文件。文件集成了所有PCB和線路板裝配功能性描述。涵蓋了PCB設(shè)計(jì)、制造和裝配方面的要求。包括所有PCB繪圖、布線層、布線圖、焊盤堆疊、夾具等所有信息。它的提出主要用來代替GEBER文件的不足,包含更多板圖和制造裝配信息。
ODB++文件的結(jié)構(gòu),如圖1所示。ODB++標(biāo)準(zhǔn)是一個擁有多級目錄的文件系統(tǒng)。圖1所示是該文件系統(tǒng)的一級目錄,其中帶有“<◇>”符號的文件名是自定義文件名,而不帶符號的則是標(biāo)準(zhǔn)定義的文件名稱,不可更改。本文研究所需數(shù)據(jù)在matrix和steps文件目錄下。
圖1 ODB++文件系統(tǒng)
matrix目錄如圖2所示,在此文件夾中有一個matrix文件。在此文件中使用二維矩陣的形式記錄了電路板系統(tǒng)名稱、各層的名稱和層數(shù)及其他的簡略信息。
另一個重要的目錄是steps,這里有電路板圖的所有信息。如圖3所示,為此目錄下的文件結(jié)構(gòu)。其中,略去了包含關(guān)于PCB制造和裝配信息文件的結(jié)構(gòu),而文中只關(guān)心記錄PCB編輯信息文件[5]。
圖2 matix文件系統(tǒng)
圖3 steps文件系統(tǒng)
從以上文件中便可提取出一個PCB工程所需的所有信息。因此,以O(shè)DB++作為統(tǒng)一接口的標(biāo)準(zhǔn)是可行的。
PLV軟件是本實(shí)驗(yàn)室自行開發(fā)的一款PCB板圖編輯審查軟件。其中,審查功能是重點(diǎn),其除具有基本的編輯、審查功能外,還可實(shí)現(xiàn)如下功能:(1)具有導(dǎo)入導(dǎo)出ODB++標(biāo)準(zhǔn)文件的接口。(2)具有功能強(qiáng)大的信號完整性(SI)審查功能。(3)具有豐富的DRC審查。(4)具有友好的界面。(5)規(guī)則自定義功能。(6)強(qiáng)大的規(guī)則管理存儲功能。
此軟件的數(shù)據(jù)結(jié)構(gòu)所包含的PCB相關(guān)數(shù)據(jù)是全面、完備、正交的,既不遺漏PCB編輯、審查所需的數(shù)據(jù),又不對同一數(shù)據(jù)重復(fù)存儲。本文所做實(shí)驗(yàn)就是以PLV平臺為基礎(chǔ),該平臺的數(shù)據(jù)結(jié)構(gòu)部分,如圖4所示。軟件總體指針下包含PCB工程的所有信息,如外框描述、阻焊切口、器件列表、封裝列表、網(wǎng)絡(luò)列表等。充分滿足了編輯審查PCB工程所需的全部信息[6]。
建立一個用于繪制PCB板圖的軟件平臺PLV,并創(chuàng)建一個讀取ODB++文件的菜單界面。根據(jù)ODB++文件的標(biāo)準(zhǔn)讀取其中與PCB板圖相關(guān)的內(nèi)容并進(jìn)行處理,然后再將其轉(zhuǎn)化為PLV平臺中可存儲的數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)從ODB++文件到PCB板圖的轉(zhuǎn)化。
步驟1 創(chuàng)建的PLV軟件平臺其實(shí)現(xiàn)基于MFC,其既可繪制編輯PCB板圖,又具有功能強(qiáng)大的板圖審查模塊。具體描述如下:
(1)PLV平臺的主要基類說明。構(gòu)成PLV平臺的基類有CDialog-主要支持生成子窗口及對話框;CToolBar-主要用于工具欄的創(chuàng)建;CFrameWnd-主要用于創(chuàng)建應(yīng)用程序的主窗口;CView-用戶的主要操作界面;CDocument-主要為用戶定義的文檔類提供了基本的函數(shù)功能;CWinApp-作為MFC中的主應(yīng)用程序類封裝用于Windows操作系統(tǒng)的應(yīng)用程序初始化、運(yùn)行和終止[7]。
(2)與PCB板圖相關(guān)類說明。板圖相關(guān)的類為CShape-主要用于描述器件的封裝;CPartList-主要用于對器件的描述;CNetList-主要用于對網(wǎng)絡(luò)的連接描述;CTextList-主要對絲印層中的文本信息進(jìn)行描述。
步驟2 設(shè)計(jì)人性化的菜單界面作為ODB++文件的輸入口,在此窗口中選定ODB++文件的路徑,點(diǎn)擊“確定”即可開始文件轉(zhuǎn)換。
步驟3 用C++高級語言編寫代碼讀取由任意一種EDA軟件導(dǎo)出的ODB++文件。其中,本文實(shí)驗(yàn)采用 Altium Designer軟件生成的 ODB++ 文件[8],由于OBD++文件是一種國際標(biāo)準(zhǔn)文件,所以任何一個EDA軟件導(dǎo)出的ODB++文件均一致。
步驟4 根據(jù)ODB++文件定義的標(biāo)準(zhǔn)符號智能篩選出PCB板圖的邊框信息并存儲到PLV的內(nèi)部數(shù)據(jù)結(jié)構(gòu)中。
圖4 PLV數(shù)據(jù)結(jié)構(gòu)
(1)確定存儲PCB邊框信息的文件路徑信息。PCB板圖的邊框信息一般存儲在ODB++文件中的keepout或mechanical文件夾中的features文件中。通過判斷features文件中#Layer features之后是否有線段或圓弧信息來確定邊框信息的存儲位置。
(2)讀取線段的尺寸信息并存儲到定義的數(shù)組陣列中。通過讀取features文件中#Feature symbol names之后的$(n)r(m)格式中的m值來獲得邊框線的尺寸大小。
(3)通過智能處理將線段信息組合成PCB的邊框信息存儲到PLV的內(nèi)部數(shù)據(jù)結(jié)構(gòu)中。
步驟5 根據(jù)ODB++文件定義的標(biāo)準(zhǔn)符號篩選出PCB板圖的封裝信息。
(1)讀取頂層絲印層和底層絲印層features文件中的數(shù)據(jù),并按線段、圓弧、點(diǎn)等圖形類型分類存儲到相應(yīng)的變量數(shù)組中。
<job_name>/steps/<step_name>/layers/<layer_name>/features文件中#Layer features部分存儲的是具體的封裝信息,對其進(jìn)行逐行讀取,根據(jù)首字符可知此行數(shù)據(jù)描述的圖形,再按不同的圖形存儲這些數(shù)據(jù)到不同的變量中。
(2)通過就近原則、名稱匹配和封裝庫對比的方法將變量數(shù)組中的數(shù)據(jù)重組成每個器件的封裝。對于封閉、折線或其他不同圖形相連的情況,必定會有同一個端點(diǎn)。將這些有同一端點(diǎn)且位置上距離這些圖形極其相近的圖形數(shù)據(jù)重組。根據(jù)其位置信息對應(yīng)到相應(yīng)的器件,即可查找到此封裝的名稱及對應(yīng)器件的名稱。將這些重組好的封裝與封裝庫中的對應(yīng)相同名稱的數(shù)據(jù)進(jìn)行對比匹配,查找是否有丟失遺漏或連接錯誤的圖形信息,以完善封裝數(shù)據(jù)。
(3)這些封裝信息存儲到PLV數(shù)據(jù)結(jié)構(gòu)中shape類型指針內(nèi)。ODB++中的封裝信息描述與PLV數(shù)據(jù)結(jié)構(gòu)中的描述有些許差異,需對原數(shù)據(jù)進(jìn)行運(yùn)算變換后再存儲到PLV的數(shù)據(jù)結(jié)構(gòu)中。
步驟6 根據(jù)ODB++文件定義的標(biāo)準(zhǔn)符號篩選出PCB板圖的器件信息。
(1)分別查詢ODB++文件中的頂層和底層器件信息,并分別存儲到對應(yīng)定義的類成員變量數(shù)組陣列中。
(2)通過ODB++文件定義的標(biāo)準(zhǔn)符號查詢出器件所對應(yīng)的封裝信息和引腳信息,并存儲到所屬器件對應(yīng)類的成員變量數(shù)組陣列中。
步驟7 根據(jù)ODB++文件定義的標(biāo)準(zhǔn)符號篩選出PCB板圖的網(wǎng)絡(luò)信息。
(1)根據(jù)ODB++文件中定義的網(wǎng)絡(luò)標(biāo)識符號來獲得整個PCB板圖中所包含的網(wǎng)絡(luò)個數(shù)及名稱,所屬網(wǎng)絡(luò)的器件引腳和過孔,并將其分別存儲到定義類的成員變量中。
(2)從有關(guān)網(wǎng)絡(luò)連接的文件中獲取用于網(wǎng)絡(luò)連接的線段信息,并將其端點(diǎn)信息和尺寸信息分別存儲到對應(yīng)網(wǎng)絡(luò)類的成員變量中以便進(jìn)行數(shù)據(jù)處理時進(jìn)行查詢與刪除操作。
(3)對數(shù)組陣列中存儲的所有線段進(jìn)行分析,并分配給各個網(wǎng)絡(luò),實(shí)現(xiàn)PCB板圖中的網(wǎng)絡(luò)連接。
(4)以屬于網(wǎng)絡(luò)中的某一個器件引腳為起點(diǎn),從所得線段中查找與此引腳相連的一條線段,若查找到了該條線段,則判斷線段的另一個端點(diǎn)是否連接到過孔上或連接到另一個引腳上,并將這條線段刪除掉,日后不再查詢。
(5)若判斷出另一端點(diǎn)是連接到另一個引腳上的,則此次過程完成,并開始下一過程。
(6)若判斷出另一個端點(diǎn)連接到過孔上,則再查詢與此過孔相連的線段,由此依次查詢直到找出與線段相連的引腳。
(7)重復(fù)上述操作直到所有的線段均被分配到網(wǎng)絡(luò)中并從數(shù)組陣列中刪除。
步驟8 根據(jù)ODB++文件定義的標(biāo)準(zhǔn)符號篩選出PCB板圖絲印層的文本信息。
步驟9 將以上獲得的所有信息統(tǒng)一轉(zhuǎn)存到PLV平臺的內(nèi)部數(shù)據(jù)結(jié)構(gòu)中,然后通過調(diào)用顯示函數(shù)即可顯示出可選擇可編輯的PCB板圖。
實(shí)驗(yàn)結(jié)果顯示轉(zhuǎn)換過后PLV中的PCB板圖顯示與原先Altium Designer軟件中的板圖完全吻合。
實(shí)驗(yàn)效果:其中圖5是用Altium Designer軟件畫出的 PCB板圖,而圖6是 Altium Designer軟件導(dǎo)出ODB++文件后,再導(dǎo)入到PLV平臺所得出的PCB板圖。對比兩幅圖可看出,兩個PCB板圖完全一致。
當(dāng)前各種EDA軟件功能呈現(xiàn)出多元化發(fā)展趨勢。然而,各軟件之間沒有統(tǒng)一的工程文件格式。這就造成了軟件之間功能的共享,從而產(chǎn)生了極大的障礙。為了擺脫該種狀況,找到統(tǒng)一的可編輯標(biāo)準(zhǔn)文件格式是必然。EDA軟件輸出的格式多樣,其中支持Geber和ODB++輸出格式的軟件最廣,在這兩個格式中Geber格式雖比ODB++標(biāo)準(zhǔn)使用更廣泛,但其只包含單一的制版和裝配信息[9-10]。而ODB++文件不僅包含制版、裝配信息,還包含完整的PCB板圖各種信息,如鮮明的網(wǎng)絡(luò)連接和網(wǎng)絡(luò)名稱、器件的封裝信息。因此,本文選擇ODB++標(biāo)準(zhǔn)作為統(tǒng)一的接口規(guī)范。由于各軟件已經(jīng)能輸出此標(biāo)準(zhǔn),文中著重講述了ODB++文件轉(zhuǎn)換為EDA軟件數(shù)據(jù)結(jié)構(gòu)的方法,以達(dá)到EDA軟件間PCB板圖數(shù)據(jù)互通的目的。
圖6 PLV中轉(zhuǎn)換后的板圖
[1]Pellizzari L.EDA tools for PCB design[J].Elettronica Oggj,2003,32(3):94 -104.
[2]Jomsky L,Vigil J.Pluses of ODB++ [PCB data transfer standards][J].Printed Circuit Fabrication,1999(22):30-31.
[3]周潤景,袁偉亭,張鵬飛.Cadence高速電路板設(shè)計(jì)與仿真[M].3 版.北京:人民郵電出版社,2009.
[4]Michael Santarini.ODB++spec tapped for CAD -to-CAM data exchange[M].Boston:EE Times,2002.
[5]Valor Conpration.ODB++software version 5.2[M].Israel:Valor Conpration,2000.
[6]李玉山.PLV詳細(xì)設(shè)計(jì)說明書[M].西安:西安電子科技大學(xué)電路CAD所,2014.
[7]侯俊杰.深入淺出MFC[M].武漢:華中科技大學(xué)出版社,2001.
[8]牛耀國,朱朝霞,芮新芳.Altium Designer軟件在印刷電路板設(shè)計(jì)中的應(yīng)用[J].電子科技,2011,24(8):128 -130.
[9]Dolberg S,Kovarsky M.ODB++format- the replacement for Gerber[J].Electronic Engineering,1998,70(6):53 -56,58.
[10]Andy Shaughnessy.Which data transfer format is best for the industry[M].Boston:EE Times,2011.