<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 編寫(xiě)PCB設計規則檢查器(DRC)的系統方法

編寫(xiě)PCB設計規則檢查器(DRC)的系統方法

作者: 時(shí)間:2012-03-09 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/190670.htm

封裝程序

本文提出的工具采用C語(yǔ)言和C例程ViewBase庫,C例程ViewBase庫可提供對ViewDraw電路圖數據庫進(jìn)行存取的便捷方法。每個(gè)例程均對一個(gè)數據項進(jìn)行存取或在兩個(gè)數據項之間建立聯(lián)系。但不能直接運行:應“包裝”在一個(gè)采用Perl或UNIX命令解釋語(yǔ)言的封裝程序中。該封裝程序具有如下形式:

* 檢查如圖1所示的設計目錄結構是否有效。


* 可以運行后端封裝程序(如應用于ViewDraw的pcbfwd)。該程序可檢測一些違反規則的設計缺陷(如網(wǎng)路名稱(chēng)的數目和類(lèi)型特性),而這通常很難采用DRC工具檢測。此外,還能賦值給那些尚未賦值的符號參考標志符特性 (如R4)。


* 檢測2.0.1節中討論的輸入文件是否存在,并將其注入DRC。


* 找到設計名稱(chēng)并將其注入DRC。


* 將其輸出文件的路徑和名稱(chēng)注入DRC。


* 建立所需的工具環(huán)境變量,如用于ViewDraw和ViewBase的WDIR。


* 調用DRC程序。


* 按需求打印幫助信息。


* 打印用戶(hù)和運行時(shí)間信息。


* 執行后處理。這既可以像修正控制工具檢測DRC輸出文件那樣簡(jiǎn)單,也可以像主動(dòng)處理DRC輸出文件那樣復雜(如從其它數據源添加更多的信息或執行排序操作)。C或許不是最佳的數據排序或文件分析工具,因為如果按數字順序排列文件,采用UNIX排序命令更為簡(jiǎn)單:sort +1n source_file > sorted_file。

DRC開(kāi)發(fā):main()函數

可以調用DRC程序drc.c,該文件具有兩個(gè)主要函數:drc_net()和drc_inst()。drc_net()遍歷了全部網(wǎng)路而drc_inst()則遍歷所有的元件(符號),這樣就能檢測任何有違規則的設計缺陷。這兩個(gè)函數都能產(chǎn)生附屬的輸出文件,可以參見(jiàn)1.0節和4.0節。

drc.c首先應當包含全部由C、ViewBase和用戶(hù)創(chuàng )建的頭文件,如stdio.h、viewbase.h和viewbase.h?,F在可以設定drc.c接收輸入參數,這樣不僅能為輸入和輸出文件聲明變量和文件指針,還可使ViewBase指向ViewDraw數據庫,并創(chuàng )建鏈接列表和散列表以存取從輸入文件讀入的信息。下面給出了main()函數的部分代碼實(shí)現。







當DRC封裝程序激活DRC時(shí),將導入輸入和輸出文件名及設計名 (參見(jiàn)3.0.1節)。數據結構Str_list_elem和Hash_table定義在drc.c包含的頭文件中,而GROUPS則是ViewBase數據類(lèi)型。

下一步,main()函數可以通過(guò)檢驗argc的取值從而確保輸入參數數目正確。如果參數值正確,那么將為變量分配正確的輸入參數。








此時(shí),main()函數可以初始化ViewBase數據結構,并使ViewBase指針pcb-ptr指向PCB設計。如果該設計存在并有效,那么main()函數應當:

* 打開(kāi)全部輸入文件,讀取信息并將信息存儲到內部數據結構(如Str_list_elem和Hash_table)中, 然后關(guān)閉輸入文件。


* 打開(kāi)所有輸出文件以寫(xiě)入信息,這些文件可以是設計規則錯誤/警告文件,也可以是附屬文件。


* 調用drc_net()和drc_inst()函數執行實(shí)際操作。


* 關(guān)閉所有輸出文件。

main()函數中完成上述功能的C和ViewBase代碼如下:

[列表3]

這里,iwinit()和iw1level()是ViewBase例程。前者初始化全部載入例程(這也是必須的),而后者則載入整個(gè)PCB設計。為了保證只載入一張電路圖,可以調用iw1sheet()例程(本文的DRC工具并不使用該例程)。需要注意的是,正確的設計指針、文件指針、鏈接列表、變量名稱(chēng)等必須傳入drc_net()和drc_inst()函數:

drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);


drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);

如果設計采用分層結構及不同的器件符號,那么還必須確保DRC能正確處理這些器件。

電路圖符號相關(guān)文章:電路圖符號大全


c++相關(guān)文章:c++教程




關(guān)鍵詞: PCB DRC 編寫(xiě) 系統方法

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>