编写自己的PCB数据库翻译器
1.0简介
众所周知,高科技公司的设计环境可能会不时“不稳定”。设计环境甚至设计师经常做出改变。这些变化源于采用更好的技术或公司收购/兼并。如果发生这种情况,可能必须将正在进行的设计从一组工具转移到另一组工具。
假设一家公司已将多个印刷电路板(PCB)设计放置在一个计算机辅助设计(CAD)工具中何时必须更改该工具。有两种选择。首先,更换新CAD工具中的所有PCB设计,但每个设计至少需要3周时间。其次,编写一个翻译器将现有的展示位置文件转换为新工具的文件。最多需要几天的时间才能使这个翻译器正确运行,每个设计只运行几秒钟。
如果有5个PCB,第一个选项至少需要15周。有了翻译,那个时间减少到1周或更短。第二种选择的优势和需求是显而易见的。不幸的是,这个翻译器可能不适用于您的特定CAD工具。
在本文中,我们提出了一种使用编程语言Perl [1]编写PCB布局数据库转换器的系统方法。另外,我们提供一些代码来说明细节。如果不使用特定的CAD工具作为示例,这些主题将难以讨论。因此,选择Mentor Graphics Corp.的BoardStation和Cadence Design Systems的Allegro。这两种工具都可以放置和布线PCB设计。我们的翻译器将BoardStation的放置数据库转换为Allegro的放置数据库,但本文中介绍的原理和技术适用于任何其他两个CAD工具。
我们的翻译人员必须执行以下三个主要任务:
对于我们的讨论,BoardStation表面贴装几何使用引脚1作为原点(不是行业标准,但有些公司会这样做)。 Allegro使用几何中心代替。使用此信息,翻译人员必须正确翻译几何体的放置位置。
如果BoardStation几何体的方向与其Allegro对应物的方向不同,则翻译者必须正确翻译方向。
翻译人员必须正确地将BoardStation展示位置文件的格式转换为Allegro展示位置文件的格式。 BoardStation的放置文件称为comps.comps _ ##和job_parts,其中_ ##是版本号,例如_01。 Allegro的放置文件名为place_txt.txt。
最后,有关为什么选择Perl来编写我们的翻译器的说法,尽管任何其他完整的计算机语言也可以完成这项工作。 Perl最初设计用于文本解析和处理。这正是我们工作的主要部分,后面会很明显。
2.0开始翻译
首先,我们的翻译需要3个输入文件(除了BoardStation和Allegro放置文件)。它们可能已存在于公司PCB设计数据库中,或者可能必须手工创建。以下是作者选择文件名的列表。请注意,bs_指的是BoardStation,al_指的是Allegro,bs_al_指的是这两个工具。
bs_insertion.file:它必须包含每个BoardStation几何名称以及它是否是表面贴装。对于表面贴装,它必须指定从原点(引脚1)到中心的以mils为单位的X偏移和Y偏移。这些信息非常重要,因为正如上面第1.0节所述,我们已选择几何中心作为Allegro的原点。 bs_insertion.file可以简单如下(#表示注释):类型1表示表面安装,类型2表示非表面安装。
非表面贴装几何体可以是通孔或分立或连接器组件。通常,几何体不能同时是表面贴装和非表面贴装。但是,如果组件具有两个版本并且它们在同一设计中使用,则必须使用两个不同的几何名称。请注意,几何名称中的大写或小写对某些CAD工具很重要。
通常,与bs_insertion.file类似或相同的数据库应该已由公司维护,并且不需要创建此文件用手。但它可能包含的信息多于我们的翻译器所需的信息,例如轴向组件的旋转,宽度和高度信息。在这种情况下,翻译器应该不解析这种数据。
bs_insertion.file由翻译器解析并存储到两个内部关联数组中,可以调用$ bs_insertion_type和$ matrix。 $ bs_insertion_type中每个条目的键是BoardStation几何名称,值是组件类型,它是1或2. $ matrix的键可以是字符串geometry_name = xoffset或geometry_name = yoffset,值是偏移值。
例如,对于上面给出的几何名称100AMPTCH,条目$ matrix {100AMPTCH = xoffset}存储371.2,条目$ matrix {100AMPTCH = yoffset}存储350.0。稍后将扩展$ matrix数组以存储更多信息。
bs_al_list.file:它包含所有BoardStation几何及其Allegro对应项。它可能如下所示(#表示注释):
两个BoardStation几何图形可能与相同的Allegro几何图形匹配。同样,几何名称中的大写或小写也适用于某些CAD工具。
bs_al_list.file通常是手工创建的。它由转换器解析并存储到内部关联数组中,可以称为$ bs_al_list。其关键是BoardStation几何名称,其值为Allegro几何名称。对于上面给出的示例,bs_al_list {7827-150HT}存储CONN-SMD_2X25。
al_orientation.file:它包含所有Allegro几何及其默认方向。为了简化操作,请为每个方向分配一个代码,如表1所示,对于特定应用程序可能完成也可能不完整。
al_orientation.file通常是手工创建的,它可能如下所示(#表示评论):
该文件由翻译器解析并存储到内部关联数组中,可以称为$ al_orientation。它的关键是Allegro几何名称,它的值是一个方向代码。对于上面给出的示例,al_orientation {FIDUCIAL40}存储0.同样,几何名称中的大写或小写对某些CAD工具很重要。
表格1 ?? Allegro几何的方向代码
现在我们可以开始系统地开发翻译器了。正如上面第1.0节中简要提到的,有两个步骤可以完成。首先,我们将解析BoardStation的展示位置文件。其次,我们将使用该信息生成Allegro的放置文件。
3.0处理BoardStation的job_parts文件
如前所述,BoardStation有两个放置位置文件,即job_parts和comps.comps _ ##。本节讨论我们的翻译器如何使用job_parts来查找和计算每个BoardStation几何体的方向。结果存储在名为$ bs_orientation的内部关联数组中。此外,可以选择将此结果写入文件,以便我们可以手动检查翻译器是否正确计算了这些方向。
job_parts唯一列出PCB设计中的每个BoardStation几何体及其物理信息,例如它的名称和引脚(包括引脚号和位置)。每个几何条目如下所示:
$$ create_component(“BoardStation_Geometry_Name”);
与$$ create_component()条目关联的每个pin条目如下所示:
$$属性( “COMPONENT_PIN_DEFINITION”,“25”,, @ scale ,, [6.175,-8.89]);
其中“25”是引脚编号,[6.175,-8.89]是引脚位置,单位为英寸。 2引脚几何结构(如电容)具有以下3个条目:
$$ create_component(“CC1206”);
$$属性(“COMPONENT_PIN_DEFINITION” ,“1”,, @ scale ,, [-0.067,0.0]);
$$属性(“COMPONENT_PIN_DEFINITION”,“2”,@ scale ,, [0.067,0.0] );
1针几何图形,例如基准点,有以下两个条目:
$$ create_component(“FIDUCIAL1”);
$$属性(“COMPONENT_PIN_DEFINITION”,“1”,@ scale,[0.0,0.0]);
请注意,$$ create_component()条目始终位于其关联的$$属性()条目之前。
我们的转换程序在每个BoardStation几何名称中进行分析。接下来,它通过在$ bs_insertion_type内部关联数组中查找来确定此几何是否是表面贴装(参见上面的第2.0节)。如果是,请将其存储在名为$ sm_array的新内部关联数组中。如果没有,请将其存储在另一个名为$ nsm_array的新内部关联数组中。
还会解析BoardStation几何体的每个引脚以确定以下内容:
如果引脚number是纯数字且为1或2或3,将其X和Y坐标存储在新的$ pin_1_2_3内部关联数组中。保存3个引脚,以便转换器稍后可以确定哪个几何结构为2引脚。
对于每个数字纯数字的引脚,确定最小X,最大X,最小Y和最大Y坐标到目前为止,将此信息存储到$ matrix内部关联数组中(参见上面的第2.0节)。
如果引脚号不是纯数字,例如A1或B1,则不要执行上面的两个子弹。相反,将此BoardStation几何图形放入新的$ odd_pin关联数组中,并停止查找其引脚。这是因为传统意义上无法确定哪个引脚是引脚1,因为我们可以在同一几何结构上具有A1,B1和C1引脚。下面将进一步讨论这种特殊情况。
执行上述操作的Perl代码概述如下:
单击此处查看代码示例
总而言之,对于每个BoardStation几何体,$ matrix内部关联数组具有键(字符串)和下面表2中给出的值。在此表中,键的geometry_name部分是BoardStation中使用的实际几何名称,对于每个唯一组件它是唯一的。
表2 ??每个唯一BoardStation几何体的$矩阵条目
接下来,我们使用存储在这些内部关联数组中的信息来确定pin1的位置,假设每个BoardStation几何体上的针都是逆时针计数的。它可以是表3中列出的四个中的一个。然后,此信息用于确定几何体的方向,其代码在表1中给出。每个BoardStation几何体及其计算的方向随后存储在新的内部关联数组中$ bs_orientation。
表3 ?? BoardStation几何体上pin1的位置
目前,有必要讨论一些无法轻松处理的特殊BoardStation几何图形。它们的方向代码(表1中给出)必须在翻译器中进行硬编码。下面将讨论3种情况。
如前所述,如果几何体不具有纯数字引脚数(例如A1或B1或C1而不仅仅是1),那么就不可能找到哪个引脚是引脚1,并且转换器无法计算几何方向。假设取向代码为10(硬编码)。我们还可以查看此几何图形并找到其确切方向。如果看到这些几何,则由翻译器内部存储在内部关联数组$ odd_pin中。
对于某些几何,引脚1和2的X坐标不相等,它们的Y坐标也不相等,例如如图1所示的连接器。在这种情况下,翻译器不能轻易地计算几何方向,并且假定方向代码为10。我们还可以查看这个几何体并找到它的确切方向。
图1 - Pin坐标不相等
如果是过时的几何体错误地使用(可能发生),不存储在任何公司数据库中,首先查看它,然后在翻译器中硬编码其方向代码。
在上面的前两种情况中,方向代码假定为10因为大多数几何都是这样放置的。所以这是最安全的赌注,但仍然是赌注。由于这个原因和其他原因,翻译可能并不完全适用于少数组件。但正如5.0节将讨论的那样,很容易纠正这些微小的不匹配。有些无关紧要,甚至可以单独留下。
此时,我们的翻译器将简单地处理$ sm_array,$ nsm_array和$ odd_pin内部关联数组,以创建$ bs_orientation内部关联数组。我们还(可选)将此结果写入bs_orientation.file文件。首先,打开此文件进行如下编写:
处理$ odd_pin内部关联数组的Perl代码概述很简单:
处理$ sm_array内部关联数组的Perl代码概述如下:
进一步处理$ sm_array中的每个“普通”BoardStation几何体。首先,找到引脚1,2和3的几何中心和位置(2引脚几何结构没有引脚3)。 Perl代码的概述是:
接下来,检查引脚1和2的X坐标在这个几何上是否相等(情况2)上面讨论过)。同时检查这两个引脚的Y坐标。
现在检查引脚1和2是否具有相同的X坐标。如果是,请执行以下操作。首先,确定引脚1是否位于几何结构的底部,引脚1和引脚2是否彼此相对,包括2引脚几何结构(例如垂直放置的电容器或电阻器):
其次,确定引脚1是否位于几何结构的顶部,引脚1和2是否彼此相对,包括2引脚几何形状:
最后,确定引脚1是否位于几何体的左侧或右侧(请记住引脚是逆时针计数的):
单击此处查看代码示例
现在检查引脚1和2是否具有相同的Y坐标。如果是,请采取适当的措施。到目前为止已经提供了大量的Perl代码示例,因此我们在此不再重复。相反,我们将简要讨论这个过程。首先,确定引脚1是否位于几何结构的左侧,引脚1和2是否彼此面对。如果是,则方向代码可以是1或2或3.
其次,确定引脚1是否位于几何体的右侧,引脚1和2是否彼此面对。如果是,则方向代码可以是4或5或6.第三,确定引脚1的X坐标是否位于几何体的顶部。如果是,则方向代码可以是7或8或9.第四,确定引脚1是否在底部。如果是,则方向代码可以是10或11或12.
$ nsm_array内部关联数组的处理方式应与$ sm_array相同。
此时,可以读取bs_orientation.file文件(如果已创建)以确保计算的BoardStation几何方向正确。如果没有,翻译人员需要进行微调。
4.0生成Allegro的place_txt.txt展示位置文件
BoardStation的展示位置文件(也是称为组件文件)称为comps.comps _ ##,每个条目的格式都非常简单:
Ref_des是参考标号用于PCB原理图。 Symbol_name是原理图符号的名称。 Board_location是引脚1在10纳米中的位置,它必须转换为Allegro放置文件中表面贴装元件的几何中心,如前所述。此外,10纳米单位必须转换成Allegro的密耳。
Board_side表示该组件放置在电路板的哪一侧(1:顶部,2:底部)。旋转指示在放置期间该组件是否已旋转(90度或180度或270度)。对于BoardStation和Allegro,旋转必须始终为逆时针。
Allegro的place_txt.txt放置文件具有以下格式:
每列的含义,从U115的第2行开始,在下面的表4中说明。
表4 ?? Allegro的展示位置文件的含义
现在,我们的翻译人员可以将comps.comps _ ##转换为place_txt.txt。执行此操作的Perl代码的一部分在下面给出并且不言自明:
单击此处查看代码示例
如果转换程序运行时没有任何错误,则Allegro放置文件place_txt .txt已创建。现在您可以尝试将此文件读入Allegro以检查其格式。如果Allegro标记任何格式错误,则需要修改我们的翻译器。
5.0最终评论
BoardStation和Allegro是两个非常不同的工具,对于某些特殊情况,他们的展示位置文件之间没有直接的翻译。上面的3.0节列出了其中一些。因此,对于少数组件,转换可能不准确。
例如,如果组件的旋转不是100%正确,那么它可以在Allegro中手动旋转(例如微处理器)或单独使用(如电容器)。一些组件也可能与其邻居部分重叠。同样,这可以在Allegro中手动纠正。平均而言,需要一个小时或更短的时间来手动检查Allegro放置文件是否存在这些问题。
6.0参考文献
1。 Larry Wall,Tom Christiansen,Jon Orwant,“Programming Perl”,第3版,O'Reilly& Associates,Inc.,2000
2。 Luke L. Chang,“编写自己的PCB设计规则检查器”,EEdesign,2003年9月
Luke L. Chang是英特尔存储元件部门的高级验证负责人(Hudson) , 嘛)。在此之前,他曾在多家高科技公司担任过工程和管理职位,涉及硬件设计/验证和电子设计自动化领域。
-
pcb
+关注
关注
4316文章
22959浏览量
395875 -
数据库
+关注
关注
7文章
3754浏览量
64253 -
华强pcb线路板打样
+关注
关注
5文章
14629浏览量
42962
发布评论请先 登录
相关推荐
评论