編寫(xiě)自己的PCB設(shè)計(jì)規(guī)則檢查器
1.0簡(jiǎn)介
本文介紹了編寫(xiě)設(shè)計(jì)規(guī)則檢查器(DRC)的系統(tǒng)方法用于PCB設(shè)計(jì)。在原理圖工具中捕獲PCB設(shè)計(jì)后,必須運(yùn)行DRC以查找違反設(shè)計(jì)規(guī)則的行為。這必須在后端處理開(kāi)始之前完成。通常,原理圖工具的供應(yīng)商提供DRC,大多數(shù)設(shè)計(jì)人員只是使用它。
但是,供應(yīng)商工具是通用的,可能并不總是足夠靈活,可以處理某些獨(dú)特的要求??梢詫⒁砑拥紻RC的新功能的請(qǐng)求發(fā)送給供應(yīng)商,但這將花費(fèi)金錢(qián)和時(shí)間,特別是如果必須多次執(zhí)行此操作。幸運(yùn)的是,大多數(shù)工具供應(yīng)商都提供易于使用的機(jī)制,您可以編寫(xiě)自己的DRC以更好地滿足您的獨(dú)特需求。不幸的是,這個(gè)強(qiáng)大的工具還沒(méi)有被廣泛認(rèn)可或利用。在本文中,我們提供了一些有關(guān)如何充分利用它的實(shí)用指南。
因?yàn)镈RC必須遍歷PCB設(shè)計(jì)的整個(gè)原理圖,包括每個(gè)符號(hào),每個(gè)引腳,每個(gè)網(wǎng)絡(luò),如有必要,可以生成每個(gè)屬性,無(wú)限數(shù)量的有用“副產(chǎn)品”。正如第4.0節(jié)所解釋的那樣,它們可以很好地標(biāo)記出微妙的設(shè)計(jì)規(guī)則違規(guī)。例如,一個(gè)副產(chǎn)品文件可能包含設(shè)計(jì)中的所有去耦電容。如果數(shù)字遠(yuǎn)小于或大于預(yù)期,這可能會(huì)引發(fā)可能的電源線dv/dt問(wèn)題的紅旗[1]。這些副產(chǎn)品文件可能非常需要,但它們是絕對(duì)不是由任何商用DRC生成的。
此DRC的另一個(gè)好處是可以輕松快速地更新它以適應(yīng)新的設(shè)計(jì)功能,例如影響設(shè)計(jì)規(guī)則的新屬性。此外,一旦在這個(gè)領(lǐng)域獲得了足夠的經(jīng)驗(yàn),那么許多其他可能性將出現(xiàn)。
例如,如果您可以編寫(xiě)自己的DRC,您當(dāng)然可以編寫(xiě)自己的物料清單(BOM)生成工具,這又可以更好地處理某些獨(dú)特的要求,例如在哪里獲取組件不屬于原理圖數(shù)據(jù)庫(kù)的“額外硬件”(插座,散熱片或螺釘)?;蛘吣梢跃帉?xiě)自己的Verilog netlister,它足夠靈活,適合您的設(shè)計(jì)環(huán)境,例如在哪里可以獲取Verilog模型或某些獨(dú)特組件的計(jì)時(shí)文件。事實(shí)上,當(dāng)DRC遍歷設(shè)計(jì)原理圖時(shí),它可以收集所有必要的信息,以輸出用于模擬的Verilog網(wǎng)表和/或用于PCB制造的BOM。
這將很難討論這些主題沒(méi)有提供一些編程代碼。為此,我們需要使用原理圖捕獲工具作為示例。在本文中,我們使用來(lái)自Mentor Graphics的ViewDraw,它是PADS-Designer產(chǎn)品系列的一部分。此外,我們使用ViewBase,它只是一個(gè)C例程庫(kù),可以調(diào)用它來(lái)訪問(wèn)ViewDraw數(shù)據(jù)庫(kù)。使用ViewBase,您可以輕松地在C/C ++[2] [3]中為ViewDraw編寫(xiě)完整且有用的DRC。請(qǐng)注意,我們?cè)诖擞懻摰脑瓌t適用于任何其他PCB原理圖工具。
2.0開(kāi)始
2.0.1輸入文件
除了原理圖數(shù)據(jù)庫(kù)之外,DRC還需要一些輸入文件來(lái)告訴它如何處理某些情況,例如自動(dòng)連接到電源平面的合法電源網(wǎng)名。例如,如果電源網(wǎng)稱為POWER,則它會(huì)通過(guò)后端打包實(shí)用程序自動(dòng)連接到電源平面,例如ViewDraw的 pcbfwd 。以下是這些輸入文件的列表,這些文件應(yīng)放在固定的全局位置,以便DRC可以在運(yùn)行時(shí)自動(dòng)查找/讀取它們并在內(nèi)部存儲(chǔ)信息。
可選擇創(chuàng)建名為legal_pwr_net_name的文件包含POWER信號(hào)的所有合法網(wǎng)絡(luò)名稱,例如VCC,V3_3P,VDD。請(qǐng)注意,字母大小寫(xiě)可能對(duì)某些PCB布局/布線工具很重要,并且通常VCC與Vcc或vcc不同。 VCC可以是5.0V電源,V3_3P可以是3.3V電源。
legal_pwr_net_name是可選的,因?yàn)楹蠖舜虬鼘?shí)用程序的配置文件通常必須包含合法電源/地網(wǎng)名稱列表。如果來(lái)自Cadence Design Systems的Allegro是放置/布局工具,則該文件名為allegro.cfg,用于 pcbfwd ,它必須具有以下條目:
接地VSS CGND GND GROUND
電源VCC VDD VEE V3_3P V2_5P + 5V + 12V
如果DRC可以直接讀取allegro.cfg而不是legal_pwr_net_name,那將會(huì)更好(引入錯(cuò)誤的可能性更?。?。
通常,電源/接地引腳不會(huì)出現(xiàn)在元件符號(hào)上。相反,該符號(hào)具有一個(gè)屬性(可以稱為SIGNAL),該屬性指定哪個(gè)引腳是電源還是接地,并指定該引腳應(yīng)連接到的網(wǎng)絡(luò)的名稱:
SIGNAL = VCC:10
SIGNAL = GROUND:20
DRC可以讀取此屬性并確保網(wǎng)絡(luò)名稱是legal_pwr_net_name文件中的名稱。如果沒(méi)有,該電源引腳將不會(huì)連接到電源層,這是一個(gè)非常嚴(yán)重的錯(cuò)誤。
某些符號(hào)必須帶有電源/接地引腳,因?yàn)樗鼈兾催B接到正常電源/接地層。例如,ECL器件的VCC引腳可以連接到VCC或GROUND;其VEE引腳可以連接到GROUND或-5.0V平面。此外,電源/接地引腳可以在進(jìn)入電源/接地平面之前首先連接到濾波器。
此引腳和過(guò)濾器之間的網(wǎng)絡(luò)可以有任何名稱,DRC將無(wú)法檢查此信息。 DRC可以將此報(bào)告為錯(cuò)誤,用戶必須將其篩選出來(lái),或者僅為此設(shè)計(jì)將網(wǎng)名添加到legal_pwr_net_name文件中。這是可能需要legal_pwr_net_name等文件的一個(gè)原因。最后,legal_pwr_net_name將被DRC讀入1)找到上拉電阻,2)檢查設(shè)計(jì)中POWER網(wǎng)名的字母大小寫(xiě),以及3)檢測(cè)任何未使用的引腳直接連接到POWER。
可選擇創(chuàng)建一個(gè)名為legal_gnd_net_name的文件,其中包含GROUND信號(hào)的所有合法網(wǎng)絡(luò)名稱,例如GROUND,VSS和F_GND。再次注意,字母大小寫(xiě)可能對(duì)某些PCB布局/路由工具很重要。此外,如果DRC可以直接讀取上面提到的allegro.cfg文件而不是legal_gnd_net_name,那將更好。
legal_gnd_net_name與上面討論的legal_pwr_net_name具有相同的目的。此外,它將被DRC讀入1)找到下拉電阻,2)檢查GROUND網(wǎng)絡(luò)名稱的字母大小寫(xiě),以及3)檢測(cè)直接連接到GROUND的任何未使用的引腳。
(可選)創(chuàng)建legal_lib_path_name文件,其中包含所有合法符號(hào)庫(kù)路徑和名稱。這非常重要,因?yàn)槌R?jiàn)和嚴(yán)重的錯(cuò)誤是使用未經(jīng)授權(quán)的庫(kù)中的符號(hào)。在PCB設(shè)計(jì)階段,通常會(huì)創(chuàng)建臨時(shí)組件符號(hào)并將其放在本地符號(hào)庫(kù)目錄中以進(jìn)行測(cè)試。最終版本將從此出來(lái)并放在公司或全局庫(kù)目錄中,它們可能與本地版本的重要方式不同。設(shè)計(jì)人員通常忘記用公司符號(hào)替換本地符號(hào)并引入設(shè)計(jì)錯(cuò)誤。
legal_lib_path_name是可選的,因?yàn)閷?duì)于大多數(shù)原理圖工具,庫(kù)信息包含在啟動(dòng)該工具所需的初始化文件中。對(duì)于ViewDraw,該文件名為viewdraw.ini,并在工具啟動(dòng)時(shí)自動(dòng)創(chuàng)建(通過(guò)腳本)。庫(kù)規(guī)范條目如下所示:
DIR [r]/corp_lib/pcb/symbol_libraries/viewdraw/fct(fct)
fct是眾多ViewDraw中的一個(gè)子可以來(lái)自fct(快速CMOS技術(shù))部件符號(hào)的庫(kù)。 DRC可以而且應(yīng)該直接讀取此初始化文件(如果存在),因?yàn)樵O(shè)計(jì)人員可以動(dòng)態(tài)添加新庫(kù)。
創(chuàng)建一個(gè)名為legal_pullup_res的文件,其中包含合法的上拉電阻用于端接和未使用的輸入引腳。通常,公司有資格并允許其設(shè)計(jì)人員使用的電阻列表。此外,電阻值也很重要。如果未使用的輸入引腳被上拉,則該值應(yīng)為5K或更高。
創(chuàng)建一個(gè)名為legal_pulldown_res的文件,其中包含用于端接和未使用輸入引腳的合法下拉電阻。如果使用一個(gè)電阻來(lái)拉低未使用的輸入引腳,則其值應(yīng)該很小,以防止任何漏電流將引腳電壓增加到觸發(fā)閾值以上。
創(chuàng)建一個(gè)名為legal_decoup_cap的文件,其中包含合法的去耦電容。同樣,公司可能要求其設(shè)計(jì)人員僅使用符合電源線dv/dt要求的某些合格零件。
創(chuàng)建一個(gè)名為legal_comp_attr的文件,其中包含組件符號(hào)應(yīng)具有的所有必需屬性,例如PART_NO,GEOM,REFDES,SIM_CLASS。它們可以由BOM生成工具,Verilog網(wǎng)表和其他工具使用。
創(chuàng)建一個(gè)名為legal_pin_attr的文件,其中包含組件符號(hào)應(yīng)具有的所有必需的引腳屬性,例如PIN_NAME,PINTYPE,PIN_NO 。
2.0.2設(shè)計(jì)目錄結(jié)構(gòu)
DRC運(yùn)行的第二個(gè)條件是固定的單一設(shè)計(jì)目錄結(jié)構(gòu),由所有PCB設(shè)計(jì)共享。沒(méi)有它,DRC就不知道在哪里可以找到原理圖數(shù)據(jù)庫(kù)以及存儲(chǔ)輸出文件的位置。這種結(jié)構(gòu)可能非常復(fù)雜,并且具有許多層級(jí),以支持所有PCB設(shè)計(jì)活動(dòng),例如設(shè)計(jì)規(guī)則檢查,BOM生成,Verilog仿真,靜態(tài)時(shí)序分析,信號(hào)完整性分析,布局/布局,PAL/FPGA設(shè)計(jì)(綜合)和模擬)和文件控制。但是對(duì)于DRC而言,如果使用ViewDraw,以下內(nèi)容就足夠了:
圖1 - 目錄結(jié)構(gòu)
pcb_info目錄應(yīng)至少包含兩個(gè)文件。第一個(gè)是design_def,另一個(gè)是design_type。 design_def應(yīng)包含PCB部件(組件)編號(hào)和其他所需信息,不僅適用于DRC,還適用于所有其他工具。 design_type應(yīng)包含設(shè)計(jì)類型信息,即PCB。如果此設(shè)計(jì)目錄結(jié)構(gòu)由其他類型的設(shè)計(jì)(例如ASIC或FPGA)共享,則design_type應(yīng)指定它,以便設(shè)計(jì)自動(dòng)化工具可以針對(duì)不同的設(shè)計(jì)類型采取適當(dāng)?shù)牟僮?。如果pcb_info目錄丟失或?yàn)榭眨瑒t表示設(shè)計(jì)目錄不是標(biāo)準(zhǔn)目錄。在這種情況下,DRC應(yīng)退出并給出錯(cuò)誤消息。
schem目錄包含原理圖數(shù)據(jù)庫(kù),可由我們的DRC使用的ViewBase直接訪問(wèn)。 sch子目錄包含描述工作表上的符號(hào)位置和其他信息的原理圖文件。 wir子目錄包含設(shè)計(jì)的網(wǎng)表和所有符號(hào)屬性。 ViewBase例程可以直接訪問(wèn)它們。
drc目錄應(yīng)該存儲(chǔ)DRC的輸出文件。
3.0 A PCB DRC
3.0.1包裝器程序
我們的DRC是用C語(yǔ)言和C例程的ViewBase庫(kù)編寫(xiě)的。后者提供了對(duì)ViewDraw原理圖數(shù)據(jù)庫(kù)的輕松直接訪問(wèn)。它的每個(gè)例程訪問(wèn)一個(gè)數(shù)據(jù)項(xiàng)或遍歷兩個(gè)數(shù)據(jù)項(xiàng)之間的一個(gè)關(guān)系。但是DRC不應(yīng)該直接運(yùn)行:它應(yīng)該“包裝”在用Perl或UNIX shell語(yǔ)言編寫(xiě)的包裝程序中。包裝器程序執(zhí)行以下操作:
檢查圖1中描述的PCB設(shè)計(jì)目錄結(jié)構(gòu)是否有效。
可選擇運(yùn)行后端打包程序,例如 pcbfwd 用于ViewDraw。該程序可以檢查在DRC中難以檢查的一些設(shè)計(jì)規(guī)則違規(guī),例如網(wǎng)絡(luò)名稱允許的字符數(shù)和類型。它還可以將值(例如R4)分配給尚未分配值的符號(hào)參考指示符屬性。
檢查第2.0.1節(jié)中討論的所需輸入文件是否存在,并將它們提供給DRC。/li>
查找PCB設(shè)計(jì)名稱并將其提供給DRC。
向DRC輸入其輸出文件的路徑和名稱。
設(shè)置所需的工具環(huán)境變量,例如用于ViewDraw和ViewBase的WDIR。
調(diào)用DRC程序。
根據(jù)請(qǐng)求打印幫助消息。
打印用戶和運(yùn)行時(shí)信息。
執(zhí)行后期處理。這可以像檢查DRC的輸出文件到修訂控制工具一樣簡(jiǎn)單,也可以像主動(dòng)處理DRC的輸出文件一樣復(fù)雜,例如從其他數(shù)據(jù)源添加更多信息或執(zhí)行排序。 C可能不是排序數(shù)據(jù)或解析文件的最佳工具。例如,要使用第二個(gè)字段以數(shù)字方式對(duì)文件進(jìn)行排序,使用UNIX排序命令要容易得多:
sort + 1n source_file> sorted_file
3.0.2 DRC開(kāi)發(fā):main()函數(shù)
讓我們調(diào)用DRC程序drc.c,它可以有兩個(gè)主要功能:drc_net()和drc_inst()。前者遍歷所有網(wǎng)絡(luò),后者遍歷所有實(shí)例(符號(hào)),尋找設(shè)計(jì)規(guī)則違規(guī)。這兩個(gè)函數(shù)還可以生成副產(chǎn)品輸出文件,這將在第1.0節(jié)和第4.0節(jié)中討論。
drc.c應(yīng)該首先包括所有C,ViewBase和用戶創(chuàng)建的頭文件,例如stdio.h,viewbase.h和hash_table.h。現(xiàn)在設(shè)置drc.c以接收輸入參數(shù),聲明變量和文件指針指向輸入和輸出文件,使ViewBase指向ViewDraw數(shù)據(jù)庫(kù),并創(chuàng)建鏈接列表和散列表以存儲(chǔ)從輸入文件讀入的信息。 main()函數(shù)的一部分如下所示。
輸入和輸出文件名以及PCB設(shè)計(jì)名稱在調(diào)用DRC時(shí)由DRC的包裝程序(參見(jiàn)第3.0.1節(jié))輸入。數(shù)據(jù)結(jié)構(gòu)Str_list_elem和Hash_table在drc.c包含的頭文件中定義。 GROUPS是一個(gè)ViewBase數(shù)據(jù)類型。
接下來(lái),main()函數(shù)應(yīng)該通過(guò)檢查argc是否等于預(yù)期數(shù)量來(lái)確保傳入正確的輸入數(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)該:
打開(kāi)所有輸入文件以進(jìn)行讀取,并將其信息存儲(chǔ)到內(nèi)部數(shù)據(jù)結(jié)構(gòu)中,例如Str_list_elem和Hash_table。關(guān)閉輸入文件。
打開(kāi)所有輸出文件進(jìn)行寫(xiě)入。它們可以是設(shè)計(jì)規(guī)則錯(cuò)誤/警告文件以及副產(chǎn)品文件。
調(diào)用drc_net()和drc_inst()函數(shù)來(lái)完成實(shí)際工作。
關(guān)閉所有輸出文件。
main()中的C和ViewBase代碼的大綱這是:
這里,iwinit()和iw1level()是ViewBase例程。前者初始化所有加載器例程,這是必需的。后者加載一層PCB設(shè)計(jì)(整個(gè)設(shè)計(jì))。要僅加載一個(gè)工作表,請(qǐng)使用iw1sheet()例程(我們的DRC中未使用該例程)。請(qǐng)注意,必須將正確的設(shè)計(jì)指針,文件指針,鏈接列表,變量名等傳遞給drc_net()和drc_inst()函數(shù):
drc_inst(pcb_ptr,pcb_name,drc_error,list_legal_pwr_name,.. 。);
如果您的設(shè)計(jì)是分層的并且使用異構(gòu)組件符號(hào),那么請(qǐng)確保DRC可以正確處理它們。
3.0.3 DRC開(kāi)發(fā): drc_net()函數(shù)
drc_net()遍歷PCB設(shè)計(jì)中的所有網(wǎng)絡(luò),查找違反設(shè)計(jì)規(guī)則和/或生成副產(chǎn)品輸出文件。代碼大綱如下:
這里,iggrpnet()和ignetnxt()是ViewBase例程,用于抓取PCB設(shè)計(jì)中的每個(gè)網(wǎng)絡(luò)。 ignetnam()也是一個(gè)用于查找網(wǎng)絡(luò)名稱的ViewBase例程。 NETS,PINS,COMPONENTS,SYMBOLS和ATTRIBUTES是ViewBase數(shù)據(jù)類型.drc_net()可以查找以下設(shè)計(jì)規(guī)則違規(guī):
非法網(wǎng)絡(luò)名稱。如果ViewDraw自動(dòng)分配了網(wǎng)絡(luò)名稱,其格式為$#...#N#...#,其中第一個(gè)#...#是工作表編號(hào),第二個(gè)#...#是網(wǎng)絡(luò)編號(hào)。 PCB設(shè)計(jì)人員分配的網(wǎng)絡(luò)名稱必須以字母開(kāi)頭,后跟30個(gè)或更少字符。
drc_net()應(yīng)調(diào)用函數(shù)legal_net_name()來(lái)執(zhí)行此任務(wù)。在UNIX中,regexp.h頭文件大大簡(jiǎn)化了C中的正則表達(dá)式匹配/檢查,該文件必須包含在DRC程序中。 drc_net()應(yīng)該將網(wǎng)名變量和設(shè)計(jì)規(guī)則違規(guī)文件指針傳遞給legal_net_name(),它看起來(lái)像:
后端打包工具 pcbfwd 還可以檢查非法網(wǎng)名,但其功能僅限于簡(jiǎn)單的正則表達(dá)式。上面給出的代碼可以處理任何正則表達(dá)式。此外,在運(yùn)行pcbfwd之前或之后是否查找非法網(wǎng)名是一個(gè)權(quán)衡問(wèn)題。對(duì)于簡(jiǎn)單的網(wǎng)絡(luò)名稱,請(qǐng)使用pcbfwd。
網(wǎng)絡(luò)上的總線爭(zhēng)用,這是一個(gè)嚴(yán)重的錯(cuò)誤。有2種。一個(gè)是圖騰柱輸出之間的爭(zhēng)用,另一個(gè)是圖騰柱和三態(tài)輸出之間的爭(zhēng)論。代碼大綱如下:
這里,ignetpin()和igpinnnx()是ViewBase例程,它們抓取網(wǎng)絡(luò)上的每個(gè)引腳。 igpinown()例程返回指針的實(shí)例(所有者)的指針。函數(shù)get_inst_attr(),get_pin_attr()和get_sheet_num()分別返回所請(qǐng)求的實(shí)例屬性(引用指示符REFDES),引腳屬性(PINTYPE)和引腳實(shí)例所在的工作表編號(hào)。 get_pin_attr()函數(shù)的大綱如下:
get_inst_attr()函數(shù)的大綱如下:
get_sheet_num()函數(shù)的大綱如下所示:
POWER和GROUND網(wǎng)絡(luò)的非法名稱。它們與存儲(chǔ)在內(nèi)部數(shù)據(jù)結(jié)構(gòu)中的信息(如鏈表)進(jìn)行比較。
報(bào)告有負(fù)載但沒(méi)有驅(qū)動(dòng)程序的網(wǎng)絡(luò),反之亦然。這是通過(guò)跟蹤網(wǎng)絡(luò)上每個(gè)引腳的引腳類型來(lái)完成的。應(yīng)該有1個(gè)輸出引腳或多個(gè)三態(tài)輸出引腳和至少1個(gè)輸入引腳。此外,請(qǐng)?zhí)峁┐司W(wǎng)絡(luò)上所有組件的參考標(biāo)志和符號(hào)以及所涉及的引腳。
報(bào)告所有未接通上拉電阻或其上拉電阻未連接的集電極開(kāi)路輸出POWER。
如果網(wǎng)絡(luò)的負(fù)載超過(guò)正常負(fù)載,則應(yīng)打印警告,為了獲得良好的信號(hào)完整性,該負(fù)載應(yīng)小于8.
3.0.4 DRC開(kāi)發(fā):drc_inst( )函數(shù)
drc_inst()函數(shù)類似于drc_net(),除了前者遍歷每個(gè)原理圖工作表及PCB設(shè)計(jì)中的所有實(shí)例以查找違反設(shè)計(jì)規(guī)則或通過(guò)以下方式生成:產(chǎn)品輸出文件。它的代碼大綱是:
我們之前對(duì)drc_net()函數(shù)的討論提供了充足的C和ViewBase代碼示例,這里不再重復(fù)。以下是drc_inst()可以檢查的設(shè)計(jì)規(guī)則違規(guī)的部分列表:
非法或缺少符號(hào)庫(kù)別名。 PCB設(shè)計(jì)中的所有符號(hào)必須來(lái)自公司符號(hào)庫(kù)。使用來(lái)自錯(cuò)誤庫(kù)的符號(hào)是一種非常常見(jiàn)的錯(cuò)誤來(lái)源,尤其是對(duì)于僅依靠符號(hào)來(lái)處理設(shè)計(jì)的后端處理工具。
缺少符號(hào)和/或引腳屬性,例如指定組件幾何的屬性和引腳的類型(in,out,bi,tri)。
符號(hào)和/或引腳屬性的非法值。例如,引腳類型的值可以是IN,但不能是INPUT。這會(huì)影響后端打包工具(如 pcbfwd,)如何向放置/布局工具提供信息,例如Allegro。
符號(hào)上參考指示符的值,尤其是對(duì)于系列組件,例如電阻器,電容器和電感器。大多數(shù)信號(hào)完整性工具要求這些值以字母R,C和L開(kāi)頭,以便可以將它們分析為系列元素而不是分立元件。此外,drc_inst()可以根據(jù)description屬性檢查它們的值,以確保兩者匹配。
非法去耦電容。這可能導(dǎo)致POWER線路dv/dt問(wèn)題。
非法的上拉和下拉電阻。
符號(hào)的POWER或GROUND引腳未連接到POWER或GROUND平面。
未使用的輸入引腳沒(méi)有通過(guò)電阻上拉或下拉,或者此電阻沒(méi)有直接連接到POWER或GROUND網(wǎng)絡(luò)。
如果上拉或下拉超過(guò)1個(gè)未使用的輸入引腳,則發(fā)出警告
在直接連接到POWER或GROUND網(wǎng)絡(luò)的非專用POWER和GROUND引腳上發(fā)出警告。
如果使用Tab鍵,請(qǐng)檢查它是否引用了正確的替代方案組件,例如它們的部件號(hào)是否有效以及它們的幾何形狀是否與默認(rèn)組件的幾何形狀匹配。
3.0.5 DRC不應(yīng)該做什么
雖然我們的DRC可以做很多事情,有些東西可以通過(guò)其他方式更好更容易地檢查。一個(gè)偉大而必要的幫手是后端封裝實(shí)用程序,它為放置/布局工具打包PCB設(shè)計(jì)。對(duì)于ViewDraw,它是 pcbfwd,,可以設(shè)置它來(lái)檢查許多設(shè)計(jì)規(guī)則違規(guī)和設(shè)計(jì)錯(cuò)誤。
DRC和 pcbfwd之間存在重疊 pcbfwd 運(yùn)行之前運(yùn)行。理想情況下, pcbfwd 應(yīng)僅運(yùn)行以打包設(shè)計(jì),因此DRC可以檢查得越多越好。但是你應(yīng)該平衡開(kāi)發(fā)超級(jí)強(qiáng)大的DRC與免費(fèi)提供的 pcbfwd的現(xiàn)有功能的努力。本節(jié)簡(jiǎn)要討論了這些問(wèn)題。
pcbfwd 由其配置文件控制,如果Allegro是放置/布局工具,則稱為allegro.cfg。其BeginChkRules - EndChkRules部分可用于檢查許多錯(cuò)誤,例如同一符號(hào)上的重復(fù)屬性,非法網(wǎng)絡(luò)和網(wǎng)絡(luò)屬性名稱,錯(cuò)誤的異構(gòu)包,異構(gòu)符號(hào)上的沖突屬性以及缺少的屬性。例如,要捕獲異構(gòu)符號(hào)上的沖突屬性,請(qǐng)將以下行放入allegro.cfg:
CHKBRD _HETERO_ATT ERR 0
有些事情既不是DRC也不是 pcbfwd 可以檢查,例如PCB設(shè)計(jì)中的預(yù)期冗余。假設(shè)一個(gè)組件包含4個(gè)相同的部件,2個(gè)用于設(shè)計(jì),那么它們可以打包到同一個(gè)組件或2個(gè)組件中以實(shí)現(xiàn)冗余。如果需要一個(gè)組件,則兩個(gè)組件的符號(hào)必須具有相同的參考標(biāo)號(hào),例如U4。如果需要2個(gè)組件,則符號(hào)必須具有不同的參考標(biāo)志,例如U4和U5,必須由設(shè)計(jì)人員認(rèn)真添加。沒(méi)有已知的簡(jiǎn)單方法來(lái)捕捉此類錯(cuò)誤,而精心設(shè)計(jì)師可能是唯一的保證。
另一個(gè)例子是雖然DRC和/或 pcbfwd 可以檢查是否symbol具有所需的幾何屬性GEOM,它們無(wú)法檢查其值是否與原理圖符號(hào)匹配。一個(gè)不匹配可能在ViewDraw符號(hào)上指定的引腳數(shù)與Allegro占用空間上的引腳數(shù)之間。
Allegro的 dev_check 實(shí)用程序可以捕獲此特定錯(cuò)誤。首先,在ViewDraw原理圖上運(yùn)行pcbfwd以創(chuàng)建Allegro設(shè)備文件,這些文件與Allegro腳印文件一起輸入 dev_check 。假設(shè)引腳68,69和70位于Allegro占位面積上但不在ViewDraw符號(hào)上,則 dev_check 可以捕獲此信息。這些引腳可能是無(wú)連接或安裝孔,甚至是錯(cuò)誤地遺漏在ViewDraw符號(hào)之外的POWER/GROUND引腳。必須為NC屬性分配無(wú)連接和/或安裝孔引腳,并將POWER/GROUND引腳分配給SIGNAL屬性。以這種方式修改符號(hào)并重新運(yùn)行 pcbfwd 和 dev_check 。
最后,DRC輸出的質(zhì)量取決于原理圖的質(zhì)量。例如,如果錯(cuò)誤地將引腳類型指定為輸入引腳的OUT,則DRC將生成錯(cuò)誤的錯(cuò)誤消息。組件符號(hào)質(zhì)量應(yīng)該仔細(xì)和系統(tǒng)地控制,因?yàn)樗鼤?huì)影響所有其他工具。
4.0超越DRC
除了檢查設(shè)計(jì)規(guī)則違規(guī),DRC還可以生成有用的副產(chǎn)品輸出文件,如前所述。輸入開(kāi)關(guān)可以告訴DRC是否為每次運(yùn)行生成它們。雖然這些文件不包含DRC錯(cuò)誤或警告消息,但它們可以標(biāo)記潛在的設(shè)計(jì)問(wèn)題。例如,一個(gè)文件可以包含所有網(wǎng)絡(luò)的列表以及每個(gè)網(wǎng)絡(luò)上的負(fù)載數(shù)量。如果該數(shù)量超過(guò)合理值,則可能導(dǎo)致信號(hào)完整性問(wèn)題。 PCB設(shè)計(jì)人員可以快速瀏覽此文件并查找此類問(wèn)題。這些副產(chǎn)品文件的數(shù)量可以是所需數(shù)量。部分列表如下。
按網(wǎng)名排序的所有網(wǎng)絡(luò)列表以及每個(gè)網(wǎng)絡(luò)所在的工作表。附加信息可能包括該網(wǎng)絡(luò)連接的符號(hào)的引腳號(hào)和類型(及其參考標(biāo)號(hào))。該文件由drc_net()函數(shù)創(chuàng)建。它可用于查找網(wǎng)絡(luò)所在的工作表。
所有網(wǎng)絡(luò)的列表以及每個(gè)網(wǎng)絡(luò)的負(fù)載數(shù)量。這是由drc_net()函數(shù)生成的。為了獲得良好的信號(hào)完整性,網(wǎng)絡(luò)應(yīng)該不超過(guò)8個(gè)負(fù)載。
跨越工作表邊界的網(wǎng)絡(luò)列表。這有助于設(shè)計(jì)人員在實(shí)驗(yàn)室中調(diào)試設(shè)計(jì)。
具有網(wǎng)絡(luò)屬性及其屬性的網(wǎng)絡(luò)列表。 Designer可以檢查這些網(wǎng)絡(luò)是否具有正確的屬性。此文件由drc_net()函數(shù)生成,代碼大綱為:
此處,ignetatt()和igattnxt()是ViewBase例程以獲取網(wǎng)絡(luò)上的每個(gè)屬性。 igattnam()獲取屬性名稱。 net_att是指向輸出文件的文件指針。
所有未使用的引腳的列表,應(yīng)該上拉或下拉。報(bào)告上拉和下拉電阻。該文件由drc_inst()函數(shù)生成。
所有去耦電容及其值的列表。附加信息可能包括它們所在的原理圖表。設(shè)計(jì)人員應(yīng)快速檢查此文件,以確保PCB上有足夠的去耦電容。該文件由drc_inst()函數(shù)生成。
所有分立元件及其值的列表,例如上拉/下拉電阻,傳輸線終端電阻/電容。附加信息可能包含它們所在的原理圖表。設(shè)計(jì)師可以快速檢查數(shù)字是否合理。該文件由drc_inst()函數(shù)生成。
此列表的另一個(gè)重要用途是PCB設(shè)計(jì)的信號(hào)完整性和時(shí)序分析[4]。該領(lǐng)域的大多數(shù)工具都可以自動(dòng)處理所謂的系列元素,通過(guò)將它們的效果組合到傳輸線分析結(jié)果中,但將它們從輸出文件中取出。一個(gè)這樣的元件是圖2中的R1,它是串聯(lián)終端電阻器。當(dāng)信號(hào)完整性工具報(bào)告凈延遲時(shí),它將從u1.z到u2.i,包含R1的效果,而不是從u1.z到R1.1,并從R1.2繼續(xù)到u2.i.這是正確的時(shí)序分析。
圖2 - 串聯(lián)終端電阻
但是,為了一個(gè)信號(hào)完整性工具自動(dòng)識(shí)別一系列元素,必須滿足一些條件。例如,電阻的參考標(biāo)志必須以字母R后跟數(shù)字和字母C的電容開(kāi)始。另一個(gè)條件是每個(gè)系列元素符號(hào)必須具有值為DISCRETE的TYPE屬性。沒(méi)有這些條件,這些元素就無(wú)法正確處理。
一個(gè)常見(jiàn)問(wèn)題是模板設(shè)計(jì)被許多其他PCB復(fù)制。為了避免可能的參考標(biāo)志沖突,模板設(shè)計(jì)中的電阻和電容通常稱為XR1和XC1。必須在信號(hào)完整性工具的數(shù)據(jù)庫(kù)中將它們更改為R10001和C10001(數(shù)字應(yīng)大于原始PCB設(shè)計(jì)中使用的任何可能的參考標(biāo)志符號(hào))。通過(guò)使用我們的DRC生成的離散組件列表,可以找到XR和XC參考標(biāo)志。
5.0結(jié)論
顯然,有編寫(xiě)自己的PCB設(shè)計(jì)規(guī)則檢查器的許多優(yōu)點(diǎn)和必要條件。盡管這項(xiàng)工作并非微不足道,但它也不是火箭科學(xué),也可以由對(duì)現(xiàn)有編程或腳本語(yǔ)言有深入了解的任何人完成。好處是無(wú)限的,可以大大超過(guò)努力。
6.0參考文獻(xiàn)
1。 Luke L. Chang,“VAX 9000存儲(chǔ)器配電系統(tǒng)的瞬態(tài)分析”,數(shù)字電源系統(tǒng),1990年秋/冬
2。 Brian W. Kernighan& Dennis M. Ritchie,“C編程語(yǔ)言”,第2版,Prentice Hall,1988年
3。 Bjarne Stroustrup,“The C ++ Programming Language”,3rd Edition,Addison-Wesley,1997
4。 Luke L. Chang,“高速電路板的靜態(tài)時(shí)序分析”,IEEE Spectrum,1997年3月
Luke L. Chang是英特爾存儲(chǔ)元件部門(mén)的高級(jí)驗(yàn)證負(fù)責(zé)人(哈德遜,馬薩諸塞州)。在此之前,他曾在多家高科技公司擔(dān)任過(guò)工程和管理職位,涉及硬件設(shè)計(jì)/驗(yàn)證和電子設(shè)計(jì)自動(dòng)化(EDA)領(lǐng)域。
-
PCB設(shè)計(jì)
+關(guān)注
關(guān)注
394文章
4688瀏覽量
85628 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43044
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論