編寫(xiě)屬于自己的PCB設(shè)計(jì)規(guī)則檢查器
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ǔ)言編寫(xiě)的常規(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ì)比以保證兩者完全匹配。
評(píng)論