基于ATL技术原理图解析器的开发
扫描二维码
随时随地手机看文章
实现的原理图解析器使用ATL技术,将解析器包装成一个标准的COM组件。该解析器主要针对Mentor公司的ViewDraw原理图设计工具,可对ViewDraw设计生成的原理图文件在不依赖ViewDraw的条件下进行分析,并将其底层数据进行格式转换和整理归纳,然后以接口形式提供给客户程序使用。
1 原理图通用数据结构
在原理图设计中,现在国外有很多种EDA工具,每种设计工具都有自己的底层数据组织结构。原理图解析器采用了一种通用数据结构来兼容ViewDraw、EDIF200和Concept这3种原理图设计的数据结构。文中在解析器前端采用的数据结构转换模块只针对ViewDraw的底层原理图,解析器在工作时通过数据结构转换模块把ViewDraw的底层原理图数据转换为通用数据结构保存在内存中供解析器使用。
2 COM组件技术与ATL技术简介
COM即组件对象模型,是由Microsoft提出的组件标准,是一种以组件为发布单元的对象模型,它不仅提供了组件之间进行交互的规范,也提供了实现交互的环境。组件之间的接口是组件软件的核心,因为接口是组件之间进行通信的基础。因此,软件组件应该遵循统一的标准,在同一软件中的组件必须使用同样的接口标准才能保证组件之间可以进行通信。COM就是这样一个为大家一致推崇的组件标准。组件对象之间进行交互的环境不依赖于任何特定的语言,所以COM也可以是不同语言协作开发的一种标准。
ATL(Active Template Library)活动模板库,是Visual c++提供的一套基于模板的C++类库,利用这些模板库,可以建立小巧、快捷的COM组件程序。ATL使用了C++中的模板、多继承等高级技术,甚至还用到了STL。在Visual C++的编译环境中,对ATL的支持非常强大,所以采用ATL技术可以方便地实现COM组件的开发,但又不用过多的去考虑COM的底层技术,这样极大地提高了COM组件的开发效率。
3 系统构成
原理图解析器,主要以数据格式转换模块和原理图通用数据结构模块,为系统构成的基础,按通用数据结构格式存储的原理图数据为数据资源,并在ATL技术平台下对这些数据资源进行规划和组织。解析器最终以COM组件的形式向外部客户程序提供服务。解析器提供了21个接口,81个方法,这些接口与原理图的主要构成对象一一对应。整个系统以下方式进行组织和运行的:
(1)数据格式转换模块将原理图进行数据格式转换并以通用数据结构的格式存储于内存中,这个功能主要由工程接口IFvdProj实现;
(2)按照接口的功能需求对原理图的数据资源进行归纳和整理,这里主要处理了器件、模块、管脚、网络(普通网络和总线网络)、网络段、连接等,还有这些物理实体的位置、标识及属性等;
(3)对各种异常情况在组件内部进行了处理,并将相应的错误代码以函数值的形式返回,客户端可以用捕获COM异常的方法来获取这些错误代码。系统结构,如图l所示。
4 原理图解析器接口组织调用关系描述
原理图通用数据结构本身有着庞大复杂的组织结构,如果直接把通用数据结构以COM接口的形式提供给客户端,会使原理图解析器接口规模过大,信息零散且组织规律性较差。因此,必须对数据资源的提供方式进行规划。原理图解析器提供了,如图2所示的数据资源组织方式。
该图列出了原理图解析器的21个接口和主要的调用关系,其中实线箭头表示从原理图组织结构上讲由上层对象调用下层对象,虚线箭头表示由下层对象调用上层对象。以器件和网络为核心介绍接口对数据资源的组织关系。
(1)原理图——网络:由工程接口进入,生成目标原理图的通用数据结构,再调用单页原理图接口,由单页原理图接口中的GetNets()方法或GetAllNets()方法可以获取网络(包括普通网络和总线网络)集接口IFvdNets,通过该接口的Item()方法可以获取单个网络对应的接口。
(2)原理图——器件:由工程接口进入,生成目标原理图的通用数据结构,再调用单页原理图接口,由单页原理图接口中的GetComps()方法或GetAllComps()方法可以获取器件(包括普通器件和模块)集合接口IFvdComps,通过该接口的Item()方法可以获取单个器件对应的器件接口IFvdComp。
(3)由下层对象向上层对象的访问:例如可以通过一个器件管脚的接口IFvdCmpPin来获得该管脚所在的器件接口IFvdComp,而通过接口IFvd—Comp又可获取该器件所在的原理图页的接口IFvdSheet,通过接口IFvdSheet又可访问该原理图页的所有资源。在此需要说明,对于某一页确定的原理图,不管通过哪种途径来获取其对应的接口,这个接口可以提供的原理图资源总是相同的,这也是符合客观实际的。
由以上分析可以看出,原理图解析器的这种接口组织调用关系支持了各种形式的对原理图资源的访问,同时也保持了信息的准确性和完整性。
另外,为了方便用户使用,在原理图接口IF—vdSchs和单页原理图接口IFvdSheet的方法中还提供了器件和网络的查找功能:对于器件支持Refdes(器件的引用属J陛定义)和全路径uID(器件在原理理图中的唯一的标识)查找;对于网络支持Label值查找和全路径UID的查找。
各接口说明如下:
(1)IFvdAur:属性接口,获取属性名、属性值和属性的可见性;
(2)IFvdAttrs:提供一个访问属性集合对象的接口,该属性集合对象内部包含一组属性对象的接口指针;
(3)IFvdBox:外围框接口;
(4)IFvdCmpPin:器件管脚接口,获取管脚所在器件、管脚属性集、管脚连接和管脚相连的symbol的管脚;
(5)IFvdCmpPins:器件管脚集合接口,提供一个访问器件管脚集合对象的接口;
(6)IFvdComp:器件接口,可获取各类子对象和内部属性;
(7)IFvdComps:器件集合接口,提供一个访问器件集合对象的接口;
(8)IFvdConnection:连接接口,可获取连接中的器件管脚、网络和网络段;
(9)IFvdConnections:连接集合接口,提供一个访问连接集合对象的接口;
(10)IFvdLabel:Label接口,获取Label的名字和可见性;
(11)IFvdNet:网络接口,可获得各类子对象及内部属性;
(12)IFvdNets:网络集合接口,提供一个访问网络集合对象的接口;
(13)IFvdSymPin:Symbol管脚接口,可获得Symbol管脚的内部属性;
(14)IFvdSymPins:Symbol管脚集合接口,提供一个访问Symbol管脚集合对象的接口;
(15)IFvdPoint:位置坐标接口,获取位置的坐标值;
(16)IFvdProj:解析原理图工程接口;
(17)IFvdSheet:单页原理图接口,可获取单页原理图中各种对象及搜索器件和网络;
(18)IFvdSch:原理图接口,可获得原理图中单页原理图的页数和原理图对象集合;
(19)IFvdSegment:网络集合接口,可获取网络段属性集合和网络段所属的网络;
(20)IFvdSegments:网络段集合接口,提供一个访问网络段集的接口;
(21)IFvdSymbol:符号接口,获取内部管脚集和属性集。
5 调用方法说明
原理图解析器是基于ATL技术而开发的,是一个符合COM标准的组件,因此在使用时要按照COM组件的使用规范。原理图解析器共有21个接口,其内部分别对应21个COM类。在这21个COM类中,只有原理图工程接口IFvdProj对应的类为可创建类,其余20个接口对应的类均为不可创建类。客户端程序都要以工程接口IFvdProj为入口点,通过创建解析器的组件实例来获取接口IFvdProj的地址指针,其它接口的获取都要从IFvdProj开始,通过接口提供的各种方法来获取。客户端建立组件,通过组件接口访问原理图资源的流程如下:
(1)在系统上注册…原理图解析器组件PST.DLL;
(2)在客户程序中使用“import”预处理指令导入PST.DLL:
(3)创建解析器组件,并获取入口点接口IF
(4)通过接口IFvdProj的方法ParseProj()生成目标原理图的通用数据结构,并用原理图接口IF—vdSchs接收其返回值如下:
6 使用结果示例
下面这段程序统计了一页原理图中当前层的网络数和包括所有底层后的网络数,并且使用了对网络的查找功能:
程序的执行结果,如图3所示。
7 结束语
文中描述了自行开发的基于ATL技术的原理图解析器,介绍了系统的基本构成和接口的组织关系。另外,还对解析器的使用作了详细说明,并在文中最后给出了一个实际使用的示例。原理图解析器的开发得以在不使用国外EDA工具的情况下,方便地访问原理图资源,从而节约了大量的资金,并为国产EDA软件的开发和市场化进行了有益的尝试。