資源描述:
《轉(zhuǎn)到linux下做pcb》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、轉(zhuǎn)到linux下做PCB
2、第1 但是這種變革必然會帶來這樣或那樣的問題。由于接觸和使用較早等原因,國內(nèi)的Protel用戶為數(shù)眾多,他們在選擇Cadence高速PCB解決方案的同時,都面臨著如何將手頭的Protel設(shè)計移植到CadencePCB設(shè)計軟件中的問題?! ≡谶@個過程當(dāng)中碰到的問題大致可分為兩種:一是設(shè)計不很復(fù)雜,設(shè)計師只想借助CadenceCCT的強(qiáng)大自動布線功能完成布線工作;二是設(shè)計復(fù)雜,設(shè)計師需要借助信噪分析工具來對設(shè)計進(jìn)行信噪仿真,設(shè)置線網(wǎng)的布線拓?fù)浣Y(jié)構(gòu)等工作?! τ诘谝环N情況,要做的轉(zhuǎn)化工作比較簡單,可以使用Protel或Cadence提供的Protel到CCT
3、的轉(zhuǎn)換工具來完成這一工作。對于第二種情況,要做的工作相對復(fù)雜一些,下面將這種轉(zhuǎn)化的方法作一簡單的介紹。 Cadence信噪分析工具的分析對象是CadenceAllegro的brd文件,而Allegro可以讀入合乎其要求的第三方網(wǎng)表,Protel輸出的Telexis格式的網(wǎng)表滿足Allegro對第三方網(wǎng)表的要求,這樣就可以將Protel文件注入Allegro?! ∵@里有兩點請讀者注意。首先,Allegro第三方網(wǎng)表在$PACKAGE段不允許有“.”;其次,在Protel中,我們用BasName[0:N]的形式表示總線,用BasName[x]表示總線中的一根信號,Allegro第三方
4、網(wǎng)表中總線中的一根信號的表示形式為BasNameX,讀者可以通過直接修改Protel輸出的Telexis網(wǎng)表的方法解決這些問題?! llegro在注入第三方網(wǎng)表時還需要每種類型器件的設(shè)備描述文件Device.txt文件,它的格式如下:Package:packagetypeClass:classtypePincount:totalpinnumberPinused:... 其中常用的是PACKAGE,CLASS,PINCOUNT這幾項。PACKAGE描述了器件的封裝,但Allegro在注入網(wǎng)表時會用網(wǎng)表中的PACKAGE項而忽略設(shè)備描述文件中的這一項。CLASS確定器件的類型,以便
5、信噪分折,Cadence將器件分為IC,IO,DISCRETE三類。PINCOUNT說明器件的管腳數(shù)目。對于大多數(shù)器件,Device.txt文件中包含有這三項就足夠了?! ∮辛说谌骄W(wǎng)表和設(shè)備描述文件,我們就可以將Protel中原理圖設(shè)計以網(wǎng)表的形式代入到CadencePCB設(shè)計軟件中,接下來,設(shè)計師就可以借助CadencePCB軟件在高速高密度PCB設(shè)計方面的強(qiáng)大功能完成自己的設(shè)計?! ∪绻呀?jīng)在Protel作了PCB布局的工作,Allegro的script功能可以將Protcl中的布局在Allegro中重現(xiàn)出來。在Protel中,設(shè)計師可以輸出一個PlacePick文件,這個文
6、件中包含了每個器件的位置、旋轉(zhuǎn)角度和放在PCB頂層還是底層等信息,可以通過這個文件很方便的生成一個Allegro的script文件,在Allegro中執(zhí)行這個script就能夠重現(xiàn)Protel中的布局了,下面給出了完成PlacePick文件到AllegroScript文件轉(zhuǎn)化的C++代碼,筆者使用這段代碼,僅用了數(shù)分鐘就將一個用戶有800多個器件的PCB板布局在Allegro重現(xiàn)出來。FILE*fp1,*fp2;::AfxMessageBox("hello");fp1=fopen("pick.txt","rt");if(fp1==NULL)::AfxMessageBox("Cann
7、otopenthefile!!!");fp2=fopen("place.txt","idx,midy,refx,refy,padx,pady,rotation;chartb[1];chartmp='"';fprintf(fp2,"%s","#Allegroscript");fprintf(fp2,"%s","version13.6");fprintf(fp2,"%s","placerefdes");p;midx);fscanf(fp1,"%f",midy);fscanf(fp1,"%f",refx);fscanf(fp1,"%f",refy);fscanf(fp1,"%f",pad
8、x);fscanf(fp1,"%f",pady);fscanf(fp1,"%s",tb);fscanf(fp1,"%f",rotation);fprintf(fp2,"fillin%c%s%c",tmp,refdes,tmp);if(rotation!=0){fprintf(fp2,"rotate");fprintf(fp2,"iangle%f",rotation);};charyy=tb[0];if(yy!='T')fprintf(fp2,"popmirror");