-
-
goodidea 发表于 2006/7/13 14:54:04
作者:北工学院 常青 张卡华 文章来源:电子技术应用12楼 回复本楼
摘要:介绍了VC和Matlab通过COM与DDE技术在组态软件开发中的应用方法,发挥了Matlab在数值计算中的强大功能和InTouch在人机对话界面开发中的独特效果。
关键词:Matlab lnTouch COM DDE 组态软件
随着各类嵌入式系统和现场总线的蓬勃发展,组态软件越来越成为工业自动化系统中的灵魂。它在实时数据存储、检索和图形显示及人机对话等方面都具有独特的效果。但是组态软件的脚本语言非常简单,在数据处理、算法实现等方面相对薄弱。这从一定程度上限制了组态软件在工业自动化中的应用。
Matlab作为一款优秀的数值计算软件,提供了应用于信号处理、工业控制、应用数学等各个领域的工具箱,但是它对运行环境的要求非常高,而且占用了庞大的系统资源,生成实用的人机对话界面的能力不强。
为了开发出具有友好人机对话界面、实现多种控制算法并完成实时数字信号处理的组态软件,可以使用Matlab进行数值计算,将处理后的数据传输给组态软件进行人机对话界面开发,以此发挥它们各自的优点。这样,开发软件之间的数据交换和处理就成为问题的关键。
本文根据Matlab和应用非常广泛的组态软件In—Touch提供的编程接口和数据通信协议,提出了一种使用DDE和COM技术进行组态软件开发的方法。
1 基本思路与系统构架
动态数据交换(DDE)是一个由Microsoft开发的通信协议。该协议允许在Windows环境中的应用程序之间彼此发送/接收数据和指令。它在两个同时运行的应用程序之间实现客户服务器关系。服务器应用程序提供数据并接收对这些数据感兴趣的其它应用程序的请求。发请求的应用程序叫做客户。InTouch可以利用Microsoft的DDE与其他Windows程序通信,并可同时作为客户或服务器程序。
Matlab提供了多种混合编程的方法,但是这些方法大都不能脱离Matlab的运行环境,也不方便其它应用程序调用。为了摆脱Matlab运行环境,并在其基础上进行功能模块设计,方便其它应用程序调用,MathWorks公司推荐使用COM builder在Matlab环境下开发COM。COM是Component Object Module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准就可以调用它。
这样,可以使用Matlab开发COM组件,在VC下开发DDE服务程序,使其与InTouch进行数据通信,而这个DDE服务程序调用Matlab开发的COM进行数值处理和算法实现。在实际工业自动化的组态软件开发中,可以使用VC进行数据的采集、命令的发送和复杂的流程控制;使用Matlab下开发的COM完成复杂的算法实现和数字信号处理编程;在InTouch下实现人机对话界面并接收使用者的命令。具体的系统构架如图1所示。
2 应用实现
Windows DDE功能应用的核心是DDE事务管理库(DDEML),它负责管理Windows操作系统下应用程序间的DDE会话和通信,还向用户提供了一系列的应用程序接口API函数。
DDE实现程序间的通信是通过三个标识约定的:
应用程序名(Application):进行DDE对话双方的名称;
主题(Topic):被讨论的数据域;
项目(Item):被讨论的特定数据对象。
在DDE服务程序中首先使用DdeInitialize进行初始化,然后调用DdeCreateStringHandle建立应用程序名、主题和项目等标识的句柄,再通过DdeNameService在操作系统中注册DDE服务程序的名字。根据这些句柄,客户程序就可以使用它提供的DDE服务了。在VC++中的程序实现如下:
#include……
DWORD idInstc=0,iData;//iDate是项目对应的数据
HSZ hszSvr,hszTopic,hszIrem;
DdeInitialize(&idInst,(PFNCALLBACK)DdeCallback,CBF_
FAIL_EXECUTES┃CBF_SKIP_ALLNOTIFICATIONS,0L);
//建立应用程序名、主题和项目等标识的句柄
hszSvr=DdeCreateStringHandle(idInst,“DDEApp”,0);
hszTopic=DdeCreateStringHandle(idInst,“DDEAppTopic”,0);
hszItem=DdeCreateStringHandle(idInst,“DDEApphem”,0);
//在操作系统中注册该DDE服务
DdeNameService(idInst,hszSvr,0L,DNS_REGISTER);
……
DDE服务程序的核心部分是一个回调函数,它处理所有DDE消息及相应数据请求。DDE服务程序回调函数的代码如下:
HDDEDATA CALLBACK DdeCallback (WORD usType,WORD usFmt,HCONV hConv,HSZ hsz1,HSZ hsz2, HDDE—DATA hData,DWORD 1Datal,DWORD 1Data2){CHAR sz[5]
if(usType==XTYP_CONNECT){ //得到连接请求return((HDDEDATA)TRUE);
}
//校验主题、项目的句柄及数据格式
if(hszl==hszTopic && hsz2==hszItem && usFmt==CF_TEXT){
if(usType==XTYP_REQUEST‖usType==XTYP_ ADVREQ){//得到数据请求
_itoa(iData,sz,10);//将数据转换为文本格式
return DdeCreateDataHandle(idInst,(LPBYTE)sz,
strlen(s2)十1,0L,hszItem,CP_TEXT,0);
}
if(usType==XTYP_POKE){//得到客户端发送来的数据
DdeGetData(hData,(LPBYTE)sz,strlen(sz)十1,0L);
iData=atoi(sz); //保存数据
DdePostAdvise(idInst,hszTopic,hszItem);
return((HDDEDATA)DDE_FACK);
}
}
return 0;
}
在任何需要向DDE客户端发送数据时使用Dde-PostAdvise触发XTYP_ADVREQ,从而达到向客户程序发送数据的目的。
在InTouch的标记名字典中定义I/O类型变量,以此调用DDE服务程序发送过来的数据。在声明I/O类型的访问名时只要确定DDE服务程序的应用程序名、主题名和项目名即可。
组态软件中的数值计算和实时数字信号处理部分在Matlab中实现并以COM组件的方式提供。这个部分的关键是Matlab下M文件的编写、COM组件的形成和DDE服务程序中对COM的调用。
COM组件实际是一个C十十类,但接口都是纯虚类,组件从接口派生而来。在Matlab下通过键人comtool启动combuilder,根据提示设置类的名字和一些其它选项。为这个类添加方法(methods)通过向工程中添加M文件实现。这个M文件不是脚本文件而是函数文件。添加属性(Properties)则是在M文件中通过Global定义。至于事件(events)则需要用到语法%#event。举例说明如下:
%mymethod.m文件源代码 %myevent.m文件源代码
function mymethod function myevent
global mValue; %#event
……
将以上两个文件添加到这个工程中则添加了一个方法mymethod、属性mValue和事件myevent。通过编译生成一个d11文件。这个dll就是COM的发布形式。
在VC中调用此COM与调用其它COM是一样的,所不同的是需要在VC的工程中包含Matlab提供的文件,具体操作是在Include files中添加\externclude\和\externn\cpp,在Library files中添加\extern\win32和\extern\win32\Mi-crosoft。
Combuilder也提供了COM组件的打包工具,它生成一个自解压文件,通过它实现必要的DLL安装和COM注册。
在DDE服务程序中调用COM组件进行数值计算和信号处理并向InTouch提供DDE服务,在InTouch中通过调用DDE传来的数据充实人机对话界面并接收操作者的命令以完成系统的功能。
3 实际开发中细节问题的考虑
Matlab下的COM组件开发是Matlab6.5才有的功能,早期的版本并没有这个模块。另外,并不是所有的Matlab工具箱都支持COM编译,这时可以考虑使用其它的函数代替,也可以使用DDE调用Matlab函数,但是这样不能脱离Matlsb的运行环境。
在组态软件中使用DDE和COM技术可以充分发挥Matlab在数值计算中的功能和InTouch在人机对话界面开发中的独特效果,适用于功能模块设计和大规模组态软件的开发。
引用 goodidea 2006/7/13 14:54:04 发表于12楼的内容
-
-
goodidea 发表于 2006/7/13 14:54:34
一、中周变压器的检测:13楼 回复本楼
A、将万用表拨至R×1挡,按照中周变压器的各绕组引脚排列规律,逐一检查各绕组的通断情况,进而判断其是否正常。
B、检测绝缘性能:将万用表置于R×10k挡,做如下几种状态测试:
(1)初级绕组与次级绕组之间的电阻值;
(2)初级绕组与外壳之间的电阻值;
(3)次级绕组与外壳之间的电阻值。
上述测试结果分出现三种情况:
(1)阻值为无穷大:正常;
(2)阻值为零:有短路性故障;
(3)阻值小于无穷大,但大于零:有漏电性故障。
二、电源变压器的检测:
A、通过观察变压器的外貌来检查其是否有明显异常现象。如线圈引线是否断裂,脱焊,绝缘材料是否有烧焦痕迹,铁心紧固螺杆是否有松动,硅钢片有无锈蚀,绕组线圈是否有外露等。
B、绝缘性测试。用万用表R×10k挡分别测量铁心与初级,初级与各次级、铁心与各次级、静电屏蔽层与衩次级、次级各绕组间的电阻值,万用表指针均应指在无穷大位置不动。否则,说明变压器绝缘性能不良。
C、线圈通断的检测。将万用表置于R×1挡,测试中,若某个绕组的电阻值为无穷大,则说明此绕组有断路性故障。
D、判别初、次级线圈。电源变压器初级引脚和次级引脚一般都是分别从两侧引出的,并且初级绕组多标有220V字样,次级绕组则标出额定电压值,如15V、24V、35V等。再根据这些标记进行识别。
E、空载电流的检测。
(1)直接测量法。将次级所有绕组全部开路,把万用表置于交流电流挡(500mA,串入初级绕组。当初级绕组的插头插入220V交流市电时,万用表所指示的便是空载电流值。此值不应大于变压器满载电流的10%~20%。一般常见电子设备电源变压器的正常空载电流应在100mA左右。如果超出太多,则说明变压器有短路性故障。
(2)间接测量法。在变压器的初级绕组中串联一个10/5W的电阻,次级仍全部空载。把万用表拨至交流电压挡。加电后,用两表笔测出电阻R两端的电压降U,然后用欧姆定律算出空载电流I空,即I空=U/R。
F、空载电压的检测。将电源变压器的初级接220V市电,用万用表交流电压接依次测出各绕组的空载电压值(U21、U22、U23、U24)应符合要求值,允许误差范围一般为:高压绕组≤±10%,低压绕组≤±5%,带中心抽头的两组对称绕组的电压差应≤±2%。
G、一般小功率电源变压器允许温升为40℃~50℃,如果所用绝缘材料质量较好,允许温升还可提高。
H、检测判别各绕组的同名端。在使用电源变压器时,有时为了得到所需的次级电压,可将两个或多个次级绕组串联起来使用。采用串联法使用电源变压器时,参加串联的各绕组的同名端必须正确连接,不能搞错。否则,变压器不能正常工作。I.电源变压器短路性故障的综合检测判别。电源变压器发生短路性故障后的主要症状是发热严重和次级绕组输出电压失常。通常,线圈内部匝间短路点越多,短路电流就越大,而变压器发热就越严重。检测判断电源变压器是否有短路性故障的简单方法是测量空载电流(测试方法前面已经介绍)。存在短路故障的变压器,其空载电流值将远大于满载电流的10%。当短路严重时,变压器在空载加电后几十秒钟之内便会迅速发热,用手触摸铁心会有烫手的感觉。此时不用测量空载电流便可断定变压器有短路点存在。
引用 goodidea 2006/7/13 14:54:34 发表于13楼的内容
-
-
goodidea 发表于 2006/7/13 14:55:03
1、固定电阻器的检测: A将两表笔(不分正负)分别与电阻的两端引脚相接即可测出实际电阻值。为了提高测量精度,应根据被测电阻标称值的大小来选择量程。由于欧姆挡刻度的非线性关系,它的中间一段分度较为精细,因此应使指针指示值尽可能落到刻度的中段位置,即全刻度起始的20%~80%弧度范围内,以使测量更准确。根据电阻误差等级不同。读数与标称阻值之间分别允许有±5%、±10%或±20%的误差。如不相符,超出误差范围,则说明该电阻值变值了。14楼 回复本楼
B注意:测试时,特别是在测几十kΩ以上阻值的电阻时,手不要触及表笔和电阻的导电部分;被检测的电阻从电路中焊下来,至少要焊开一个头,以免电路中的其他元件对测试产生影响,造成测量误差;色环电阻的阻值虽然能以色环标志来确定,但在使用时最好还是用万用表测试一下其实际阻值。
2、水泥电阻的检测:
检测水泥电阻的方法及注意事项与检测普通固定电阻完全相同。
3、熔断电阻器的检测:
在电路中,当熔断电阻器熔断开路后,可根据经验作出判断:若发现熔断电阻器表面发黑或烧焦,可断定是其负荷过重,通过它的电流超过额定值很多倍所致;如果其表面无任何痕迹而开路,则表明流过的电流刚好等于或稍大于其额定熔断值。对于表面无任何痕迹的熔断电阻器好坏的判断,可借助万用表R×1挡来测量,为保证测量准确,应将熔断电阻器一端从电路上焊下。若测得的阻值为无穷大,则说明此熔断电阻器已失效开路,若测得的阻值与标称值相差甚远,表明电阻变值,也不宜再使用。在维修实践中发现,也有少数熔断电阻器在电路中被击穿短路的现象,检测时也应予以注意。
4、电位器的检测:
检查电位器时,首先要转动旋柄,看看旋柄转动是否平滑,开关是否灵活,开关通、断时“喀哒”声是否清脆,并听一听电位器内部接触点和电阻体摩擦的声音,如有“沙沙”声,说明质量不好。用万用表测试时,先根据被测电位器阻值的大小,选择好万用表的合适电阻挡位,然后可按下述方法进行检测。
A用万用表的欧姆挡测“1”、“2”两端,其读数应为电位器的标称阻值,如万用表的指针不动或阻值相差很多,则表明该电位器已损坏。
B检测电位器的活动臂与电阻片的接触是否良好。用万用表的欧姆档测“1”、“2”(或“2”、“3”)两端,将电位器的转轴按逆时针方向旋至接近“关”的位置,这时电阻值越小越好。再顺时针慢慢旋转轴柄,电阻值应逐渐增大,表头中的指针应平稳移动。当轴柄旋至极端位置“3”时,阻值应接近电位器的标称值。如万用表的指针在电位器的轴柄转动过程中有跳动现象,说明活动触点有接触不良的故障。
5、正温度系数热敏电阻(PTC)的检测:
检测时,用万用表R×1挡,具体可分两步操作:
A常温检测(室内温度接近25℃):将两表笔接触PTC热敏电阻的两引脚测出其实际阻值,并与标称阻值相对比,二者相差在±2Ω内即为正常。实际阻值若与标称阻值相差过大,则说明其性能不良或已损坏。
B加温检测:在常温测试正常的基础上,即可进行第二步测试—加温检测,将一热源(例如电烙铁)靠近PTC热敏电阻对其加热,同时用万用表监测其电阻值是否随温度的升高而增大,如是,说明热敏电阻正常,若阻值无变化,说明其性能变劣,不能继续使用。注意不要使热源与PTC热敏电阻靠得过近或直接接触热敏电阻,以防止将其烫坏。
6、负温度系数热敏电阻(NTC)的检测:
(1)测量标称电阻值Rt:用万用表测量NTC热敏电阻的方法与测量普通固定电阻的方法相同,即根据NTC热敏电阻的标称阻值选择合适的电阻挡可直接测出Rt的实际值。但因NTC热敏电阻对温度很敏感,故测试时应注意以下几点:ARt是生产厂家在环境温度为25℃时所测得的,所以用万用表测量Rt时,亦应在环境温度接近25℃时进行,以保证测试的可信度。B测量功率不得超过规定值,以免电流热效应引起测量误差。C注意正确操作。测试时,不要用手捏住热敏电阻体,以防止人体温度对测试产生影响。
(2)估测温度系数αt:先在室温t1下测得电阻值Rt1,再用电烙铁作热源,靠近热敏电阻Rt,测出电阻值RT2,同时用温度计测出此时热敏电阻RT表面的平均温度t2再进行计算。
7、压敏电阻的检测:
用万用表的R×1k挡测量压敏电阻两引脚之间的正、反向绝缘电阻,均为无穷大,否则,说明漏电流大。若所测电阻很小,说明压敏电阻已损坏,不能使用。
8、光敏电阻的检测:
A用一黑纸片将光敏电阻的透光窗口遮住,此时万用表的指针基本保持不动,阻值接近无穷大。此值越大说明光敏电阻性能越好。若此值很小或接近为零,说明光敏电阻已烧穿损坏,不能再继续使用。
B将一光源对准光敏电阻的透光窗口,此时万用表的指针应有较大幅度的摆动,阻值明显减些此值越小说明光敏电阻性能越好。若此值很大甚至无穷大,表明光敏电阻内部开路损坏,也不能再继续使用。
C将光敏电阻透光窗口对准入射光线,用小黑纸片在光敏电阻的遮光窗上部晃动,使其间断受光,此时万用表指针应随黑纸片的晃动而左右摆动。如果万用表指针始终停在某一位置不随纸片晃动而摆动,说明光敏电阻的光敏材料已经损坏。
引用 goodidea 2006/7/13 14:55:03 发表于14楼的内容
-
-
goodidea 发表于 2006/7/13 14:55:49
间歇性内存故障处理起来可能会非常复杂。这些故障的根源可能是一种原因或多种不同原因的组合,包括BIOS错误、协议错误、信号完整性问题、硬件问题、内存或其它子系统问题。 尽管有些团队能够迅速解决内存调试问题,但更多团队在遇到间歇性故障时会束手无策。15楼 回复本楼
本文概括介绍了间歇性内存故障的调试方法。文中通过多个实例,说明了如何才能找出引起内存问题的不同原因。对于经常遇到系统未能引导或内存测试失败的工程师来说,也可从本文介绍的调试方法中受益。
对于间歇性内存故障,查找其根本原因的方法分成三步:
1) 确定故障是否可以重复。试着复制产生故障的条件。重复故障通常可以有效地查看故障的特点。
2) 使用普通探头或插槽式分析探头把内存总线连接到逻辑分析仪上,以迅速查看:
• 整个DDRII总线的定时关系
• 百万分之几概率的误码
• 协议错误
• 时钟质量
3) 用高速示波器及高带宽探头,在信号的接收端进行参数测量。。
• 对于写入内存的数据,在SDRAM上进行探测
• 对于从内存读出的数据,在内存控制器上进行探测
第1步
在试图重建故障条件时,记住故障的根本原因可能来自未直接连接到内存上的子系统或子应用。局域网接入、子系统上电顺序、进入或退出睡眠模式以及电源周期都是在评估内存故障时需要考虑的重要因素。
各种子系统、不同工作模式和多种循环导致的串扰和资源冲突一直是引起许多间歇性内存故障的根本原因。
在某个特殊的测试或设置条件下隔离问题,可以使问题变的比较容易。例如,在某项测试过程中发生的故障可能会指向软件程序或信号完整性问题,如串扰或码间干扰。对可重复故障,用户可以在故障条件下进行多次测量。
重复故障条件说起来容易,但做起来要难得多。需要考虑的细节包括:
软件
• 是否有错误记录?
• BIOS、操作系统和应用程序在测试时运行
环境
• 在系统出现故障时室内温度是多少?
• 在故障期间,被测系统的空气流动情况。
• 系统供电是否在技术规范之内?
硬件
• 采用同一设计的其他系统是否已经通过验证测试?
• 其它系统也有故障?还是只有这个系统发生这种故障?
• 故障系统的电路板、DIMM、处理器等修订版本。
• 故障系统与工作系统有什么区别。
• 制造中最新的元器件变化?
如果条件可以重复,那么在这些条件下进行测试;如果条件不能重复,那么选择最好的内存进行测试,并按顺序改变测试条件(如温度极限和电源极限)。
第2步
在调试DDR系统时,逻辑分析有效地补充了高速示波器的限制。使用DDR探头或插槽分析探头进行逻辑分析,可以迅速查看系统中的问题区域。通过使用逻辑分析工具迅速缩小问题区域,然后使用高性能示波器检查可疑的信号,工程师可以节约大量的时间。
逻辑分析仪系统提供了:
• 通过简单的连接,对全部DDR总线进行64K深的高分辨率定时分析。64k深度信号可以从触发前的100%调节到触发后的100%。
• 独特的高分辨率眼图,可以识别百万分之几概率的故障信号。
• 可以从搜索功能中自动设置全局标尺(最多1024个)。
• 着色滤波功能可以识别轨迹的码型,协助观察内存访问情况。
• 协议解码转换命令,用于进行功能性验证。
• 全局标尺可以跟踪波形和列表窗口。
• 对于使用同一时钟的所有信号,使用眼图测量可以一目了然地查看所有信号。
图1: DDRII激活时的高分辨率定时轨迹。
图1中感兴趣的测量包括:
• 时钟周期测量。(图1中的系统是DDRII_400,时钟周期是5ns。)
• 使用标尺测量数据有效窗口,或使用鼠标在轨迹上移动,确定转换宽度的分布情况。
• 从有效命令(指令时钟 (CK0)的上升沿,其中CS低,位于WRITE/ READ命令期间)到数据脉冲期间第一个数据选通的上升沿,测得的RAS/CAS等待时间。
• 从有效激活(指令时钟的上升沿,S0 = 0,其中命令 = Activate)到有效WRITE/CAS测得的RAS/CAS时延。
• 刷新速率。
• 预充电间隔。
在图1中,用标尺标出的明显问题区域中,S0 (片选)偶尔会在CK0 (指令时钟)上升沿的250ps范围内启动。
这可能要超出DDRII 400 建立/保持时间 (Ts/Th)>600ps的指标。为正确检验建立时间和保持时间,我们必需使用高速示波器和探头探测SDRAM上的CK0/CK0#和片选。如果Ts/Th对任何信号处于边际状态,那么它可能会导致间歇性的或持续的内存故障。
图2: CK0和S0的眼扫描(Eye Scan)。
在我们连接示波器探头,检定S0的Tsetup /Thold之前,我们可以使用逻辑分析仪上的眼图测量功能,进一步评估边际定时关系。请看图2中所示的眼图:
– CK0是方形波
– S0是三角形波,构成了与CK0的上升沿有关的眼图
– S0上升时间慢可能是这个系统中间歇性系统故障的根本原因。边沿慢使得眼图变差,减少了建立时间(Tsetup)
– 从百万分之几概率的故障信号中识别潜在问题。百万分之几的故障信号会在眼图内部显示为绿色的斑点。在本例中,没有证据表明存在故障信号。边沿慢是主要问题。
图2中的系统要求使用示波器,最终确定片选信号的建立时间(Tsetup)。示波器测量技术在第三步介绍。
下一个使用逻辑分析仪快速查看内存系统的实例将介绍,增加着色滤波的独特方法如何通过码型识别了解内存访问的概貌,从而迅速发现协议错误。
在我们的实例中,在逻辑分析仪上设置了着色滤波器,以帮助定位关闭页面超限,在这种情况下,针对一个存储区(Bank)的READ或WRITE命令没有与激活启动存储区的命令同步。
着色滤波器设置成为存储区bank0 (B0)提供红色阴影,为存储区bank1 (B1)提供蓝色阴影。
粉红色 = B0激活
红色 = B0读
青绿色 = B1激活
浅蓝色 = B1 读
着色滤波使得工程师能够使用码型标识,同时查看波形,识别要求进一步检测的区域。
图3: 着色滤波器使工程师能够迅速识别表明内存访问问题的码型。
在图3中,B0激活(粉红色)在一系列B0 READ(红色)命令之间前 。
但是,屏幕左边B1读 (浅蓝色)之前,没有B1 激活(青绿色)。如果B1最后激活没有落在允许的规定时间范围内,则表明发生了问题。
使用逻辑分析仪的最后一个实例,介绍如何使用逻辑分析仪上的眼测量功能。眼图测量工具提供了相对于时钟边沿参考点为0s,从+5ns到-5ns的信号的单一电压门限眼图。
眼测量一目了然地提供了:
*时钟占空比
*噪声和信号完整性问题
*数据有效窗口和眼图闭合
*通道间时滞
眼测量是校准逻辑分析仪取样位置的最快速的方法。
图4: 逻辑分析仪上的眼测量功能可以一目了然地了解内存总线信号关系。
在图4中,上面的屏幕显示了采用干净的差分时钟的DDRII系统上的眼定位(Eye Finder)结果。从眼定位(Eye Finder)结果中,我们注意到:
• 从T=0任一侧同等尺寸的白色区域(眼)中可以看出,指令时钟的占空比是50%。
• T=0时,指令时钟细长的转换区域 (黄色)表明了干净的时钟边沿。
下面的屏幕是采用非纯净(有噪声)时钟的DDRI系统。我们通过查看Eye Finder结果,来判断时钟不纯净:
• 指令时钟的转换区域很宽。
• CK0和CK0#取样的单端眼不对称。(不对称的眼也可能表明逻辑分析仪门限不正确。)
第3步
为确定故障的根本原因,通常要求使用高速示波器和探头进行参数测量。对DDRII测量,使用配有7 GHz探头的20Gs/s 采样、6GHz带宽的示波器可以为系统特性验证提供精确的测量功能。需要在示波器上测量的参数包括:
– 建立保持时间Ts/Th
– 上升时间
– 时钟过冲
– 频率
– 抖动分析软件
探头位置对在信号特性验证中进行精确的参数测量至关重要。最重要的是:
• 在内存控制器上探测READ数据和选通
• 在SDRAM上探测WRITE数据和选通
图5: READ和WRITE选通图取决于探测位置。
图5是T=0时相对于DQS5上升沿和下降沿的逻辑分析仪 眼扫描(Eye Scan)测量结果。测量结果是在DIMM插槽中使用插槽分析探头获得的。
在图5中,WRITE选通的眼图很大,形状很好。插槽分析探头上的探头位置与SDRAM足够近,因此信号中没有反射。
插槽分析探头上的反射使READ选通劣化。眼图足以对选通偏移和脉宽进行相对测量。但是,总线上的位置不足以实际检定READ业务的特征。
图5还说明了探头位置的重要性,因为在插槽分析探头上查看时,READ信号的幅度失真,与内存控制器上的实际眼图几乎没有类似之处。
为精确地查看内存控制器看到的READ数据,示波器探头必需放在内存控制器上。微型探头前端使这一任务成为可能。
许多技术领导者使用本文中介绍的工具和技术,来验证和调试高速内存系统。许多工程师已经采用节约时间的工具,他们可以更快地调试及更好地查看系统性能。
###
作者简历
Jennie Grosslight毕业于科罗拉多州科罗拉多斯普林斯市科罗拉多大学,荣获电气工程学士学位。她在安捷伦科技公司工作了14年,涉及系统工程、高速硬件设计和检验、产品市场推广、应用支持和项目管理等领域。目前,Jennie担任计算机系统逻辑分析仪支持程序开发经理。
引用 goodidea 2006/7/13 14:55:49 发表于15楼的内容
-
引用 钟灵山 2007/3/12 13:56:56 发表于16楼的内容
-
引用 JNZHLF 2007/3/13 2:36:47 发表于17楼的内容
-
引用 yanzhg 2007/12/22 23:25:02 发表于18楼的内容