編寫自己的PCB數(shù)據(jù)庫翻譯器
1.0簡介
眾所周知,高科技公司的設(shè)計環(huán)境可能會不時“不穩(wěn)定”。設(shè)計環(huán)境甚至設(shè)計師經(jīng)常做出改變。這些變化源于采用更好的技術(shù)或公司收購/兼并。如果發(fā)生這種情況,可能必須將正在進行的設(shè)計從一組工具轉(zhuǎn)移到另一組工具。
假設(shè)一家公司已將多個印刷電路板(PCB)設(shè)計放置在一個計算機輔助設(shè)計(CAD)工具中何時必須更改該工具。有兩種選擇。首先,更換新CAD工具中的所有PCB設(shè)計,但每個設(shè)計至少需要3周時間。其次,編寫一個翻譯器將現(xiàn)有的展示位置文件轉(zhuǎn)換為新工具的文件。最多需要幾天的時間才能使這個翻譯器正確運行,每個設(shè)計只運行幾秒鐘。
如果有5個PCB,第一個選項至少需要15周。有了翻譯,那個時間減少到1周或更短。第二種選擇的優(yōu)勢和需求是顯而易見的。不幸的是,這個翻譯器可能不適用于您的特定CAD工具。
在本文中,我們提出了一種使用編程語言Perl [1]編寫PCB布局?jǐn)?shù)據(jù)庫轉(zhuǎn)換器的系統(tǒng)方法。另外,我們提供一些代碼來說明細(xì)節(jié)。如果不使用特定的CAD工具作為示例,這些主題將難以討論。因此,選擇Mentor Graphics Corp.的BoardStation和Cadence Design Systems的Allegro。這兩種工具都可以放置和布線PCB設(shè)計。我們的翻譯器將BoardStation的放置數(shù)據(jù)庫轉(zhuǎn)換為Allegro的放置數(shù)據(jù)庫,但本文中介紹的原理和技術(shù)適用于任何其他兩個CAD工具。
我們的翻譯人員必須執(zhí)行以下三個主要任務(wù):
對于我們的討論,BoardStation表面貼裝幾何使用引腳1作為原點(不是行業(yè)標(biāo)準(zhǔn),但有些公司會這樣做)。 Allegro使用幾何中心代替。使用此信息,翻譯人員必須正確翻譯幾何體的放置位置。
如果BoardStation幾何體的方向與其Allegro對應(yīng)物的方向不同,則翻譯者必須正確翻譯方向。
翻譯人員必須正確地將BoardStation展示位置文件的格式轉(zhuǎn)換為Allegro展示位置文件的格式。 BoardStation的放置文件稱為comps.comps _ ##和job_parts,其中_ ##是版本號,例如_01。 Allegro的放置文件名為place_txt.txt。
最后,有關(guān)為什么選擇Perl來編寫我們的翻譯器的說法,盡管任何其他完整的計算機語言也可以完成這項工作。 Perl最初設(shè)計用于文本解析和處理。這正是我們工作的主要部分,后面會很明顯。
2.0開始翻譯
首先,我們的翻譯需要3個輸入文件(除了BoardStation和Allegro放置文件)。它們可能已存在于公司PCB設(shè)計數(shù)據(jù)庫中,或者可能必須手工創(chuàng)建。以下是作者選擇文件名的列表。請注意,bs_指的是BoardStation,al_指的是Allegro,bs_al_指的是這兩個工具。
bs_insertion.file:它必須包含每個BoardStation幾何名稱以及它是否是表面貼裝。對于表面貼裝,它必須指定從原點(引腳1)到中心的以mils為單位的X偏移和Y偏移。這些信息非常重要,因為正如上面第1.0節(jié)所述,我們已選擇幾何中心作為Allegro的原點。 bs_insertion.file可以簡單如下(#表示注釋):類型1表示表面安裝,類型2表示非表面安裝。
非表面貼裝幾何體可以是通孔或分立或連接器組件。通常,幾何體不能同時是表面貼裝和非表面貼裝。但是,如果組件具有兩個版本并且它們在同一設(shè)計中使用,則必須使用兩個不同的幾何名稱。請注意,幾何名稱中的大寫或小寫對某些CAD工具很重要。
通常,與bs_insertion.file類似或相同的數(shù)據(jù)庫應(yīng)該已由公司維護,并且不需要創(chuàng)建此文件用手。但它可能包含的信息多于我們的翻譯器所需的信息,例如軸向組件的旋轉(zhuǎn),寬度和高度信息。在這種情況下,翻譯器應(yīng)該不解析這種數(shù)據(jù)。
bs_insertion.file由翻譯器解析并存儲到兩個內(nèi)部關(guān)聯(lián)數(shù)組中,可以調(diào)用$ bs_insertion_type和$ matrix。 $ bs_insertion_type中每個條目的鍵是BoardStation幾何名稱,值是組件類型,它是1或2. $ matrix的鍵可以是字符串geometry_name = xoffset或geometry_name = yoffset,值是偏移值。
例如,對于上面給出的幾何名稱100AMPTCH,條目$ matrix {100AMPTCH = xoffset}存儲371.2,條目$ matrix {100AMPTCH = yoffset}存儲350.0。稍后將擴展$ matrix數(shù)組以存儲更多信息。
bs_al_list.file:它包含所有BoardStation幾何及其Allegro對應(yīng)項。它可能如下所示(#表示注釋):
兩個BoardStation幾何圖形可能與相同的Allegro幾何圖形匹配。同樣,幾何名稱中的大寫或小寫也適用于某些CAD工具。
bs_al_list.file通常是手工創(chuàng)建的。它由轉(zhuǎn)換器解析并存儲到內(nèi)部關(guān)聯(lián)數(shù)組中,可以稱為$ bs_al_list。其關(guān)鍵是BoardStation幾何名稱,其值為Allegro幾何名稱。對于上面給出的示例,bs_al_list {7827-150HT}存儲CONN-SMD_2X25。
al_orientation.file:它包含所有Allegro幾何及其默認(rèn)方向。為了簡化操作,請為每個方向分配一個代碼,如表1所示,對于特定應(yīng)用程序可能完成也可能不完整。
al_orientation.file通常是手工創(chuàng)建的,它可能如下所示(#表示評論):
該文件由翻譯器解析并存儲到內(nèi)部關(guān)聯(lián)數(shù)組中,可以稱為$ al_orientation。它的關(guān)鍵是Allegro幾何名稱,它的值是一個方向代碼。對于上面給出的示例,al_orientation {FIDUCIAL40}存儲0.同樣,幾何名稱中的大寫或小寫對某些CAD工具很重要。
表格1 ?? Allegro幾何的方向代碼
現(xiàn)在我們可以開始系統(tǒng)地開發(fā)翻譯器了。正如上面第1.0節(jié)中簡要提到的,有兩個步驟可以完成。首先,我們將解析BoardStation的展示位置文件。其次,我們將使用該信息生成Allegro的放置文件。
3.0處理BoardStation的job_parts文件
如前所述,BoardStation有兩個放置位置文件,即job_parts和comps.comps _ ##。本節(jié)討論我們的翻譯器如何使用job_parts來查找和計算每個BoardStation幾何體的方向。結(jié)果存儲在名為$ bs_orientation的內(nèi)部關(guān)聯(lián)數(shù)組中。此外,可以選擇將此結(jié)果寫入文件,以便我們可以手動檢查翻譯器是否正確計算了這些方向。
job_parts唯一列出PCB設(shè)計中的每個BoardStation幾何體及其物理信息,例如它的名稱和引腳(包括引腳號和位置)。每個幾何條目如下所示:
$$ create_component(“BoardStation_Geometry_Name”);
與$$ create_component()條目關(guān)聯(lián)的每個pin條目如下所示:
$$屬性( “COMPONENT_PIN_DEFINITION”,“25”,, @ scale ,, [6.175,-8.89]);
其中“25”是引腳編號,[6.175,-8.89]是引腳位置,單位為英寸。 2引腳幾何結(jié)構(gòu)(如電容)具有以下3個條目:
$$ create_component(“CC1206”);
$$屬性(“COMPONENT_PIN_DEFINITION” ,“1”,, @ scale ,, [-0.067,0.0]);
$$屬性(“COMPONENT_PIN_DEFINITION”,“2”,@ scale ,, [0.067,0.0] );
1針幾何圖形,例如基準(zhǔn)點,有以下兩個條目:
$$ create_component(“FIDUCIAL1”);
$$屬性(“COMPONENT_PIN_DEFINITION”,“1”,@ scale,[0.0,0.0]);
請注意,$$ create_component()條目始終位于其關(guān)聯(lián)的$$屬性()條目之前。
我們的轉(zhuǎn)換程序在每個BoardStation幾何名稱中進行分析。接下來,它通過在$ bs_insertion_type內(nèi)部關(guān)聯(lián)數(shù)組中查找來確定此幾何是否是表面貼裝(參見上面的第2.0節(jié))。如果是,請將其存儲在名為$ sm_array的新內(nèi)部關(guān)聯(lián)數(shù)組中。如果沒有,請將其存儲在另一個名為$ nsm_array的新內(nèi)部關(guān)聯(lián)數(shù)組中。
還會解析BoardStation幾何體的每個引腳以確定以下內(nèi)容:
如果引腳number是純數(shù)字且為1或2或3,將其X和Y坐標(biāo)存儲在新的$ pin_1_2_3內(nèi)部關(guān)聯(lián)數(shù)組中。保存3個引腳,以便轉(zhuǎn)換器稍后可以確定哪個幾何結(jié)構(gòu)為2引腳。
對于每個數(shù)字純數(shù)字的引腳,確定最小X,最大X,最小Y和最大Y坐標(biāo)到目前為止,將此信息存儲到$ matrix內(nèi)部關(guān)聯(lián)數(shù)組中(參見上面的第2.0節(jié))。
如果引腳號不是純數(shù)字,例如A1或B1,則不要執(zhí)行上面的兩個子彈。相反,將此BoardStation幾何圖形放入新的$ odd_pin關(guān)聯(lián)數(shù)組中,并停止查找其引腳。這是因為傳統(tǒng)意義上無法確定哪個引腳是引腳1,因為我們可以在同一幾何結(jié)構(gòu)上具有A1,B1和C1引腳。下面將進一步討論這種特殊情況。
執(zhí)行上述操作的Perl代碼概述如下:
單擊此處查看代碼示例
總而言之,對于每個BoardStation幾何體,$ matrix內(nèi)部關(guān)聯(lián)數(shù)組具有鍵(字符串)和下面表2中給出的值。在此表中,鍵的geometry_name部分是BoardStation中使用的實際幾何名稱,對于每個唯一組件它是唯一的。
表2 ??每個唯一BoardStation幾何體的$矩陣條目
接下來,我們使用存儲在這些內(nèi)部關(guān)聯(lián)數(shù)組中的信息來確定pin1的位置,假設(shè)每個BoardStation幾何體上的針都是逆時針計數(shù)的。它可以是表3中列出的四個中的一個。然后,此信息用于確定幾何體的方向,其代碼在表1中給出。每個BoardStation幾何體及其計算的方向隨后存儲在新的內(nèi)部關(guān)聯(lián)數(shù)組中$ bs_orientation。
表3 ?? BoardStation幾何體上pin1的位置
目前,有必要討論一些無法輕松處理的特殊BoardStation幾何圖形。它們的方向代碼(表1中給出)必須在翻譯器中進行硬編碼。下面將討論3種情況。
如前所述,如果幾何體不具有純數(shù)字引腳數(shù)(例如A1或B1或C1而不僅僅是1),那么就不可能找到哪個引腳是引腳1,并且轉(zhuǎn)換器無法計算幾何方向。假設(shè)取向代碼為10(硬編碼)。我們還可以查看此幾何圖形并找到其確切方向。如果看到這些幾何,則由翻譯器內(nèi)部存儲在內(nèi)部關(guān)聯(lián)數(shù)組$ odd_pin中。
對于某些幾何,引腳1和2的X坐標(biāo)不相等,它們的Y坐標(biāo)也不相等,例如如圖1所示的連接器。在這種情況下,翻譯器不能輕易地計算幾何方向,并且假定方向代碼為10。我們還可以查看這個幾何體并找到它的確切方向。
圖1 - Pin坐標(biāo)不相等
如果是過時的幾何體錯誤地使用(可能發(fā)生),不存儲在任何公司數(shù)據(jù)庫中,首先查看它,然后在翻譯器中硬編碼其方向代碼。
在上面的前兩種情況中,方向代碼假定為10因為大多數(shù)幾何都是這樣放置的。所以這是最安全的賭注,但仍然是賭注。由于這個原因和其他原因,翻譯可能并不完全適用于少數(shù)組件。但正如5.0節(jié)將討論的那樣,很容易糾正這些微小的不匹配。有些無關(guān)緊要,甚至可以單獨留下。
此時,我們的翻譯器將簡單地處理$ sm_array,$ nsm_array和$ odd_pin內(nèi)部關(guān)聯(lián)數(shù)組,以創(chuàng)建$ bs_orientation內(nèi)部關(guān)聯(lián)數(shù)組。我們還(可選)將此結(jié)果寫入bs_orientation.file文件。首先,打開此文件進行如下編寫:
處理$ odd_pin內(nèi)部關(guān)聯(lián)數(shù)組的Perl代碼概述很簡單:
處理$ sm_array內(nèi)部關(guān)聯(lián)數(shù)組的Perl代碼概述如下:
進一步處理$ sm_array中的每個“普通”BoardStation幾何體。首先,找到引腳1,2和3的幾何中心和位置(2引腳幾何結(jié)構(gòu)沒有引腳3)。 Perl代碼的概述是:
接下來,檢查引腳1和2的X坐標(biāo)在這個幾何上是否相等(情況2)上面討論過)。同時檢查這兩個引腳的Y坐標(biāo)。
現(xiàn)在檢查引腳1和2是否具有相同的X坐標(biāo)。如果是,請執(zhí)行以下操作。首先,確定引腳1是否位于幾何結(jié)構(gòu)的底部,引腳1和引腳2是否彼此相對,包括2引腳幾何結(jié)構(gòu)(例如垂直放置的電容器或電阻器):
其次,確定引腳1是否位于幾何結(jié)構(gòu)的頂部,引腳1和2是否彼此相對,包括2引腳幾何形狀:
最后,確定引腳1是否位于幾何體的左側(cè)或右側(cè)(請記住引腳是逆時針計數(shù)的):
單擊此處查看代碼示例
現(xiàn)在檢查引腳1和2是否具有相同的Y坐標(biāo)。如果是,請采取適當(dāng)?shù)拇胧5侥壳盀橹挂呀?jīng)提供了大量的Perl代碼示例,因此我們在此不再重復(fù)。相反,我們將簡要討論這個過程。首先,確定引腳1是否位于幾何結(jié)構(gòu)的左側(cè),引腳1和2是否彼此面對。如果是,則方向代碼可以是1或2或3.
其次,確定引腳1是否位于幾何體的右側(cè),引腳1和2是否彼此面對。如果是,則方向代碼可以是4或5或6.第三,確定引腳1的X坐標(biāo)是否位于幾何體的頂部。如果是,則方向代碼可以是7或8或9.第四,確定引腳1是否在底部。如果是,則方向代碼可以是10或11或12.
$ nsm_array內(nèi)部關(guān)聯(lián)數(shù)組的處理方式應(yīng)與$ sm_array相同。
此時,可以讀取bs_orientation.file文件(如果已創(chuàng)建)以確保計算的BoardStation幾何方向正確。如果沒有,翻譯人員需要進行微調(diào)。
4.0生成Allegro的place_txt.txt展示位置文件
BoardStation的展示位置文件(也是稱為組件文件)稱為comps.comps _ ##,每個條目的格式都非常簡單:
Ref_des是參考標(biāo)號用于PCB原理圖。 Symbol_name是原理圖符號的名稱。 Board_location是引腳1在10納米中的位置,它必須轉(zhuǎn)換為Allegro放置文件中表面貼裝元件的幾何中心,如前所述。此外,10納米單位必須轉(zhuǎn)換成Allegro的密耳。
Board_side表示該組件放置在電路板的哪一側(cè)(1:頂部,2:底部)。旋轉(zhuǎn)指示在放置期間該組件是否已旋轉(zhuǎn)(90度或180度或270度)。對于BoardStation和Allegro,旋轉(zhuǎn)必須始終為逆時針。
Allegro的place_txt.txt放置文件具有以下格式:
每列的含義,從U115的第2行開始,在下面的表4中說明。
表4 ?? Allegro的展示位置文件的含義
現(xiàn)在,我們的翻譯人員可以將comps.comps _ ##轉(zhuǎn)換為place_txt.txt。執(zhí)行此操作的Perl代碼的一部分在下面給出并且不言自明:
單擊此處查看代碼示例
如果轉(zhuǎn)換程序運行時沒有任何錯誤,則Allegro放置文件place_txt .txt已創(chuàng)建?,F(xiàn)在您可以嘗試將此文件讀入Allegro以檢查其格式。如果Allegro標(biāo)記任何格式錯誤,則需要修改我們的翻譯器。
5.0最終評論
BoardStation和Allegro是兩個非常不同的工具,對于某些特殊情況,他們的展示位置文件之間沒有直接的翻譯。上面的3.0節(jié)列出了其中一些。因此,對于少數(shù)組件,轉(zhuǎn)換可能不準(zhǔn)確。
例如,如果組件的旋轉(zhuǎn)不是100%正確,那么它可以在Allegro中手動旋轉(zhuǎn)(例如微處理器)或單獨使用(如電容器)。一些組件也可能與其鄰居部分重疊。同樣,這可以在Allegro中手動糾正。平均而言,需要一個小時或更短的時間來手動檢查Allegro放置文件是否存在這些問題。
6.0參考文獻(xiàn)
1。 Larry Wall,Tom Christiansen,Jon Orwant,“Programming Perl”,第3版,O'Reilly& Associates,Inc.,2000
2。 Luke L. Chang,“編寫自己的PCB設(shè)計規(guī)則檢查器”,EEdesign,2003年9月
Luke L. Chang是英特爾存儲元件部門的高級驗證負(fù)責(zé)人(Hudson) , 嘛)。在此之前,他曾在多家高科技公司擔(dān)任過工程和管理職位,涉及硬件設(shè)計/驗證和電子設(shè)計自動化領(lǐng)域。
-
pcb
+關(guān)注
關(guān)注
4320文章
23113瀏覽量
398379 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3817瀏覽量
64490 -
華強pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43080
發(fā)布評論請先 登錄
相關(guān)推薦
評論