服务热线+010-82883755/56

※正达电路板故障检测设备:[答疑]如何编写在线电路维修测试仪数字器件逻辑功能测试程序

正达电路板故障检测设备系列论文】

 

如何编写在线电路维修测试仪数字器件逻辑功能测试程序

 

 

摘要:正达电路板故障检测设备系列论文对数字器件(本文特指:中/小规模固定逻辑数字集成电路)逻辑功能测试,是在线电路维修测试仪的基本功能。数字器件逻辑功能测试程序是如何编写的,使用者是否也能够自己尝试编写测试程序,这是许多用户比较感兴趣的问题。

 

关键词:在线电路维修测试仪;数字器件;ZD4040型电路测试仪;器件库;EXPAND语言

 

0.引言

    在线电路维修测试仪(本文简称:电路测试仪)设计精密,测试高效。结合计算机技术并且综合运用器件功能测试和器件管脚阻抗特性测试等测试手段,是重要的精密电路板维修(芯片级)检测设备。

    国内第一代电路测试仪的代表机型是:正达ZD4040型电路测试仪。主要特点:40路数字通道,40路VI曲线通道。器件库中包含40管脚以下+5V供电中/小规模固定逻辑数字器件(各种型号/厂家万余种),可以对器件库中的+5V供电数字器件进行逻辑功能测试和器件型号识别。见图1.

 

图1

 

    许多用户非常感兴趣的是:ZD4040型电路测试仪的数字器件功能测试程序是如何编写的,使用者是否也能够自己尝试编写数字器件的逻辑功能测试程序。本文将回答这方面的相关问题。

 

1.编写数字器件测试程序

 

1.1专用EXPAND编程扩库语言

    ZD4040型电路测试仪系统软件中具有“编程扩器件库”功能项,这项功能专门开放给用户,用于编写使用者需要的数字器件逻辑功能测试程序。

    “编程扩器件库”功能项采用专用编程语言——EXPAND语言,可以扩充中/小规模固定逻辑数字器件库,编写特殊数字器件的逻辑功能测试程序。ZD4040型电路测试仪系统软件提供的数字器件库也全都是采用EXPAND语言编写的。

    EXPAND语言编程比较简单,应用灵活,即是一个有力的扩库工具,也是一个数字器件学习工具,对于提高使用者的测试技术水平有很大帮助。

    采用EXPAND语言扩充器件库时,必须具有器件的技术资料(如管脚图/真值表/逻辑方程式/时序图等)。如果测试程序编写正确无误,ZD4040型电路测试仪即可对这个型号数字器件进行在线/离线功能测试和器件型号识别。

 

1.2运用EXPAND语言编程扩充数字器件库

    进入ZD4040型电路测试仪系统软件中的“编程扩器件库”功能项,见图2.为了便于使用者掌握EXPAND语言,“编程扩器件库”功能项中提供8个有一定代表性的数字器件源程序范例,功能型号为:7400,7405,7474,74138,74245,74373,74393,4014等。按“打开文件”操作可调出这些源程序范例,再结合后文的“EXPAND语言各语句索引”,可以学习各种类型数字器件逻辑功能测试程序的编程方法。

 

图2

 

    这些测试源程序范例被保存在ZD4040型电路测试仪系统软件的SOURCE目录下。采用记事本、写字板、WORD等编辑方式都可以打开这些源程序,进行修改和编辑。

  

1.3源程序说明(以7400为例):

    7400是双列14管脚“4单元2输入与非门”器件,是简单数字器件。其管脚逻辑图见图3.不同厂家/不同类型/不同封装的7400器件有很多种,器件型号全称会有所不同。编写逻辑功能测试程序时,仅以器件功能型号为准。

 

图3

 

7400管脚简要说明如下:

A1 B1 Y1 A2 B2 Y2 GND Y3 A3 B3 Y4 A4 B4 VCC

其中:A1为第1脚,B1为第2脚,Y1为第3脚…,Y2为第6脚,GND为第7脚,Y3为第8脚,A3为第9脚,B3为第10脚…,B4为第13脚,VCC为第14脚。

 

7400逻辑功能:(/为非  *为与)

Y=/(A*B)

 

    当具备了7400的管脚排列、逻辑功能等基本技术资料后,也就具备了编写7400逻辑功能测试程序的必要条件。

 

7400测试程序:(测试程序文件名:7400)

 

NAME(7400)

PINS(14)

VCC(14)

GND(7)

 

PIN_GROUP(1,2,3)

PIN_GROUP(4,5,6)

PIN_GROUP(8,9,10)

PIN_GROUP(11,12,13)

 

PUT_PIN(1,(0011))

PUT_PIN(2,(0101))

PUT_PIN(4,(XXXX)(0011))

PUT_PIN(5,(XXXX)(0101))

PUT_PIN(9,(XXXXXXXX)(0011))

PUT_PIN(10,(XXXXXXXX)(0101))

PUT_PIN(12,(XXXXXXXXXXXX)(0011))

PUT_PIN(13,(XXXXXXXXXXXX)(0101))

 

BEGIN(1)

 

CHECK(3,NAND2(PIN(1),PIN(2)),PIN 3 FAILS)

CHECK(6,NAND2(PIN(4),PIN(5)),PIN 6 FAILS)

CHECK(8,NAND2(PIN(10),PIN(9)),PIN 8 FAILS)

CHECK(11,NAND2(PIN(13),PIN(12)),PIN 11 FAILS)

 

7400测试程序说明:

    为了便于掌握编写数字器件的逻辑功能测试程序,特意将7400测试程序分成了5个段落。无论是多么复杂的数字器件,还是多么简单的数字器件,其测试程序的编写都遵循这5个段落,也都遵循这5个段落的段落顺序。明白这5个段落,在编写一个数字器件逻辑功能测试程序时,可以很快构建起这个测试程序的基本骨架。

 

①段落1:被测器件命名和定义电源等管脚

    段落1中这4条语句是所有器件测试程序的前4条固定语句,它们在测试程序中只能出现1次,固定在整个测试程序前4条语句的位置上。当编写一个器件测试程序时,首先就要先写出这4条语句。

    “NAME语句”是为被测器件起一个名字,写入在NAME后面的()中。这个名字既是将来生成到器件库中的器件名称,也是这个测试程序的文件名。测试程序必须以在NAME后面()中写入的名称作为文件名。此语句为所有测试程序固定的第1条语句。

    “PINS语句”是定义被测器件的管脚总数,在PINS后面的()中写入器件总管脚数,绝对不能写错。此语句为所有测试程序固定的第2条语句。

    “VCC语句”是定义被测器件的电源管脚,在VCC后面的()中写入器件的电源管脚序号。此语句为所有测试程序固定的第3条语句。

    “GND语句”是定义被测器件的接地管脚,在GND后面的()中写入器件的接地管脚序号。此语句为所有测试程序固定的第4条语句。

 

②段落2:定义与各个输出管脚相关联的管脚组

    段落2是通过“PIN_GROUP语句”定义与各个输出管脚相关联的管脚组,通常器件中有几个输出管脚,段落2中就需要有几条“PIN_GROUP语句”。各个相关管脚用“,”隔开,排列顺序不分先后。在测试程序中“PIN_GROUP语句”第1次应出现在第5条语句。

    例如:段落2第1条语句“PIN_GROUP(1,2,3)”表示输出管脚3和输入管脚1,2构成了一个相互关联的关系,这3个管脚构成了7400内部其中的1个与非门单元。

 

③段落3:定义各个输入管脚的测试数据

    段落3是通过“PUT_PIN语句”对器件各个输入管脚安排测试数据,即电路测试仪要施加的测试激励信号。一次只能设定1个输入管脚,因此这个器件有几个输入管脚,就要有几条PUT_PIN语句。

    例如:段落3第3条语句“PUT_PIN(4,(XXXX)(0011)”,表示对输入管脚4所施加的测试激励信号。其中X表示不施加激励信号,0表示施加低电平,1表示施加高电平。

    从段落3对7400的全部8个输入管脚所施加的测试激励信号来看,在同1个时间段中只有1个与非门的两个输入管脚在施加测试激励信号。也就是说,7400内部的4个与非门单元是逐一测试而不是同时测试。这是一个编程技巧,至于为什么要这样做,在后文中会做出说明。

 

④段落4:一切准备完毕,可以开始测试

    段落4中只有这1条语句,而且所有测试程序都是这样写的。“BEGIN语句”表明对该器件所有输入管脚需要施加的测试数据流已准备完毕,可以开始测试了。该语句应位于段落3最后1条“PUT_PIN语句”之后。

    BEGIN后面()中的“1”表示测试1个数据流周期。对于一般的测试程序而言,在这里都是填写“1”.

 

⑤段落5:定义各个输出管脚与相关联管脚之间的逻辑关系

    段落5“CHECK语句”是程序处理语句,处在整个测试程序的最后部分。测试系统可按照该语句规定的逻辑关系对测试激励信号以及被测器件的实际响应进行分析,然后给出被测器件“功能测试正确”或是“功能测试失败”的信息。一般而言,器件有多少个输出管脚,就应该有多少条程序处理语句。

    例如:段落5第1条语句“CHECK(3,NAND2(PIN(1),PIN(2)),PIN 3 FAILS)”,表示测试输出管脚3是否满足输入管脚1和输入管脚2的“2输入与非”关系。若不满足,则显示书写在本条语句最后的“PIN 3 FAILS”(管脚3错误)。

    若实测中,段落5中所有语句都满足各自单元“2输入与非”关系,则会显示出1条测试正确信息:“本器件功能测试正确”。这条信息是由测试系统内部产生的,在编写的测试程序中没有出现。

 

⑥其它段落:关于测试程序中的“SET语句”段落

    一般数字器件的测试程序都是以上介绍的5个基本段落,明确了上述结构,再结合着查阅后文介绍的“EXPAND语言各语句索引”,使用者可以自己编写器件的测试程序。

    许多测试程序除了以上5个基本段落外,还一些“SET语句”段落(见本文最后用户的编程扩库实例)。“SET语句”段落是为测试程序段落5服务的,实际应归结到段落5之中。由于段落5中有些“CHECK语句”的逻辑表达式过于冗长复杂,利用“SET语句”可以预先将其中一些逻辑表达式赋予给1个布尔变量,将复杂的逻辑关系逐步分解。虽然看似增加了一些“SET语句”段落,但使得测试程序中的每条语句都简短清晰,便于阅读和修改。

 

1.4编写器件测试程序时的几点说明:

①程序行所有英文字母或变量一律用大写;

②每条语句各参数之间用逗号(,)分隔;

③语句中所用的括号必须要严格配对,括号必须是圆括号,即();

④程序中的“( )”和“,”不能在中文输入状态下,必须在英文输入状态下;

⑤每条语句不得超过1行,每行最多255个字符;

⑥程序各行之间允许空行,可使程序段落清晰,便于阅读修改;

⑦程序编辑器支持Ctrl C(复制)、Ctrl X(剪切)、Ctrl V(粘贴)等常用键盘操作;

⑧布尔表达式的参数,可以是常数、布尔型变量或布尔表达式;

⑨为使源程序每行简洁易看,允许用“SET”函数定义1个布尔变量,用来替换1个布尔表达式,但以下名字为EXPAND语言专用保留字,不得用作变量名:

NAME,PINS,VCC,GND,PIN_GROUP,PUT_PIN,BEGIN,SET,CHECK,COPY,INVERT,PIN,DAT_FORE,NOT,AND,OR,XNOR,NAND,NOR,FUNC_PREV,THREE_FUNC,OC_CHECK,TRI_CHECK,PIN_VALID_TEST,CONSTANT.

 

1.5保存器件测试程序:

    选择“新建文件”项,可开始建立并编写一个新器件的测试源程序。编写完毕后,可选择“存储当前文件”项保存新编写的程序,以待扩充到器件库。

    所有新编写的器件测试程序文件连同8个测试源程序范例一样,都被自动保存在测试系统软件的SOURCE目录下,具有相同的扩展名“.SRC”.所以在保存当前程序文件时,选择框里输入的程序文件名不要带路径及扩展名。

    所保存的程序文件名和测试程序中“NAME语句”后面( )中的器件名必须相一致。若两者不一致,扩充到器件库中的器件名为“NAME语句”后面( )中的器件名。

 

2.扩充数字器件测试程序

 

    进入“器件扩充到器件库”操作。选中待扩充的测试源程序,选择相应的器件库,按“继续”按钮即可完成源程序的扩充。见图4.

 

图4

 

    如果新编写的测试程序无语法错误,会显示“扩充完毕”,这时在相应的器件库中会出现该器件。若有语法错误,则显示错误信息,此时应重新对该程序进行检查和修改。

 

3.EXPAND语言各语句索引

 

3.1 EXPAND语言各语句索引:

    以下将按照语法、作用、范例的顺序对每条语句进行详述。在“语法”后面括号中的说明内容,前者为参数,后者为参数类型,中间用冒号分隔。如果相邻几个参数的参数类型相同,则各参数间用逗号分隔,在最后那个参数后面统一加1个冒号。参数类型有数值常数、布尔型以及字符串三种类型。

1.

语句:NAME

语法:NAME(器件名:字符串)

作用:为被测器件起一个名字(同时也是该测试程序的文件名),该名字即为功能测试时在器件库中要输入的器件型号。

位置:此语句为测试程序的第1条语句。

范例:NAME(74245)

2.

语句:PINS

语法:PINS(器件管脚总数:数值常数)

作用:定义被测器件管脚总数,为测试夹自动定位及器件型号识别提供必要的数据。

位置:此语句为测试程序的第2条语句。

范例:PINS(20)

3.

语句:VCC

语法:VCC(器件电源管脚号:数值常数)

作用:指定器件工作的电源VCC管脚号。该语句只能标定1个管脚,对于有些器件的某个非电源管脚需要接电源时,不能用此语句(对该管脚应采用“PUT_PIN语句”)。

位置:此语句为测试程序的第3条语句。

范例:VCC(20)

4.

语句:GND

语法:GND(器件接地管脚号:数值常数)

作用:指定器件工作的接地GND管脚号。该语句只能标定1个管脚,对于有些器件的某个非接地管脚需要接地时,不能用此语句(对该管脚应采用“PUT_PIN语句”)。

位置:此语句为测试程序的第4条语句。

范例:GND(10)

5.

语句:PIN_GROUP

语法:PIN_GROUP(管脚号,管脚号…,管脚号:数值常数)

作用:标定器件中的功能相关管脚,将相关管脚定为一组。一般来说,器件中有几个输出管脚,就需要有几条PIN_GROUP语句。各个相关管脚的排列顺序不分先后。

位置:此语句第一次出现应在测试程序的第5条语句,一般要出现若干次。

范例:7400是“四组二输入与非门”器件,有4个输出管脚,所以有4条PIN_GROUP语句。参阅前文7400测试程序范例段落2;74138是“3-8译码器”,有8个输出管脚,所以有8条PIN_GROUP语句。参阅测试软件中的74138源程序范例。

但对于输出管脚功能相关的器件,其PIN_GROUP语句在测试程序中出现的条数比器件实际输出管脚的个数要少。

范例:7474是“双D数据触发器”,有4个输出管脚,分为两组正、反相输出,属于输出管脚功能相关,所以只有2条PIN_GROUP语句。参阅测试软件中的7474源程序范例。

其它:NC_PINS语句

NC_PINS(管脚号,管脚号…,管脚号:数值常数)是指定器件空脚的语句。该语句属于PIN_GROUP语句中的一种,仅仅适用于有空脚的器件,为管脚接触检查测试提供依据。

范例:NC_PINS(9,10,13)

管脚9,10,13为7430器件没有使用的空脚。参阅测试软件中的7430源程序范例。

6.

语句:PUT_PIN

语法:PUT_PIN(管脚号:数值常数,测试数据流)

作用:对器件各输入管脚安排测试数据(即所施加的激励信号),一次设定1个管脚,器件有几个输入管脚就要有几条该语句。对于完全测试,应考虑到各输入管脚信号各种组合情况,各管脚测试数据是根据器件的真值表/布尔方程式/时序图等来确定的。编写器件测试程序主要就是要确定各输入管脚的测试数据。一般来说,分析和确定测试数据流几乎要占到编程工作量的一半。

位置:此语句第一次出现在最后1条PIN_GROUP语句之后,一般要出现若干次。

要点:

①为提高测试准确性,消除输出之间的相互干扰,对于一个封装里面有多个单元电路的器件(如7400),测试数据应分单元设置,一次只测试其中1个单元。

②数据流是一组由‘0’,‘1’,‘X’组合成的数据序列。其中:‘0’代表施加一个低电平信号,‘1’代表施加一个高电平信号,‘X’代表不施加测试信号。

③一串相同的电平信号,可使用乘法符号“*”,这样可使数据流书写得简短。

范例:PUT_PIN(1,((1) *20))等价于PUT_PIN(1,(11111111111111111111))

                                                    ┗━20个‘1’

④数据流可分成几段组合到一起,各段分别用1个()括起来,然后对整个数据流再用1个()完整地括起来。

范例:

a:PUT_PIN(1,(00001111XXXX0000111100001111))等价于

PUT_PIN(1,((00001111)(XXXX)(00001111)(00001111)))等价于

PUT_PIN1,(((0)*4)((1)*4)((X)*4)((00001111)*2)))

b:PUT_PIN(5,((01010101)(11001100)))等价于

PUT_PIN(5,(((01)*4)((1100)*2)))等价于

PUT_PIN(5,(((01)*4)((((1)*2)((0)*2))*2)))

7.

语句:BEGIN

语法:BEGIN(数据流周期数:数值常数)

作用:其一.表明所有输入管脚的测试数据流已准备完毕,可以开始测试了;其二.定义了数据流的最大长度,数据流周期数值常数取值为“1~8”.数据流1个周期定为128个数据位,故数据流最大长度=周期数×128.如果该长度少于PUT_PIN所定义的测试数据流,PUT_PIN所定义的多余的数据将不被使用。数据流周期数值常数通常取值为“1”.

位置:此语句应位于最后1条PUT_PIN语句之后。

8.

各种输入/输出逻辑关系语句

当测试仪遇到BEGIN语句后,就将由PUT_PIN语句所定义的测试数据流依次施加至被测器件,并取回被测器件各输出管脚的实测响应信号,然后再比较这些响应信号与“处理语句”中所定义的输入/输出逻辑关系是否相符。如果相符,则说明器件功能测试正确;若不相符,则说明器件功能测试失败。

器件的功能测试是由“处理语句”最终完成的,在介绍“处理语句”之前,必须要先介绍“处理语句”中所涉及的输入/输出逻辑关系。

⑴语句:PIN

语法:PIN(管脚号:数值常数)

作用:即加到某管脚的数据流,或从某管脚取回响应的数据。

PIN硬件等效为1个“单与门”。

范例:PIN(2)

⑵语句:NOT

语法:NOT(表达式:布尔型)

作用:对“表达式”所代表的数据流逐位取反,相当于“反相”运算。

NOT硬件等效为1个“非门”。

范例:NOT(PIN(2))

⑶语句:AND

语法:ANDn(表达式1,表达式2…,表达式n:布尔型)

作用:对n个表达式所代表的n个布尔型数据流进行“与”运算。

ANDn硬件等效为1个“n输入与门”。

范例:AND3(PIN(3),NOT(PIN(5)),PIN(6))

⑷语句:OR

语法:ORn(表达式1,表达式2…,表达式n:布尔型)

作用:对n个表达式所代表的n个布尔型数据流进行“或”运算。

ORn硬件等效为1个“n输入或门”。

范例:OR3(PIN(1),NOT(PIN(2)),PIN(3))

⑸语句:NAND

语法:NANDn(表达式1,表达式2…,表达式n:布尔型)

作用:对n个表达式所代表的n个布尔型数据流进行“与非”运算。

NANDn硬件等效为1个“n输入与非门”。

范例:NAND2(PIN(1),NOT(PIN(2)))

⑹语句:NOR

语法:NORn(表达式1,表达式2…,表达式n:布尔型)

作用:对n个表达式所代表的n个布尔型数据流进行“或非”运算。

NORn硬件等效为1个“n输入或非门”。

范例:NOR3(PIN(1),NOT(PIN(2)),PIN(3))

⑺语句:XNOR

语法:XNOR(表达式1,表达式2:布尔型)

作用:对两个表达式所代表的布尔型数据流进行“异或非”运算。

XNOR硬件等效为1个“异或非门”。

范例:XNOR(PIN(2),PIN(3))

9.

处理语句

“处理语句”中规定了被测器件输入/输出的逻辑关系,器件功能测试最终是由“处理语句”来决定和完成的,同时会给出被测器件功能测试正确或功能测试失败的信息。一般而言,器件有多少个输出管脚,就应该有多少条“处理语句”。

 

⑴语句:CHECK

语法:CHECK(输出管脚号:数值常数,表达式:布尔型,测试失败信息:字符串)

作用:在所有处理语句中,CHECK语句使用频率最高,其反映了器件输出与输入之间所应存在的逻辑功能关系。该语句实质上就是被测器件某输出管脚与相关输入管脚的布尔逻辑方程式。

执行该语句时,首先电脑会计算出在依照测试程序所施加的测试激励下,该表达式所对应的理论输出数据流,该数据流就是被测器件该输出管脚所应产生的标准响应(理论值)。将标准响应与被测器件该输出管脚的实际测试输出进行比较,如果两者相同,说明该器件功能测试正确,返回1个正确代码(由测试系统内部定义),并显示1条测试正确信息(由测试系统内部产生)而结束测试;如果两者不相符,则返回1个错误代码(由测试系统内部定义),并显示测试失败信息(由测试程序中书写的)而结束测试。

测试失败信息为1个英文/数字混合字符串,用以简洁显示测试失败的管脚号,书写在CHECK语句行的最后部分。

范例:CHECK(1,NAND4(PIN(2),PIN(3),NOT(PIN(4)),PIN(5)),PIN 1 FAILS)

以上范例表明测试该器件的“输出管脚1”与其四个输入管脚2,3,4的反相、5是否符合“四输入与非”逻辑关系。

如果“输出管脚1”的实际测试值符合此种逻辑关系,返回1个正确代码,并显示1条测试正确信息:“本器件功能测试正确”(由测试系统内部产生),结束测试。

如果“输出管脚1”的实际测试值不符合此种逻辑关系,返回1个错误代码,并显示测试失败信息:“PIN 1 FAILS”(管脚1错误),结束测试。倘若是有多个输出管脚出现错误,则各个出错输出管脚的测试失败信息会同时显示。

位置:“处理语句”应位于整个测试程序的最后,是测试程序的结束部分语句。

......

10.

与“处理语句”密切相关的SET语句

SET语句是非常重要和常用的与“处理语句”密切相关的语句,SET语句可以极大地简化CHECK等“处理语句”,使每条语句都简短清晰。

语句:SET

语法:SET(变量名,表达式:布尔型)

作用:该语句是为简化“处理语句”的书写而设置的,它把1个布尔表达式(可以是比较复杂的表达式)赋予给1个布尔变量,变量名为大写英文字母加上数字字符串。然后以此变量名代替对应的表达式,最终加入到“处理语句”之中。

位置:SET语句应位于BEGIN(1)语句之后,“处理语句”(如CHECK语句)之前。

范例:SET(X1,NAND2(PIN(1),PIN(2)))

此例中,在以后程序中所出现的X1等同于布尔表达式NAND2(PIN(1),PIN(2))。

......

 

3.2关于被测器件的在线自身连接问题:

    编写一个数字器件的测试程序时,有时需要考虑器件的在线自身连接问题,有时又不需要考虑这个问题。

    例如7400源程序范例,当7400内部第1个与非门的输出管脚(Y1)和其第2个与非门的某一个输入管脚(A2)在线连接在一起时,测试时如果是对4个与非门的8个输入管脚同时施加测试信号,则在A2管脚上就会出现测试信号和Y1的测试输出信号两者间的信号干扰问题。所以对于内部为多个单元的器件必须采用逐个测试的方式。

    又如当7400内部某个与非门的两个输入管脚在线连接在一起时,该与非门的功能就会退化为一个反相器。在编写程序时,我们不用考虑这个问题。实际测试中被测器件若出现这种在线连接关系(或者是其它数字器件的更为复杂的在线连接关系),测试系统内部会通过另外的自动补偿程序自动判别,并按照当前器件的实际在线状态完成测试。

 

4.正达电路测试仪用户的编程扩库实例

 

4.1编程扩库实例特色:

    以下节选一段某位正达电路测试仪北京用户的编程扩库实例。这个编程实例中体现出两个特色:

①特色1:是对可编程数字器件的编程扩库实例

    有些人认为:既然ZD4040型电路测试仪器件库中已经包含几乎全部的+5V供电中/小规模固定逻辑数字器件,“编程扩器件库”功能项还有什么用处吗?通过这个实例可以看出,“编程扩器件库”功能项不但有用,还是一个很好的数字器件学习和实验工具。

②特色2:充分运用“SET语句”简化测试程序

    实际编程时,“CHECK处理语句”有时很复杂,若直接书写成1行会非常冗长,甚至1行都书写不下。这时就必须应运用好“SET语句”段落。

 

4.2编程扩库实例详解:

    该程序是针对一个已知逻辑功能的通用阵列逻辑GAL器件GAL16V8(在电路板上位置编号U15)而专门编写的。

    GAL16V8是一种“与-或”两级式结构的可编程数字器件,突出特点是用户可通过编程定义其逻辑功能,可定义8个输入(2~9管脚)、8个输出(12~19管脚)。将设计的逻辑功能表达式写入GAL16V8,可构成一个特有的电路功能。

GAL16V8管脚简要说明如下:

CLK B C D E F G H I GND /OE O12 O13 O14 O15 O16 O17 O18 O19 VCC

其中:CLK为第1脚,B为第2脚,C为第3脚…,I为第9脚,GND为第10脚,/OE为第11脚,O12为第12脚,O13为第13脚…,O19为第19脚,VCC为第20脚。

 

已知该GAL16V8的逻辑功能表达式:(/为非  *为与  +为或)

O19=/B*/C*D + C*/D*/E + B*D*/E

O18=/C*/E + B*/E + D*/E + B*C*D

 

用户针对该GAL16V8功能编写的测试程序:(测试程序文件名:GAL16V8-U15)

NAME(GAL16V8-U15)

PINS(20)

VCC(20)

GND(10)

 

PIN_GROUP(19,2,3,4,5)

PIN_GROUP(18,2,3,4,5)

 

PUT_PIN(2,(001100001100001100001100))

PUT_PIN(3,(000011000000000000110000))

PUT_PIN(4,(110000001100001100000011))

PUT_PIN(5,(110000000011110000000011))

 

BEGIN(1)

 

SET(F19_1,AND3(NOT(PIN(2)),NOT(PIN(3)),PIN(4)))

SET(F19_2,AND3(PIN(3),NOT(PIN(4)),NOT(PIN(5))))

SET(F19_3,AND3(PIN(2),PIN(4),NOT(PIN(5))))

SET(F19,OR3(F19_1,F19_2,F19_3))

 

SET(F18_1,AND2(NOT(PIN(3)),NOT(PIN(5))))

SET(F18_2,AND2(PIN(2),NOT(PIN(5))))

SET(F18_3,AND2(PIN(4),NOT(PIN(5))))

SET(F18_4,AND3(PIN(2),PIN(3),PIN(4)))

SET(F18,OR4(F18_1,F18_2,F18_3,F18_4))

 

CHECK(19,F19,PIN 19 FAILS)

CHECK(18,F18,PIN 18 FAILS)

 

    以上这段测试程序充分运用了“SET语句”,将程序最后两条“CHECK语句”要面对的冗长“与-或”逻辑关系各自进行了两次分解,使测试程序中的每条语句都简短清晰。

 

5.结语

    第三代ZD9610型电路测试仪具有80路数字通道,可以对40管脚以上+5V/+3.3V供电固定逻辑数字器件进行逻辑功能测试,编写器件测试程序较之ZD4040型电路测试仪肯定会复杂一些,但大同小异。

    正达电路测试仪不仅可以用于电路维修,还可以用于元器件筛选和科研教学。通过以上正达电路测试仪北京用户的编程扩库实例可以看出,掌握EXPAND语言能够提高使用者的测试技术水平。