微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 编写属于自己的PCB设计规则检查器

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

时间:11-06 来源:EETCHINA 点击:

本文提出的DRC工具采用C语言和C例程ViewBase库编写,C例程ViewBase库可提供对ViewDraw电路图 数据库进行存取的便捷方法。每个例程均对一个数据项进行存取或在两个数据项之间建立联系。但DRC不能直接运行:DRC应"包装"在一个采用Perl或 UNIX命令解释语言编写的封装程序中。该封装程序具有如下形式:

* 检查如图1所示的PCB设计目录结构是否有效。

* 可以运行后端封装程序(如应用于ViewDraw的pcbfwd)。该程序可检测一些违反规则的设计缺陷(如网路名称的数目和类型特性),而这通常很难采用DRC工具检测。此外,还能赋值给那些尚未赋值的符号参考标志符特性 (如R4)。

* 检测2.0.1节中讨论的输入文件是否存在,并将其注入DRC。

* 找到PCB设计名称并将其注入DRC。

* 将其输出文件的路径和名称注入DRC。

* 建立所需的工具环境变量,如用于ViewDraw和ViewBase的WDIR。

* 调用DRC程序。

* 按需求打印帮助信息。

* 打印用户和运行时间信息。

* 执行后处理。这既可以像修正控制工具检测DRC输出文件那样简单,也可以像主动处理DRC输出文件那样复杂(如从其它数据源添加更多的信息或执行排序操 作)。C或许不是最佳的数据排序或文件分析工具,因为如果按数字顺序排列文件,采用UNIX排序命令更为简单:sort +1n source_file > sorted_file。

DRC开发:main()函数

可以调用DRC程序drc.c,该文件具有两个主要函数:drc_net()和drc_inst()。drc_net()遍 历了全部网路而drc_inst()则遍历所有的元件(符号),这样就能检测任何有违规则的设计缺陷。这两个函数都能产生附属的输出文件,可以参见1.0 节和4.0节。

drc.c首先应当包含全部由C、ViewBase和用户创建的头文件,如stdio.h、viewbase.h和 viewbase.h。现在可以设定drc.c接收输入参数,这样不仅能为输入和输出文件声明变量和文件指针,还可使ViewBase指向 ViewDraw数据库,并创建链接列表和散列表以存取从输入文件读入的信息。下面给出了main()函数的部分代码实现。




当DRC封装程序激活DRC时,将导入输入和输出文件名及PCB设计名 (参见3.0.1节)。数据结构Str_list_elem和Hash_table定义在drc.c包含的头文件中,而GROUPS则是ViewBase数据类型。

下一步,main()函数可以通过检验argc的取值从而确保输入参数数目正确。如果参数值正确,那么将为变量分配正确的输入参数。




此时,main()函数可以初始化ViewBase数据结构,并使ViewBase指针pcb-ptr指向PCB设计。如果该设计存在并有效,那么main()函数应当:

* 打开全部输入文件,读取信息并将信息存储到内部数据结构(如Str_list_elem和Hash_table)中, 然后关闭输入文件。

* 打开所有输出文件以写入信息,这些文件可以是设计规则错误/警告文件,也可以是附属文件。

* 调用drc_net()和drc_inst()函数执行实际操作。

* 关闭所有输出文件。

main()函数中完成上述功能的C和ViewBase代码如下:

[列表3]

这里,iwinit()和iw1level()是ViewBase例程。前者初始化全部载入例程(这也是必须的),而后者则 载入整个PCB设计。为了保证只载入一张电路图,可以调用iw1sheet()例程(本文的DRC工具并不使用该例程)。需要注意的是,正确的设计指针、 文件指针、链接列表、变量名称等必须传入drc_net()和drc_inst()函数:

drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);

drc_inst(pcb_ptr, pcb_name, drc_error, list_legal_pwr_name, ...);

如果设计采用分层结构及不同的器件符号,那么还必须确保DRC能正确处理这些器件。

DRC开发:drc_net()函数

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

[列表4]

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

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top