新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 编写属于自己的PCB设计规则检查器

编写属于自己的PCB设计规则检查器

作者:时间:2010-12-23来源:网络收藏

DRC开发:drc_net()函数

drc_net()在设计中遍历所有网路并检测任何违反设计规则的故障,然后创建附属的输出文件。实现上述功能的基本代码如下:

[列表4]

这里,iggrpnet()和ignetnxt()函数是在设计中检查每个网路的ViewBase 例程。ignetnam()函数也是检查网路名称的ViewBase例程。ViewBase中的数据类型包括NETS、PINS、COMPONENTS、SYMBOLS和ATTRIBUTES。drc_net()函数可检测下述违反设计规则的错误:

* 非法网路名。如果网路名由ViewDraw自动分配,那么将具有如下格式:$#...#N#...#,第一个#...#表示图表编号,第二个#...#则表示网路号。设计人员指定的网路名必须以字母开头,其后的字符数不多于30。

drc_net()函数应调用legal_net_name()函数执行该任务。在UNIX系统中,利用包含在DRC程序中的regexp.h头文件可以极大地简化采用C语言的常规表达式匹配/校验程序。drc_net()应将网路名称变量和违反设计规则的文件指针存储在legal_net_name()函数中,该函数具有如下形式:

[列表5]

后端封装工具pcbfwd也可检测非法网路名,但其功能受限于简单的常规表达式。上述代码可处理任何常规表达式,同样地,如何在运行pcbfwd工具之前或之后找到非法网路名称也需要权衡。对于简单的网路名称,可以使用pcbfwd。

* 网路上的总线竞争也是严重问题。总线竞争有两类:一类是图腾柱输出间的总线竞争,而另一类则是图腾柱与三态输出间的总线竞争。基本代码实现如下所示:

[列表6]

这里,ignetpin()和igpinnnx()函数是在网路上检查每个引脚的ViewBase例程。igpinown()例程返回引脚实例(系主)指针。函数get_inst_attr()、get_pin_attr() 和get_sheet_num()则返回请求实例属性(参考标志符REFDES)、引脚属性(PINTYPE)及引脚实例所在的图表编号。get_pin_attr()函数的基本代码如下:

[列表7]

get_inst_attr()函数的基本代码如下:

[列表8]

get_sheet_num()函数的基本代码如下:

[列表9]

* POWER和GROUND网路中的非法名称。这些名称将与存储在内部数据结构中的信息(如链接列表)进行比较。


* 报告那些具有负载但不具有驱动程序或者具有驱动程序但不具有负载的网路。这可以通过标注网路上每个引脚的类型加以实现。网路应当带有1个输出引脚或多个三态输出引脚及最少一个输入引脚,此外还可提供与网路全部器件和引脚相关的参考标志符和符号。


* 报告那些不带上拉电阻或所带上拉电阻未连接到POWER的所有集电极开路输出。


* 一旦网路的负载超过常规数目(良好的信号完整性条件下限额为8),那么将打印警告信息。

DRC开发:drc_inst()函数

drc_inst()函数与drc_net()函数类似,不同的是,前者遍历了全部电路图表及PCB设计中电路图表上的所有实例,从而检测违反规则的设计缺陷或创建附属的输出文件。其代码实现如下:

[列表10]

上面关于drc_net()函数的讨论提供了充分的C和ViewBase代码示例,这里就不在赘述。下面给出了drc_inst()函数可检测的部分违反规则的设计缺陷:

* 非法或遗漏的符号库混淆。PCB设计中的所有符号必须来自共同符号库,使用来自错误符号库的符号是一个极为常见的错误,尤其是对于那些只依赖于符号进行设计的后端处理工具。


* 遗失符号和/或引脚属性,例如那些描述器件几何结构和引脚类型(in、out、bi和tri)的特性。


* 非法的符号和/或引脚属性。例如,引脚类型可具有IN值,但不包括INPUT值。这将对后端封装工具(如pcbfwd)如何为布线工具(如Allegro)提供信息产生影响。


* 符号上的参考标志符值,尤其是对于串行器件(如电阻、电容和电感)。大多数信号完整性工具需要这些器件以字母R、C和L开头,因此可将这些器件作为串联元件而非离散器件进行分析。类似地,drc_inst()函数可将其值同描述的属性进行对比以保证两者完全匹配。



关键词: PCB 编写

评论


相关推荐

技术专区

关闭