随着PCB设计的复杂程度和高速PCB设计需求的不断增加,越来越多的PCB设计者、设计团队选择Cadence的设计平台和工具。但是,由于没有Protel数据到Cadence数据直接转换工具,长期以来如何将现有的基于Protel平台的设计数据转化到Cadence平台上来一直是处于平台转化期的设计者所面临的难题。
在长期实际的基础上,结合现有工具的特点,提供一种将Protel原理图、PCB转化到Cadence平台上的方法。
1. 使用的工具
a) Protel DXP SP2
b) Cadence Design Systems, Inc. Capture CIS
c) Cadence Design Systems, Inc. Orcad Layout
d) Cadence Design Systems, Inc. Layout2allegro
e) Cadence Design Systems, Inc. Allegro
f) Cadence Design Systems, Inc. Specctra
2. Protel 原理图到Cadence Design Systems, Inc. Capture CIS
在Protel原理图的转化上我们可以利用Protel DXP SP2的新功能来实现。通过这一功能我们可以直接将Protel的原理图转化到Capture CIS中。
这里,我们仅提出几点通过实践总结出来的注意事项。
1) Protel DXP在输出Capture DSN文件的时候,没有输出封装信息,在Capture中我们会看到所以元件的PCB Footprint属性都是空的。这就需要我们手工为元件添加封装信息,这也是整个转化过程中最耗时的工作。在添加封装信息时要注意保持与Protel PCB设计中的封装一致性,以及Cadence在封装命名上的限制。例如一个电阻,在Protel中的封装为AXIAL0.4,在后面介绍的封装库的转化中,将被修改为AXIAL04,这是由于Cadence不允许封装名中出现“.”;再比如DB9接插件的封装在Protel中为DB9RA/F,将会被改为DB9RAF。因此我们在Capture中给元件添加封装信息时,要考虑到这些命名的改变。
2) 一些器件的隐藏管脚或管脚号在转化过程中会丢失,需要在Capture中使用库编辑的方法添加上来。通常易丢失管脚号的器件时电阻电容等离散器件。
3) 在层次化设计中,模块之间连接的总线需要在Capture中命名。即使在Protel中已经在父设计中对这样的总线命名了,还是要在Capture中重新来过,以确保连接。
4) 对于一个封装中有多个部分的器件,要注意修改其位号。例如一个74ls00,在protel中使用其中的两个门,位号为U8A,U8B。这样的信息在转化中会丢失,需要重新添加。
基本上注意到上述几点,借助Protel DXP,我们就可以将Protel的原理图转化到Capture中。进一步推广,这也为现有的Protel原理图符号库转化到Capture提供了一个途径。
3. Protel 封装库的转化
长期使用Protel作PCB设计,我们总会积累一个庞大的经过实践检验的Protel封装库,当设计平台转换时,如何保留这个封装库总是令人头痛。这里,我们将使用Orcad Layout,和免费的Cadence工具Layout2allegro来完成这项工作。
1) 在Protel中将PCB封装放置到一张空的PCB中,并将这个PCB文件用Protel PCB 2.8 ASCII的格式输出出来;
2) 使用Orcad Layout导入这个Protel PCB 2.8 ASCII文件;
3) 使用Layout2allegro将生成的Layout MAX文件转化为Allegro的BRD文件;
4) 接下来,我们使用Allegro的Export功能将封装库,焊盘库输出出来,就完成了Protel封装库到Allegro转化。
4. Protel PCB到Allegro的转化
有了前面两步的基础,我们就可以进行Protel PCB到Allegro的转化了。这个转化过程更确切的说是一个设计重现过程,我们将在Allegro中重现Protel PCB的布局和布线。
1) 将第二步Capture生成的Allegro格式的网表传递到Allegro BRD中,作为我们重现工作的起点;
2) 首先,我们要重现器件布局。在Protel中输出Place & Pick文件,这个文件中包含了完整的器件位置,旋转角度和放置层的信息。我们通过简单的手工修改,就可以将它转化为Allegro的Placement文件。在Allegro中导入这个Placement文件,我们就可以得到布局了。
3) 布线信息的恢复,要使用Specctra作为桥梁。首先,从Protel中输出包含布线信息的Specctra DSN文件。对于这个DSN文件我们要注意以下2点:
4) Protel中的层命名与Allegro中有所区别,要注意使用文本编辑器作适当的修改,例如Protel中顶层底层分别为Toplayer和Bottomlayer,而在Allegro中这两层曾称为TOP和BOTTOM;
5) 注意在Specctra中查看过孔的定义,并添加到Allegro的规则中。在allegro中定义过孔从Specctra中输出布线信息,可以使用session, wires, 和route文件,建议使用route文件,然后将布线信息导入到我们以及重现布局的Allegro PCB中,就完成了我们从Protel PCB到Allegro BRD的转化工作。
Protel到Allegro转化的方法
当今IT产业的发展日新月异,对硬件设备的要求也越来越高,硬件设计师们面临如何设计高速高密度PCB的难题。常言道,工欲善其事,必先利其器,这也是越来越多的设计师放弃低端的PCB设计工具,进而选择Cadence等公司提供的高性能PCB EDA软件的原因。
但是这种变革必然会带来这样或那样的问题。由于接触和使用较早等原因,国内的Protel用户为数众多,他们在选择Cadence高速PCB解决方案的同时,都面临着如何将手头的Protel设计移植到Cadence PCB设计软件中的问题。
在这个过程当中碰到的问题大致可分为两种:一是设计不很复杂,设计师只想借助Cadence CCT的强大自动布线功能完成布线工作;二是设计复杂,设计师需要借助信噪分析工具来对设计进行信噪仿真,设置线网的布线拓扑结构等工作。
对于第一种情况,要做的转化工作比较简单,可以使用Protel或Cadence提供的Protel到CCT的转换工具来完成这一工作。对于第二种情况,要做的工作相对复杂一些,下面将这种转化的方法作一简单的介绍。
Cadence信噪分析工具的分析对象是Cadence Allegro的brd文件,而Allegro可以读入合乎其要求的第三方网表,Protel输出的Telexis格式的网表满足Allegro对第三方网表的要求,这样就可以将Protel文件注入Allegro。
这里有两点请读者注意。首先,Allegro第三方网表在$PACKAGE段不允许有“.”;其次,在Protel中,我们用BasName[0:N]的形式表示总线,用BasName[x]表示总线中的一根信号,Allegro第三方网表中总线中的一根信号的表示形式为Bas NameX,读者可以通过直接修改Protel输出的Telexis网表的方法解决这些问题。
Allegro在注入第三方网表时还需要每种类型器件的设备描述文件Device.txt文件,它的格式如下:
Package: package type
Class: classtype
Pincount: total pinnumber
Pinused: ...
其中常用的是PACKAGE,CLASS,PINCOUNT这几项。PACKAGE描述了器件的封装,但Allegro在注入网表时会用网表中的PACKAGE项而忽略设备描述文件中的这一项。CLASS确定器件的类型,以便信噪分折,Cadence将器件分为IC,IO,DISCRETE三类。PINCOUNT说明器件的管脚数目。对于大多数器件,Device.txt文件中包含有这三项就足够了。
有了第三方网表和设备描述文件,我们就可以将Protel中原理图设计以网表的形式代入到Cadence PCB设计软件中,接下来,设计师就可以借助Cadence PCB软件在高速高密度PCB设计方面的强大功能完成自己的设计。
如果已经在Protel作了PCB布局的工作,Allegro的script功能可以将Protcl中的布局在Allegro中重现出来。在Protel中,设计师可以输出一个Place & Pick文件,这个文件中包含了每个器件的位置、旋转角度和放在PCB顶层还是底层等信息,可以通过这个文件很方便的生成一个Allegro的script文件,在Allegro中执行这个script就能够重现Protel中的布局了,下面给出了完成Place & Pick文件到Allegro Script文件转化的C++代码,笔者使用这段代码,仅用了数分钟就将一个用户有800多个器件的PCB板布局在Allegro重现出来。
FILE *fp1, *fp2;
::AfxMessageBox("hello");
fp1=fopen("pick.txt", "rt");
if (fp1==NULL) ::AfxMessageBox("Can not open the file!!!");
fp2=fopen("place.txt","wt");
if (fp2==NULL) ::AfxMessageBox("Can not create the file!!!");
char refdes[5], Pattern[5];
float midx,midy,refx,refy,padx,pady,rotation;
char tb[1];
char tmp='"';
fprintf(fp2,"%s\n", "# Allegro script");
fprintf(fp2,"%s\n", "version 13.6");
fprintf(fp2,"%s\n", "place refdes");
while (!feof(fp1)) {
fscanf(fp1,"%s", refdes);
fscanf(fp1,"%s", Pattern);
fscanf(fp1,"%f", &midx);
fscanf(fp1,"%f", &midy);
fscanf(fp1,"%f", &refx);
fscanf(fp1,"%f", &refy);
fscanf(fp1,"%f", &padx);
fscanf(fp1,"%f", &pady);
fscanf(fp1,"%s", tb);
fscanf(fp1,"%f", &rotation);
fprintf(fp2, "fillin %c%s%c \n",tmp,refdes,tmp);
if (rotation!=0) {
fprintf(fp2, "rotate\n");
fprintf(fp2, "iangle %f\n", rotation);
};
char yy=tb[0];
if (yy!='T') fprintf(fp2, "pop mirror\n");
fprintf(fp2, "pick %f %f \n", padx,pady);
fprintf(fp2, "next \n");
};
fprintf(fp2, "done");
fclose(fp1);
fclose(fp2);
以上简单介绍了Protel到Allegro转化的方法,希望能对读者的设计工作有所帮助。
评论
查看更多