| 逻辑分析仪中的内存可比喻成一条很长的输送带,从待测物(DUT)撷取到的取样点,便是输送带上的物品。在输送带的一端放上新的物品时,旧的物品便会在另一端被掏出。换句话说,由于逻辑分析仪的存储深度(亦即可储存的取样点)有限,因此当存储记实满时,再多撷取一个新的取样点,就需要删除一个最旧的取样点。当逻辑分析仪检测到在内存的某个适当位置,撷取到符合触发前提的取样点时,逻辑分析仪便会休止搜集数据。同时,触发位置是可以设在内存内任何地方的。 触发顺序 (Trigger Sequence) 固然逻辑分析仪的触发前提通常很直觉而简朴,但却有可能需要做相称复杂的程序编纂,例如,使用者可能但愿紧接在一个信号的上升沿后,另一个信号又产生上升沿时,将它定为触发点。因为需要一连串的步骤才能找到触发点,因此可称这些步骤为触发顺序,而其中的每一个步骤则称为触发状态。 每一个触发状态都由前提与动作两部份组成。前提即为布尔代数,例如,「若ADDR=1000」或「若SIG1产生一个上升沿」;动作则为当前提符合时,逻辑分析仪应执行的工作。例如:触发逻辑分析仪、转到另一状态(Go To)、或激活定时器,类似于程序编纂中的If/Then叙述。每一个触发状态都会依序编号,起始时一定是执行第一个触发状态,但其它状态则可依照Go To指令,以任意顺序来执行。当一个触发点在某一状态中不符合前提时,逻辑分析仪会撷取下一个取样点,并验证是否符合该状态的前提。以下面的触发状态为例: If DATA = 7000 Then Trigger 逻辑分析仪会不断搜集取样点,直到DATA为7000时才做触发。一旦逻辑分析仪触发后,即使符合触发前提的取样点不只一个,它也不会再触发。若此前提不符合,逻辑分析仪将搜集下一个取样点并执行统一状态进行比较。若取样点符合前提,逻辑分析仪便会在另一个触发状态执行前,撷取到下一个取样点,因此毫不会有一个点符合两层以上的前提,而且每一状态代表的是在不同时间点发生的事件。 又以下面的触发顺序为例: If ADDR=1000 Then Go To 2 If DATA=2000 Then Trigger 若逻辑分析仪撷取到的数据如下,固然第一点可符合前提1,但触发点应发生在第7个点: Sample No. ADDR DATA 1 1000 2000 此取样点符合第一层的前提 2 1010 3000 3 1020 4000 4 1030 5000 5 1040 6000 6 1050 7000 7 1060 2000 此为逻辑分析仪触发的点 因为新的取样点会在第一状态前提符合后,与开始测试第二状态前提之前被撷取到,因此逻辑分析仪不会在第一状态便触发。较佳的触发顺序逻辑应为「Find ADDR=1000 followed by DATA=2000 and then trigger」。下一步若触发状态的前提能够符合,逻辑分析仪便会跳至「Go To」指定的层数执行,但若没有「Go To」指令可执行,下一步该执行哪一状态便只能由逻辑分析仪决定了。有些逻辑分析仪在此时会直接执行下一状态,有些则会再执行原来那一状态,因此,为了避免如斯模棱两可,最好能明白指示「Go To」这个动作。 布尔代数 若需要以数个前提同时发生的情况作为触发点,则应使用布尔代数,例如「If ADDR=1000 AND DATA=2000」。 到底要使用多层式触发顺序,仍是采用布尔代数,搅浑二者是触发设定中常见的错误。通常布尔代数是用于很多事件同时发生时;而对于一个事件发生在另一事件之后,有排列先后的情形,则应使用多层式触发顺序。 分支(Branching) 分支与C语言中的Switch叙述,或Basic语言中的Select Case相类似,都可提供具有个别动作之复合前提的测试方法。例如: 1.If ADDR<1000 Then Go To 2 (此为第一状态的第一个分支) Else If ADDR>2000 Then GoTo 3 (此为第一状态的第二个分支) Else If DATA=2000 Then Trigger (此为第一状态的第三个分支) 2.If DATA<=7000 Then Trigger 3.If SIG1 rising edge Then Trigger 第一状态含有三个分支,因此有三种可能的动作,若能符合第一分支的前提,则其它分支便不做测试;同时,即使一个取样点能符合多个分支的前提,最多也只能执行一个分支的动作。 另一种触发则可利用并行计数器(occurrence counter),找到一个事件发生第N次的情况。以下的例子可设定当「ADDR=1000」发生5次时做触发: 1.If ADDR=1000 occurs 5 times Then Trigger 使用定时器(Timer) 在某些例子中,使用者有爱好的是信号间的相互影响,此时可使用定时器来核对事件间所耗费的时间。若想在一个边缘信号(edge),与前一个边缘信号相隔500 ns以内时做触发,就需要使用定时器。要记得的是,定时器必需在检测前激活。设定定时器的枢纽在于,要辨别何时激活与何时做检测。定时器需在检测到SIG1的上升沿时激活,并在泛起SIG2上升沿时检测。因此,这样的丈量可设定为: 1.If there''s a Rising Edge on SIG1, then Start Timer1 Go to 2. 2.If there''s a Rising Edge on SIG2 And Timer1<500 ns then Trigger. 以上的触发顺序看似准确,实在躲藏了一个很危险的缺陷。若SIG1与SIG2的上升缘相隔超过500 ns时会发生什么事?没错,逻辑分析仪不会做触发,由于Timer1会持续计时,使得触发前提永远也无法知足,但稍后可能又泛起SIG1,并在500 ns内发生了SIG2。 若要解决这个题目,应在定时器每超过500 ns而没触发时,重新回到第一状态,寻找SIG1的上升沿,准确的触发顺序应为: 1.If there''s a Rising Edge on SIG1, then Start Timer1 Go to 2. 2.If there''s a Rising Edge on SIG2 And Timer1<500 ns then Trigger Else If Timer1>=500 ns, then Reset Timer1 Go to 1 节省内存 为嵌入式软件纠错时,常碰到无法精确指出到底是汇编语言中哪一行指令是程序的题目所在。只知道错误点接着百万状态后,发生了不正常动作,因此可在此现象作触发,但却因内存有限,而无法同时看到原因(错误)与现象(题目)。两种最简朴节省内存的方法是时钟与储存资格限制。 时钟限定(Clock Qualification) 分析仪采用系统时钟做为状态分析的取样率,同时撷取几个其它信号,例如:*TA与TSIZ,作为时钟限定。因此只有当系统时钟为上升沿,同时*TA(K-clock)为低基准时,才储存该取样点。 存储限定(Storage Qualification) 存储限定也可达到有效运用逻辑分析仪内存的目的,更进一步地,在触发点前后可采用不同的存储设定。最简朴的存储限定是预设储存(default storage),除非触发状态另有特别的设定,否则就须储存取样点。因此,假如只想要储存ADDR在1000至2000的点,则预设储存应设定为「ADDR In Range 1000 to 2000」,若全部不存,则可设为储存「Nothing」。 有些题目是不能单用逻辑分析仪解决的,由于通常是在见到不正常现象时,才触发逻辑分析仪。例如为找出系统老是周期性死机(crash)的原因 ,我们发现某一变量A老是在死机前变成72,所以选择在A=72条件下做触发,但如斯一来,触发后待测系统却继承动作直到过了十万状态后才死机。若能在撷取到代表系统即将毁损的信号时,让系统暂停,再单步执行直到系统死机,便可找出真正的题目。这就要使用内部模块触发(Intermodule Trigger)功能,连结逻辑分析仪与能控制该处理器执行(Run Control)的仿真器,在找到A=72时暂停待测物,以观察毕竟发生了什么状况,导致周期性死机。 通常逻辑分析仪的触发设定与软件的编纂大不相同,假如能以事先定义的触发函数以及具有完整说明的现成触发为参考,设定的工作便可简化很多。只有在没有任何一项可使用时,才需要自己编纂触发顺序。最后,在面对较复杂的触发设定时,别忘了先将题目分解,再一项一项地进行处理,同时活用逻辑分析仪中不同模块的功能组合,以扩大其使用功效。
上一页:红外热像仪原理及用途 下一页:Raytek红外测温仪在钢铁工业中的应用 |