編寫PCB設(shè)計(jì)規(guī)則檢查器(DRC)的系統(tǒng)方法
編寫屬于自己的PCB設(shè)計(jì)規(guī)則檢查器具有很多優(yōu)點(diǎn),盡管設(shè)計(jì)檢查器并不那么簡(jiǎn)單,但也并非高不可攀,因?yàn)槿魏问煜がF(xiàn)有編程或腳本語(yǔ)言的設(shè)計(jì)人員完全能夠設(shè)計(jì)檢查器,這項(xiàng)工作的好處是不可估量的,本文介紹編寫PCB設(shè)計(jì)規(guī)則檢查器的技巧。
本文闡述了一種編寫PCB設(shè)計(jì)規(guī)則檢查器(DRC)的系統(tǒng)方法。利用電路圖生成工具得到PCB設(shè)計(jì)后,即可運(yùn)行DRC以找到任何違反設(shè)計(jì)規(guī)則的故障。這些操作必須在后續(xù)處理開(kāi)始之前完成,而且開(kāi)發(fā)電路圖生成工具的開(kāi)發(fā)商必須提供大多數(shù)設(shè)計(jì)人員都能輕松掌握的DRC工具。
然而,市場(chǎng)銷售的通用工具通常不具備足夠的靈活性以滿足特定的設(shè)計(jì)需要。因此,客戶必須將新特性需求反映給DRC工具開(kāi)發(fā)商,而這通常需要耗費(fèi)一定的資金和時(shí)間,尤其當(dāng)需求不斷更新時(shí)。幸運(yùn)的是,大多數(shù)工具開(kāi)發(fā)商均可為客戶提供編寫屬于自己的DRC以滿足特定需求的便捷方法。但是,這種具有強(qiáng)大功能的工具尚未得到廣泛認(rèn)同或使用。本文提供了利用DRC工具獲取最大收益的實(shí)用指南。
由于DRC必須遍歷 PCB設(shè)計(jì)的整個(gè)電路圖,包括每個(gè)符號(hào)、每個(gè)引腳、每個(gè)網(wǎng)路、每種屬性,如有必要還能創(chuàng)建數(shù)目不限的“附屬”文件。如4.0節(jié)所述,DRC可以標(biāo)示出任何違反設(shè)計(jì)規(guī)則的細(xì)微偏差。例如其中一個(gè)附屬文件就可能包含設(shè)計(jì)用到的全部去耦電容。如果電容數(shù)低于或高于期望值,就將在可能出現(xiàn)電源線dv/dt問(wèn)題的地方標(biāo)注紅色記號(hào)[1]。這些附屬文件或許必不可少,但并非任何商用DRC工具都一定能創(chuàng)建這些文件。
DRC的另一優(yōu)勢(shì)是便于更新,以適應(yīng)新設(shè)計(jì)特性(如那些可能影響設(shè)計(jì)規(guī)則的新特性)的需要。而且,一旦在該領(lǐng)域獲得充分經(jīng)驗(yàn),那么還能實(shí)現(xiàn)許多其它功能。
例如,如果能編寫屬于自己的DRC,那么就能編寫屬于自己的物料清單(BOM)創(chuàng)建工具,這樣就能更好地處理特定用戶需求,如如何獲取本身不屬于電路圖數(shù)據(jù)庫(kù)一部分的器件“額外硬件”(如插座、散熱裝置或螺絲刀)。或者設(shè)計(jì)人員可以編寫屬于自己的Verilog網(wǎng)表分析器,該分析器在設(shè)計(jì)環(huán)境下具有充分的靈活度,如怎樣獲取適用于特定器件的Verilog模型或時(shí)間文件。實(shí)際上,由于DRC遍歷了整個(gè)設(shè)計(jì)電路圖,因此可以收集全部有效信息以輸出PCB設(shè)計(jì)Verilog網(wǎng)表分析所需的仿真和/或BOM。
在不提供任何程序代碼的前提下討論這些話題實(shí)在有些牽強(qiáng),為此,我們將以一種電路圖獲取工具為例進(jìn)行說(shuō)明。本文采用了Mentor Graphics公司開(kāi)發(fā)的附屬于PADS-Designer產(chǎn)品線的ViewDraw工具。此外,我們還采用了ViewBase工具,這是一個(gè)可被調(diào)用并對(duì)ViewDraw數(shù)據(jù)庫(kù)進(jìn)行存取操作的簡(jiǎn)化C例行程序庫(kù)。利用ViewBase工具,設(shè)計(jì)人員可以輕松地采用C/C++語(yǔ)言為ViewDraw編寫完整且高效的DRC工具[2] [3]。需要注意的是,這里討論的基本原則同樣適用于任何其它的PCB電路圖工具。
輸入文件
除了電路圖數(shù)據(jù)庫(kù),DRC還需要一些可以描述特定情況處理的輸入文件,如自動(dòng)連接到電源平面的合法電源網(wǎng)路名稱。例如,如果電源網(wǎng)路名為POWER,那么電源平面將采用后端封裝設(shè)備(如適用于ViewDraw的pcbfwd)自動(dòng)連接到電源平面。下面給出了輸入文件列表,這些文件必須放在固定的全局位置,這樣DRC就能自動(dòng)找到并讀取,然后在運(yùn)行時(shí)將這些信息保存在DRC內(nèi)部。
* 文件legal_pwr_net_name可選,該文件包含POWER信號(hào)全部合法網(wǎng)路名稱,如VCC、V3_3P和VDD。在PCB布局/路由工具中,需要對(duì)名稱的大小寫進(jìn)行區(qū)分,一般VCC并不等同于Vcc或vcc。VCC可以是5.0V的電源,而V3_3P則可以是3.3V的電源。
* 文件legal_pwr_net_name可選,因?yàn)楹蠖朔庋b設(shè)備的配置文件通常必須包含一組合法電源線網(wǎng)路名稱。如果采用Cadence設(shè)計(jì)系統(tǒng)公司的Allegro布線工具,那么pcbfwd的文件名則為allegro.cfg并且具有如下入口參數(shù):
接地:VSS CGND GND GROUND
電源:VCC VDD VEE V3_3P V2_5P +5V +12V
如果DRC可以直接讀取allegro.cfg文件,而非legal_pwr_net_name,那么將能得到更好的結(jié)果(即引入誤差的幾率較小)。
電源線引腳通常并不外接到器件符號(hào)上,相反,該符號(hào)的一個(gè)屬性(這里稱為SIGNAL)描述了哪個(gè)引腳是電源引腳或接地引腳并描述引腳應(yīng)當(dāng)連接的網(wǎng)絡(luò)名稱。
SIGNAL = VCC:10
SIGNAL = GROUND:20
DRC可讀取該屬性并確保網(wǎng)路名稱保存在legal_pwr_net_name文件中,如果legal_pwr_net_name中不包含網(wǎng)路名稱,那么電源引腳將不會(huì)連接到電源平面,而這個(gè)問(wèn)題確實(shí)非常嚴(yán)重。
一些符號(hào)必須具有外接電源線引腳,因?yàn)檫@些符號(hào)并不連接到常規(guī)電源線層。例如,ECL器件的VCC引腳要么連接到VCC,要么連接到GROUND;其VEE引腳則可連接到GROUND或-5.0V平面。此外,電源線引腳在到達(dá)電源線層之前也可連接到濾波器。
引腳與濾波器之間的網(wǎng)路可具有任意名稱,而DRC很難檢測(cè)到這一點(diǎn)。DRC可以錯(cuò)誤形式匯報(bào)這一點(diǎn),而用戶則必須將其標(biāo)示出或在legal_pwr_net_name文件中添加該網(wǎng)路名稱。這就是我們需要類似legal_pwr_net_name文件的一個(gè)原因。最后,DRC將讀取legal_pwr_net_name,以1)找到上拉電阻,2)在設(shè)計(jì)中檢查POWER網(wǎng)路名稱的大小寫,3)檢測(cè)任何與POWER直接相連但尚未使用的引腳。
* 包含GROUND信號(hào)(如GROUND、VSS和F_GND)中所有合法網(wǎng)路名的legal_gnd_net_name文件可以隨意創(chuàng)建。而需要再次注意的是,符號(hào)的大小寫可能會(huì)對(duì)一些PCB布線工具產(chǎn)生影響。而且,如果DRC可以直接讀取上述allegro.cfg文件,而非legal_gnd_net_name文件的話,無(wú)疑可以得到更好的設(shè)計(jì)結(jié)果。
legal_gnd_net_name不僅具有與legal_pwr_net_name相同的功能,而且DRC還可讀取該文件,以1)找到下拉電阻,2)檢查POWER網(wǎng)路名稱的大小寫,3)檢測(cè)任何與POWER直接相連但尚未使用的引腳。
* 包含全部合法符號(hào)庫(kù)路徑和名稱的legal_lib_path_name文件可以隨意創(chuàng)建,這一點(diǎn)非常重要。例如,一個(gè)常見(jiàn)的嚴(yán)重錯(cuò)誤是使用未授權(quán)程序庫(kù)中的符號(hào)。在PCB設(shè)計(jì)階段,根據(jù)測(cè)試需要,通常要求創(chuàng)建臨時(shí)器件符號(hào)并保存在本地符號(hào)庫(kù)目錄中。最終用到的器件符號(hào)來(lái)源于此并將保存在聯(lián)合或全局的程序庫(kù)目錄中,這些符號(hào)具有一些不同于本地器件符號(hào)的重要特征。設(shè)計(jì)人員通常會(huì)因?yàn)闆](méi)有采用共同符號(hào)取代本地符號(hào)而引入設(shè)計(jì)錯(cuò)誤。
legal_lib_path_name可選,因?yàn)閷?duì)于大多數(shù)電路圖工具,程序庫(kù)信息包含在啟動(dòng)工具所需的初始化文件中。對(duì)于ViewDraw工具,該文件稱為viewdraw.ini,當(dāng)工具啟動(dòng)時(shí),該文件就自動(dòng)創(chuàng)建(利用腳本程序):目錄 [r] /corp_lib/pcb/symbol_libraries/viewdraw/fct (fct)。
Fct(快速CMOS技術(shù))是ViewDraw眾多子庫(kù)中的一個(gè),也是fct器件各符號(hào)的來(lái)源。如果初始化文件存在,那么DRC不僅可以而且也應(yīng)當(dāng)直接讀取該文件,因?yàn)樵O(shè)計(jì)人員可以及時(shí)地添加新程序庫(kù)。
* 可以創(chuàng)建包含合法上拉電阻的legal_pullup_res文件以檢測(cè)那些被終止以及未被使用的輸入引腳。通常,可以限定一組設(shè)計(jì)人員能使用的電阻,當(dāng)然電阻值本身也是一個(gè)重要因素。如果上拉了未使用的輸入引腳,那么該電阻的阻值將為5K或更高。
* 可以創(chuàng)建包含合法下拉電阻的legal_pulldown_res文件以檢測(cè)那些被終止以及未被使用的輸入引腳。如果下拉了未使用的輸入引腳,那么阻值將會(huì)很小以阻止任何電流泄漏,從而使引腳電壓高于觸發(fā)閥值。
* 可以創(chuàng)建包含合法去耦電容的legal_decoup_cap文件,而且公司還可要求設(shè)計(jì)人員只使用特定的合格器件以滿足電源線dv/dt要求。
* 可以創(chuàng)建一個(gè)包含器件符號(hào)全部屬性的legal_comp_attr文件,如PART_NO、GEOM、REFDES和SIM_CLASS。BOAM創(chuàng)建工具、Verilog網(wǎng)表分析器及其它工具都能使用這些屬性。
* 可以創(chuàng)建一個(gè)包含器件符號(hào)全部引腳屬性的legal_pin_attr文件,如PIN_NAME、PINTYPE和PIN_NO。
設(shè)計(jì)目錄結(jié)構(gòu)
運(yùn)行DRC必須滿足的第二個(gè)條件就是需要可被所有PCB設(shè)計(jì)共享的單獨(dú)設(shè)計(jì)目錄結(jié)構(gòu)。沒(méi)有該目錄結(jié)構(gòu),DRC將難以確定如何找到電路圖數(shù)據(jù)庫(kù)并存儲(chǔ)輸出文件。該架構(gòu)可以極復(fù)雜的分層架構(gòu)支持全部PCB設(shè)計(jì)業(yè)務(wù),如設(shè)計(jì)規(guī)則檢查、BOM創(chuàng)建、Verilog仿真、靜態(tài)時(shí)序分析、信號(hào)完整性分析、布線、PAL/FPGA設(shè)計(jì)(綜合與仿真)及文檔控制。但對(duì)于DRC本身,如果采用了ViewDraw,那么下述條件就完全充分:
pcb_info應(yīng)最少包含兩個(gè)文件:design_def和design_type。design_def應(yīng)包含PCB器件(組合)數(shù)目及其它所需信息,這不僅僅對(duì)于DRC,對(duì)于其它所有工具也同樣如此。design_type應(yīng)當(dāng)包含設(shè)計(jì)類型信息,即PCB信息。如果其它類型的設(shè)計(jì)(如ASIC或FPGA)可以共享該設(shè)計(jì)目錄結(jié)構(gòu),那么design_type將指定該目錄,這樣設(shè)計(jì)自動(dòng)化工具將能根據(jù)不同的設(shè)計(jì)類型進(jìn)行適當(dāng)?shù)牟僮鳌H绻麤](méi)有pcb_info目錄或該目錄內(nèi)容為空,這就意味著設(shè)計(jì)目錄并非標(biāo)準(zhǔn)設(shè)計(jì)目錄。在這種情況下,DRC應(yīng)當(dāng)退出并發(fā)送出錯(cuò)信息。
Schem目錄包含電路圖數(shù)據(jù)庫(kù)并可由DRC使用的ViewBase直接存取。sch子目錄包含了在圖表上描述符號(hào)位置的電路圖文件及其它信息,wir子目錄則包含設(shè)計(jì)網(wǎng)表分析及全部符號(hào)屬性。ViewBase例程可直接存取這些內(nèi)容。drc目錄應(yīng)存儲(chǔ)DRC輸出文件。
封裝程序
本文提出的DRC工具采用C語(yǔ)言和C例程ViewBase庫(kù)編寫,C例程ViewBase庫(kù)可提供對(duì)ViewDraw電路圖數(shù)據(jù)庫(kù)進(jìn)行存取的便捷方法。每個(gè)例程均對(duì)一個(gè)數(shù)據(jù)項(xiàng)進(jìn)行存取或在兩個(gè)數(shù)據(jù)項(xiàng)之間建立聯(lián)系。但DRC不能直接運(yùn)行:DRC應(yīng)“包裝”在一個(gè)采用Perl或UNIX命令解釋語(yǔ)言編寫的封裝程序中。該封裝程序具有如下形式:
* 檢查如圖1所示的PCB設(shè)計(jì)目錄結(jié)構(gòu)是否有效。
* 可以運(yùn)行后端封裝程序(如應(yīng)用于ViewDraw的pcbfwd)。該程序可檢測(cè)一些違反規(guī)則的設(shè)計(jì)缺陷(如網(wǎng)路名稱的數(shù)目和類型特性),而這通常很難采用DRC工具檢測(cè)。此外,還能賦值給那些尚未賦值的符號(hào)參考標(biāo)志符特性 (如R4)。
* 檢測(cè)2.0.1節(jié)中討論的輸入文件是否存在,并將其注入DRC。
* 找到PCB設(shè)計(jì)名稱并將其注入DRC。
* 將其輸出文件的路徑和名稱注入DRC。
* 建立所需的工具環(huán)境變量,如用于ViewDraw和ViewBase的WDIR。
* 調(diào)用DRC程序。
* 按需求打印幫助信息。
* 打印用戶和運(yùn)行時(shí)間信息。
* 執(zhí)行后處理。這既可以像修正控制工具檢測(cè)DRC輸出文件那樣簡(jiǎn)單,也可以像主動(dòng)處理DRC輸出文件那樣復(fù)雜(如從其它數(shù)據(jù)源添加更多的信息或執(zhí)行排序操作)。C或許不是最佳的數(shù)據(jù)排序或文件分析工具,因?yàn)槿绻磾?shù)字順序排列文件,采用UNIX排序命令更為簡(jiǎn)單:sort +1n source_file > sorted_file。
DRC開(kāi)發(fā):main()函數(shù)
可以調(diào)用DRC程序drc.c,該文件具有兩個(gè)主要函數(shù):drc_net()和drc_inst()。drc_net()遍歷了全部網(wǎng)路而drc_inst()則遍歷所有的元件(符號(hào)),這樣就能檢測(cè)任何有違規(guī)則的設(shè)計(jì)缺陷。這兩個(gè)函數(shù)都能產(chǎn)生附屬的輸出文件,可以參見(jiàn)1.0節(jié)和4.0節(jié)。
drc.c首先應(yīng)當(dāng)包含全部由C、ViewBase和用戶創(chuàng)建的頭文件,如stdio.h、viewbase.h和viewbase.h?,F(xiàn)在可以設(shè)定drc.c接收輸入?yún)?shù),這樣不僅能為輸入和輸出文件聲明變量和文件指針,還可使ViewBase指向ViewDraw數(shù)據(jù)庫(kù),并創(chuàng)建鏈接列表和散列表以存取從輸入文件讀入的信息。下面給出了main()函數(shù)的部分代碼實(shí)現(xiàn)。
當(dāng)DRC封裝程序激活DRC時(shí),將導(dǎo)入輸入和輸出文件名及PCB設(shè)計(jì)名 (參見(jiàn)3.0.1節(jié))。數(shù)據(jù)結(jié)構(gòu)Str_list_elem和Hash_table定義在drc.c包含的頭文件中,而GROUPS則是ViewBase數(shù)據(jù)類型。
下一步,main()函數(shù)可以通過(guò)檢驗(yàn)argc的取值從而確保輸入?yún)?shù)數(shù)目正確。如果參數(shù)值正確,那么將為變量分配正確的輸入?yún)?shù)。
此時(shí),main()函數(shù)可以初始化ViewBase數(shù)據(jù)結(jié)構(gòu),并使ViewBase指針pcb-ptr指向PCB設(shè)計(jì)。如果該設(shè)計(jì)存在并有效,那么main()函數(shù)應(yīng)當(dāng):
* 打開(kāi)全部輸入文件,讀取信息并將信息存儲(chǔ)到內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如Str_list_elem和Hash_table)中, 然后關(guān)閉輸入文件。
* 打開(kāi)所有輸出文件以寫入信息,這些文件可以是設(shè)計(jì)規(guī)則錯(cuò)誤/警告文件,也可以是附屬文件。
* 調(diào)用drc_net()和drc_inst()函數(shù)執(zhí)行實(shí)際操作。
* 關(guān)閉所有輸出文件。
main()函數(shù)中完成上述功能的C和ViewBase代碼如下:
[列表3]
這里,iwinit()和iw1level()是ViewBase例程。前者初始化全部載入例程(這也是必須的),而后者則載入整個(gè)PCB設(shè)計(jì)。為了保證只載入一張電路圖,可以調(diào)用iw1sheet()例程(本文的DRC工具并不使用該例程)。需要注意的是,正確的設(shè)計(jì)指針、文件指針、鏈接列表、變量名稱等必須傳入drc_net()和drc_inst()函數(shù):
drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);
drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);
如果設(shè)計(jì)采用分層結(jié)構(gòu)及不同的器件符號(hào),那么還必須確保DRC能正確處理這些器件。
DRC開(kāi)發(fā):drc_net()函數(shù)
drc_net()在PCB設(shè)計(jì)中遍歷所有網(wǎng)路并檢測(cè)任何違反設(shè)計(jì)規(guī)則的故障,然后創(chuàng)建附屬的輸出文件。實(shí)現(xiàn)上述功能的基本代碼如下:
[列表4]
這里,iggrpnet()和ignetnxt()函數(shù)是在PCB設(shè)計(jì)中檢查每個(gè)網(wǎng)路的ViewBase 例程。ignetnam()函數(shù)也是檢查網(wǎng)路名稱的ViewBase例程。ViewBase中的數(shù)據(jù)類型包括NETS、PINS、COMPONENTS、SYMBOLS和ATTRIBUTES。drc_net()函數(shù)可檢測(cè)下述違反設(shè)計(jì)規(guī)則的錯(cuò)誤:
* 非法網(wǎng)路名。如果網(wǎng)路名由ViewDraw自動(dòng)分配,那么將具有如下格式:$#...#N#...#,第一個(gè)#...#表示圖表編號(hào),第二個(gè)#...#則表示網(wǎng)路號(hào)。PCB設(shè)計(jì)人員指定的網(wǎng)路名必須以字母開(kāi)頭,其后的字符數(shù)不多于30。
drc_net()函數(shù)應(yīng)調(diào)用legal_net_name()函數(shù)執(zhí)行該任務(wù)。在UNIX系統(tǒng)中,利用包含在DRC程序中的regexp.h頭文件可以極大地簡(jiǎn)化采用C語(yǔ)言編寫的常規(guī)表達(dá)式匹配/校驗(yàn)程序。drc_net()應(yīng)將網(wǎng)路名稱變量和違反設(shè)計(jì)規(guī)則的文件指針存儲(chǔ)在legal_net_name()函數(shù)中,該函數(shù)具有如下形式:
[列表5]
后端封裝工具pcbfwd也可檢測(cè)非法網(wǎng)路名,但其功能受限于簡(jiǎn)單的常規(guī)表達(dá)式。上述代碼可處理任何常規(guī)表達(dá)式,同樣地,如何在運(yùn)行pcbfwd工具之前或之后找到非法網(wǎng)路名稱也需要權(quán)衡。對(duì)于簡(jiǎn)單的網(wǎng)路名稱,可以使用pcbfwd。
* 網(wǎng)路上的總線競(jìng)爭(zhēng)也是嚴(yán)重問(wèn)題。總線競(jìng)爭(zhēng)有兩類:一類是圖騰柱輸出間的總線競(jìng)爭(zhēng),而另一類則是圖騰柱與三態(tài)輸出間的總線競(jìng)爭(zhēng)?;敬a實(shí)現(xiàn)如下所示:
[列表6]
這里,ignetpin()和igpinnnx()函數(shù)是在網(wǎng)路上檢查每個(gè)引腳的ViewBase例程。igpinown()例程返回引腳實(shí)例(系主)指針。函數(shù)get_inst_attr()、get_pin_attr() 和get_sheet_num()則返回請(qǐng)求實(shí)例屬性(參考標(biāo)志符REFDES)、引腳屬性(PINTYPE)及引腳實(shí)例所在的圖表編號(hào)。get_pin_attr()函數(shù)的基本代碼如下:
[列表7]
get_inst_attr()函數(shù)的基本代碼如下:
[列表8]
get_sheet_num()函數(shù)的基本代碼如下:
[列表9]
* POWER和GROUND網(wǎng)路中的非法名稱。這些名稱將與存儲(chǔ)在內(nèi)部數(shù)據(jù)結(jié)構(gòu)中的信息(如鏈接列表)進(jìn)行比較。
* 報(bào)告那些具有負(fù)載但不具有驅(qū)動(dòng)程序或者具有驅(qū)動(dòng)程序但不具有負(fù)載的網(wǎng)路。這可以通過(guò)標(biāo)注網(wǎng)路上每個(gè)引腳的類型加以實(shí)現(xiàn)。網(wǎng)路應(yīng)當(dāng)帶有1個(gè)輸出引腳或多個(gè)三態(tài)輸出引腳及最少一個(gè)輸入引腳,此外還可提供與網(wǎng)路全部器件和引腳相關(guān)的參考標(biāo)志符和符號(hào)。
* 報(bào)告那些不帶上拉電阻或所帶上拉電阻未連接到POWER的所有集電極開(kāi)路輸出。
* 一旦網(wǎng)路的負(fù)載超過(guò)常規(guī)數(shù)目(良好的信號(hào)完整性條件下限額為8),那么將打印警告信息。
DRC開(kāi)發(fā):drc_inst()函數(shù)
drc_inst()函數(shù)與drc_net()函數(shù)類似,不同的是,前者遍歷了全部電路圖表及PCB設(shè)計(jì)中電路圖表上的所有實(shí)例,從而檢測(cè)違反規(guī)則的設(shè)計(jì)缺陷或創(chuàng)建附屬的輸出文件。其代碼實(shí)現(xiàn)如下:
[列表10]
上面關(guān)于drc_net()函數(shù)的討論提供了充分的C和ViewBase代碼示例,這里就不在贅述。下面給出了drc_inst()函數(shù)可檢測(cè)的部分違反規(guī)則的設(shè)計(jì)缺陷:
* 非法或遺漏的符號(hào)庫(kù)混淆。PCB設(shè)計(jì)中的所有符號(hào)必須來(lái)自共同符號(hào)庫(kù),使用來(lái)自錯(cuò)誤符號(hào)庫(kù)的符號(hào)是一個(gè)極為常見(jiàn)的錯(cuò)誤,尤其是對(duì)于那些只依賴于符號(hào)進(jìn)行設(shè)計(jì)的后端處理工具。
* 遺失符號(hào)和/或引腳屬性,例如那些描述器件幾何結(jié)構(gòu)和引腳類型(in、out、bi和tri)的特性。
* 非法的符號(hào)和/或引腳屬性。例如,引腳類型可具有IN值,但不包括INPUT值。這將對(duì)后端封裝工具(如pcbfwd)如何為布線工具(如Allegro)提供信息產(chǎn)生影響。
* 符號(hào)上的參考標(biāo)志符值,尤其是對(duì)于串行器件(如電阻、電容和電感)。大多數(shù)信號(hào)完整性工具需要這些器件以字母R、C和L開(kāi)頭,因此可將這些器件作為串聯(lián)元件而非離散器件進(jìn)行分析。類似地,drc_inst()函數(shù)可將其值同描述的屬性進(jìn)行對(duì)比以保證兩者完全匹配。
* 非法去耦電容。這可能導(dǎo)致POWER線dv/dt問(wèn)題。* 非法上拉和下拉電阻。
* 不與符號(hào)POWER或GROUND平面相連的POWER或GROUND引腳。
* 未使用的輸入引腳不被電阻上拉或下拉,或者該電阻不與POWER或GROUND網(wǎng)路直接相連。
* 當(dāng)單個(gè)電阻器上拉或下拉1個(gè)以上輸入引腳時(shí)發(fā)出警告信息。
* 對(duì)于直接與POWER或GROUND網(wǎng)路相連的非專用POWER和GROUND引腳發(fā)出警告信息。
如果采用了標(biāo)記技術(shù),那么將檢驗(yàn)該標(biāo)記是否注明了正確的可選器件,例如型號(hào)是否有效及其幾何結(jié)構(gòu)是否與默認(rèn)的器件規(guī)格匹配。
DRC不應(yīng)當(dāng)具備的功能
盡管DRC能夠?qū)崿F(xiàn)很多功能,但仍然可以采用其它方法以期更好更便捷地加以實(shí)現(xiàn)。后端封裝工具可為布線工具封裝PCB設(shè)計(jì),因此可提供有效幫助。在ViewDraw中,pcbfwd可用來(lái)檢測(cè)諸多違反規(guī)則的設(shè)計(jì)缺陷和設(shè)計(jì)錯(cuò)誤。
DRC和pcbfwd可檢測(cè)的問(wèn)題之間存在重疊,因此何時(shí)檢測(cè)何種設(shè)計(jì)問(wèn)題就需要進(jìn)行折衷考慮。DRC通常在設(shè)計(jì)完成之后及pcbfwd運(yùn)行之前才能正確地運(yùn)行。理想情況下,運(yùn)行pcbfwd只為了封裝設(shè)計(jì),因此更多的DRC可以得到更好的檢測(cè)結(jié)果。但設(shè)計(jì)人員仍然需要在其投入精力開(kāi)發(fā)具有超強(qiáng)功能的DRC與pcbfwd現(xiàn)有的免費(fèi)功能之間取得平衡。這一節(jié)簡(jiǎn)單地討論了這些問(wèn)題。
pcbfwd由配置文件控制,如果布線工具為Allegro,那么配置文件名為allegro.cfg。配置文件中的BeginChkRules - EndChkRules部分可用來(lái)檢測(cè)眾多錯(cuò)誤,如相同符號(hào)的重復(fù)屬性、非法網(wǎng)路和網(wǎng)路屬性名稱、損壞的異質(zhì)封裝、異質(zhì)符號(hào)上的沖突屬性及遺漏屬性。例如,為了在異質(zhì)符號(hào)上獲取沖突的屬性,可以在allegro.cfg文件中添加如下內(nèi)容:
CHKBRD _HETERO_ATT ERR 0
但仍有一些問(wèn)題既不能采用DRC,也不能采用pcbfwd進(jìn)行檢測(cè),如PCB設(shè)計(jì)中的預(yù)期冗余。假定器件包含4個(gè)完全相同的部分,其中兩個(gè)部分用于設(shè)計(jì),那么這些部分既可以封裝在相同器件中,也可以出于冗余考慮將其封裝在兩個(gè)器件中。如果只需要一個(gè)器件,那么兩部分用到的符號(hào)將具有相同的參考標(biāo)志符(如U4);如果需要兩個(gè)器件,那么符號(hào)將具有不同的參考標(biāo)志符(如U4和U5),設(shè)計(jì)人員必須有意識(shí)地加以標(biāo)注。目前尚無(wú)檢測(cè)這類問(wèn)題的便捷方法,因此只有通過(guò)嚴(yán)謹(jǐn)?shù)脑O(shè)計(jì)進(jìn)行保障。
此外,盡管DRC和/或pcbfwd可以檢測(cè)符號(hào)是否具有所需的幾何屬性GEOM,但并不能檢測(cè)其值是否與電路圖符號(hào)相匹配。例如,ViewDraw符號(hào)指定的引腳數(shù)目就有可能與Allegro覆蓋區(qū)的引腳數(shù)目不匹配。
這類特殊錯(cuò)誤可由Allegro的dev_check進(jìn)行檢測(cè)。首先,在ViewDraw電路圖上運(yùn)行pcbfwd工具,創(chuàng)建Allegro設(shè)備文件,該文件連同Allegro覆蓋區(qū)文件將導(dǎo)入至dev_check。假定引腳68、69和70位于Allegro覆蓋區(qū)而不在ViewDraw上,那么dev_check就能檢測(cè)到該錯(cuò)誤。這些引腳可以是不相連引腳,安裝孔引腳,甚至是由于失誤而仍留在ViewDraw 符號(hào)外的POWER/GROUND引腳。不相連引腳和/或安裝孔引腳必須賦以NC屬性,而POWER/GROUND引腳則必須賦以SIGNAL屬性。按這種方式修正符號(hào),然后重新運(yùn)行pcbfwd 和dev_check。
最后,DRC輸出的質(zhì)量取決于電路圖質(zhì)量。例如,如果輸入引腳被錯(cuò)誤地指定為OUT屬性,那么DRC將產(chǎn)生錯(cuò)誤的出錯(cuò)消息。器件的符號(hào)質(zhì)量應(yīng)仔細(xì)而系統(tǒng)地進(jìn)行控制,因?yàn)樵撡|(zhì)量將影響其它所有工具。
DRC的其它功能
除了檢測(cè)違反規(guī)則的設(shè)計(jì)缺陷,DRC還可以創(chuàng)建有助于設(shè)計(jì)分析的附屬輸出文件,如前所述。輸入切換可通知DRC在每次運(yùn)行時(shí)是否創(chuàng)建這些文件。盡管這些文件并不包含DRC出錯(cuò)或警告消息,但仍然能標(biāo)示出潛在的設(shè)計(jì)問(wèn)題。例如,一個(gè)文件包含了所有網(wǎng)路及每個(gè)網(wǎng)路上的負(fù)載數(shù)目信息。如果負(fù)載數(shù)目超出允許值,那么就有可能導(dǎo)致信號(hào)完整性問(wèn)題。PCB設(shè)計(jì)人員可以迅速地檢查該文件以找到潛在的錯(cuò)誤。設(shè)計(jì)人員可以獲得盡可能多的附屬文件,下面給出了部分列表。
* 按網(wǎng)路名稱排序的網(wǎng)路列表及每個(gè)網(wǎng)路所在圖表的列表。此外,還可能包含引腳編號(hào)和網(wǎng)路連接的符號(hào)類型(及其參考標(biāo)志符)。該文件由drc_net()函數(shù)創(chuàng)建并可用于查找網(wǎng)路所在的圖表。
* 包含所有網(wǎng)路及每個(gè)網(wǎng)路上負(fù)載數(shù)目的列表,由drc_net()函數(shù)創(chuàng)建。為了獲取更好的信號(hào)完整性,網(wǎng)路上的負(fù)載數(shù)不應(yīng)超過(guò)8個(gè)。
* 跨越圖表邊界的網(wǎng)路列表。這有助于設(shè)計(jì)人員在調(diào)試中調(diào)整設(shè)計(jì)。
* 具有網(wǎng)路屬性的網(wǎng)路及其屬性。設(shè)計(jì)人員可以檢驗(yàn)網(wǎng)路是否具有正確的屬性,該文件由drc_net()函數(shù)創(chuàng)建,其基本代碼實(shí)現(xiàn)如下:
[列表11]
這里,ignetatt()和igattnxt()是可以獲取網(wǎng)路屬性的ViewBase例程。igattnam()獲取屬性名,而net_att則是輸出文件的文件指針。
* 未使用引腳列表,這些引腳可以是上拉引腳或下拉引腳。該文件由drc_inst()函數(shù)創(chuàng)建,可以報(bào)告上拉電阻和下拉電阻信息。
* 所有去耦電容及其容值列表,此外還可能包括這些電容所在的電路圖表。設(shè)計(jì)人員應(yīng)迅速檢驗(yàn)該文件以確保PCB上具有足夠多的去耦電容
。該文件由drc_inst()函數(shù)創(chuàng)建。
* 所有離散器件及其值的列表,如上拉/下拉電阻、傳輸線終端匹配電阻/電容。此外,還可能包含這些器件所在的電路圖表。設(shè)計(jì)人員可迅速檢查器件數(shù)目是否合理,該文件由drc_inst()函數(shù)創(chuàng)建。
該列表的另一項(xiàng)重要應(yīng)用則是PCB設(shè)計(jì)的信號(hào)完整性和時(shí)序分析[4]。該領(lǐng)域的大多數(shù)工具可以通過(guò)將所謂的串行元件功能合并為傳輸線分析結(jié)果并從輸出文件中取出這些元件,從而自動(dòng)處理這些串行元件。圖2中的R1就是一個(gè)串行終端匹配電阻。當(dāng)信號(hào)完整性工具報(bào)告網(wǎng)路延遲時(shí),由于R1的存在,延遲將由u1.z到u2.i,而不是先從u1.z到 R1.1,再由R1.2到u2.i。這是正確處理時(shí)序分析的方法。
然而,為了使信號(hào)完整性工具自動(dòng)識(shí)別串行元件,必須滿足一些條件。例如,電阻的參考標(biāo)志符必須以字母R開(kāi)頭,后面緊跟數(shù)字,而電容則必須以字母C開(kāi)頭。另一條件則是每個(gè)串行元件符號(hào)都必須具有屬性值為DISCRETE 的TYPE屬性。沒(méi)有這些條件,這些元件就無(wú)法得到正確地處理。
被許多其它的PCB復(fù)制的模板設(shè)計(jì)也是一個(gè)常見(jiàn)問(wèn)題。為了避免可能的參考標(biāo)志符沖突,模板設(shè)計(jì)中的電阻和電容通常可稱為XR1和XC1。在信號(hào)完整性工具數(shù)據(jù)庫(kù)中,這些器件都必須更改為R10001和C10001(編號(hào)略大于原始PCB設(shè)計(jì)中使用的任何參考標(biāo)志符)。設(shè)計(jì)人員可采用由DRC創(chuàng)建的離散器件列表檢查到XR和XC參考標(biāo)志符。