• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 編寫PCB設(shè)計(jì)規(guī)則檢查器(DRC)的系統(tǒng)方法

    編寫PCB設(shè)計(jì)規(guī)則檢查器(DRC)的系統(tǒng)方法

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

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

    封裝程序

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

    * 檢查如圖1所示的設(shè)計(jì)目錄結(jié)構(gòu)是否有效。


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


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


    * 找到設(shè)計(jì)名稱并將其注入DRC。


    * 將其輸出文件的路徑和名稱注入DRC。


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


    * 調(diào)用DRC程序。


    * 按需求打印幫助信息。


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


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

    DRC開發(fā):main()函數(shù)

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

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







    當(dāng)DRC封裝程序激活DRC時(shí),將導(dǎo)入輸入和輸出文件名及設(shè)計(jì)名 (參見3.0.1節(jié))。數(shù)據(jù)結(jié)構(gòu)Str_list_elem和Hash_table定義在drc.c包含的頭文件中,而GROUPS則是ViewBase數(shù)據(jù)類型。

    下一步,main()函數(shù)可以通過檢驗(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):

    * 打開全部輸入文件,讀取信息并將信息存儲(chǔ)到內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如Str_list_elem和Hash_table)中, 然后關(guān)閉輸入文件。


    * 打開所有輸出文件以寫入信息,這些文件可以是設(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能正確處理這些器件。

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


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




    關(guān)鍵詞: PCB DRC 編寫 系統(tǒng)方法

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 三明市| 逊克县| 东阿县| 马鞍山市| 平果县| 桃园县| 高州市| 江达县| 江达县| 高阳县| 大厂| 华坪县| 隆回县| 华宁县| 玉山县| 永泰县| 衡水市| 沂源县| 泰来县| 重庆市| 兰州市| 昭平县| 娱乐| 马龙县| 织金县| 秦皇岛市| 濮阳县| 偃师市| 铁力市| 迭部县| 祁阳县| 阳朔县| 汉川市| 承德市| 沂水县| 任丘市| 双桥区| 宜春市| 泰宁县| 榕江县| 扎赉特旗|