2.3 单片机系统
单片机系统由单片机(AT89C51)、点阵液晶显示模块和4×4键盘三部分组成,其示意图见图1的“单片机系统”部分。单片机的P0口在不同的时间段分别用于显示数据输出,逻辑信号采样数据输入,采样字节输出的数据传送;P1、P3口用于逻辑信号检测(见图3引脚标注)、CPLD点阵扫描控制(见图4引脚标注)和液晶显示模块的操作控制;P2口用于4×4键盘扫描及按键信息接受。单片机系统的键盘和显示部分用于完成1、3级触发方式,1级、3级触发字,16级门限电压选择,数据采集区的前、中、后显示页面(16字节)选择,时间线位置等参数的设定和显示,以及相关功能操作。
2.4 CPLD点阵扫描控制
CPLD点阵扫描控制部分由可编程逻辑阵列(CPLD)、数模转换器(DAC)和X、Y、Z轴扫描信号放大电路组成,并在CPLD控制下工作;其电路如图4所示。
600)makesmallpic(this,600,1800);'' src="/uploadfile/201310/3/D79583695.png" width="549" height="280" />
CPLD向通过输出中断CPLD-INT请求(单片机的INT0)从单片机系统获得采样字节;对每个采样字节按顺序进行8路逻辑信号位波形(或时标线)的点阵扫描的信息处理,并控制数模转换(DAC)、信号放大、信号扫描显示和回扫信号消隐处理。在处理一个页面(1/3数据区)16个采样字节后,重复处理过程。
CPLD内部由计数器链(2分频器,点、位、字节计数器)、数据接收器、X轴位边界定位器、加法器、Y轴定位输出器、2选1多路器、消隐控制器等部分组成,如图5所示。CPLD外部引脚CLK(CPLD-CLK)、EN(使能)、TR(信息类型控制)、DI[7~0] (CPLD-DATA)、CP(锁存)、-INT(CPLD-INT)分别连逻辑分析仪单片机的ALE、P1.7、P3.1、P0[0~7]、P3.0、P3.2引脚(见图4的引脚标注);-WR、A0(通道选择)、DO[7~0]分别连DAC的-WR、A0、D[7~0]引脚;Zout连信号放大器的Z轴输入端。CPLD工作原理说明如下:
600)makesmallpic(this,600,1800);'' src="/uploadfile/201310/3/869584666.png" width="438" height="246" />
开机后,CPLD内部复位,EN=0,CPLD处于保持状态。
1.数据传送——首先设置EN=0,CPLD处于保持;然后,CP的上升沿,将外部数据送入数据接收器;设置TR=0,传送8路信号采样字节;TR=1,传送触发字或时标线位置的4位编码(给出16个位置信息)。传送数据后,设置EN=1,CPLD工作。
2.逻辑信号扫描——在EN=1,TR=0前提下,外部时钟CLK的上升沿驱动计数器链工作。字节计数器(采样字节计数)值ByteC经过X轴位边界定位器处理后的值X1(X1=ByteC*10H)与点计数器(位内点计数)值Xc再经过加法器处理,产生当前扫描点X轴数字量X=X1+Xc=ByteC*10H+Xc。位计数器(采样字节各位计数)值BitC和数据接收器(存放采样字节)值DI[7~0]经过Y轴定位输出器处理,产生当前扫描点Y轴数字量的Y有两种:①当DI[BitC]=0,Y=0E0H-(BitC*20H)+05H;②当DI[BitC]=1,Y=0E0H-(BitC*20H)+15H。在A0正(A0=1)、负(A0=0)状态对2选1多路器的驱动下,分时将Y、X送到DO[7~0]总线上;以此同时,在两个-WR(-CLK)的上升沿(A0正、负半个周期的中间)驱动下,将送到DO[7~0]总线上的Y和X分别写入数模转换器DAC的两个通道。位计数器值BitC=7时,表示一个采样字节处理完,CPLD发出传送下一个字节的中断请求-INT。逻辑分析仪单片机收到中断请求后,进行一次数据传送处理。
3.触发字和时间线位置扫描——在EN=1前提下,TR=1将数据接收器DI[3~0](位置信息)送入字节计数器,并控制点计数器值Xc=0,经过X轴位边界定位器和加法器处理后,产生扫描点X轴数字量X=X1+Xc=DI[3~0]*10H+0;同时TR=1控制Y轴定位输出器的值Y按计数方式工作,在CLK1驱动下,输出Y=00~0FFH的计数值,在示波器屏上显示竖线,表示触发字或时间线位置。当Y=0FFH时,表示位置信息扫描完毕,发出传送下一个字节的中断请求信号。
4.消隐处理——在Xc=0FH,即开始下1路时钟位各点扫描时,点计数器输出Z1=1;在BitC=7,即开始8路信号下一组各时钟位(下一个采样字节)扫描时,Y轴定位输出器输出Z2=1;在Y=OFFH,即触发字和时间线位置扫描结束时,Y轴定位输出器输出Z2=1;在A0=1时,为了消除当前传送的Y轴数字量与前一次X轴数字量产生的干扰扫描点,2分频器输出的A0使Z3=1;Z1、Z2、Z3信号经过消隐控制器(或非门电路)处理,使Zout为低电平,经反相放大器处理后,向示波器Z轴输出+12V电压,以消除回扫线和干扰点。
双踪信号示波器调整到X-Y工作方式,探头Y1为X轴输入,探头Y2为Y轴输入,显像管电子枪控制端为Z轴输入。CPLD输出的X、Y轴数字量X、Y经过数模转换和放大处理后,产生示波器X、Y轴扫描的模拟信号,在示波器屏上显示8路逻辑信号。CPLD输出的Zout信号经放大后,控制示波器的Z轴,以消隐回扫线和干扰点,使8路逻辑信号更清晰的显示。
3 软件设计
软件设计部分有逻辑信号检测及数据采集处理、键盘显示扫描处理、采样字节输出处理和CPLD内部结构设计VHDL(硬件描述语言)编程四部分。本文主要介绍逻辑信号检测及数据采集处理和CPLD结构设计VHDL编程部分。
3.1 逻辑信号检测及数据采集处理
逻辑信号检测及数据采集处理是通过单片机的INT1中断服务程序来完成。其中1级触发字逻辑信号检测中断服务程序和数据采集处理子程序流程如图6、图7所示。
当各项参数设定后,按“确认键”保存参数,并打开逻辑信号检测中断(INT1),关闭采样字节输出中断(INT0)。每次逻辑信号发生器的位传送时钟(B-CLK)触发一次逻辑信号检测中断服务程序的执行,每次服务程序执行要进行8次路选和8次AD转换启动,并分别检测转换结束状态和读取转换结果。每次逻辑信号检测中断服务,要调用8路逻辑信号数据采集处理子程序,将8路信号状态转换成1个采样字节,并存入采样数据区。当数据区存满后,关闭逻辑信号检测中断,打开采样字节输出中断,等待CPLD输出中断请求(CLPD-INT)。
600)makesmallpic(this,600,1800);'' src="/uploadfile/201310/3/049584103.png" width="514" height="421" />
CPLD点阵扫描控制电路在每次输出8路1位信号波形后,向单片机系统发出采样字节输出中断;对每次采样字节输出中断的服务,单片机要对CPLD进行一次采样字节输出及写操作控制。输出的采样字节有波形数据、触发字和时标线位置三种数据类型。
3.2 CPLD结构设计的VHDL编程
CPLD内部结构各部分设计采用硬件描述语言VHDL编程来实现。由于篇幅所限,仅给出部分设计的编程及解释说明。
1.点计数器设计的编程
if TR=''0'' then -- TR=0时,逻辑信号时钟位的扫描点计数。
if f=''0'' then -- f为回扫时钟插入标志位,f=0时,正常的点计数扫描。
Xc<=Xc+1; -- 点计数增1。
else
Xc<=Xc; -- f=1时,Xc保持1个时钟时间。
end if;
if Xc="1111" then
f<=''1''; -- 计完1个时钟位16个点后,f置1控制插入一个回扫时钟
BitC<=BitC+1; -- 采样字节的位计数增1
Z1<=''1''; -- 控制下一时钟周期不显示
else
f<=''0''; -- 控制正常计数
Z1<=''0''; -- 控制正常显示
end if;
else -- TR=1时,触发字和时标线位置扫描
Xc<="0000"; -- 点计数器值Xc 置0
end if;
程序中的“Xc<=Xc+1”语句仅为点计数器增1作准备,只有下一个时钟到来后,才计数增1变化;因此,对后边的“if Xc="1111" then”语句,判断到Xc="1111"时,已经为点计数器Xc变成0做好了准备。程序中的“--”为注释标志。
2.Y轴定位输出器设计的编程
if TR=''0'' then -- TR=''0''逻辑信号扫描,由位计数器值和数据接收器值确定Y值
if BitC="000" then — 第1路逻辑信号,对应字节内的最高位,示波器上端
if DI(7)=''0'' then Y<="11100101"; -- DI(7)=0,Y=E5H
else Y<="11110101"; -- DI(7)=1,Y=F5H
end if;
elsif BitC="001" then -- 第二路
if DI(6)=''0'' then Y<="11000101"; -- DI(6)=0,Y=C5H
else Y<="11010101"; -- DI(6)=1,Y=D5H
end if;
elsif BitC="010" then -- 第三路
if DI(5)<=''0''then Y<="10100101"; -- DI(5)=0,Y=A5H
else Y<="10110101"; -- DI(5)=1,Y=B5H
end if;
elsif BitC="011" then -- 第四路
if DI(4)<=''0''then Y<="10000101"; -- DI(4)=0,Y=85H
else Y<="10010101"; -- DI(4)=1,Y=95H
end if;
elsif BitC="100" then -- 第五路
if DI(3)=''0'' then Y<="01100101"; -- DI(3)=0,Y=65H
else Y<="01110101"; -- DI(3)=1,Y=75H
end if;
elsif BitC="101" then -- 第六路
if DI(2)=''0'' then Y<="01000101"; -- DI(2)=0,Y=45H
else Y<="01010101"; -- DI(2)=1,Y=55H
end if;
elsif BitC="110" then -- 第七路
if DI(1)=''0'' then Y<="00100101"; -- DI(1)=0,Y=25H
else Y<="00110101"; -- DI(1)=1,Y=35H
end if;
elsif BitC="111" then -- 第八路
if DI(0)=''0'' then Y<="00000101"; -- DI(0)=0,Y=05H
else Y<="00010101"; -- DI(0)=1,Y=15H
end if;
end if;
else -- TR=''1''触发字和时标线位置扫描,Y轴定位输出器按计数方式工作
if Y<"11111111" then -- Y<"11111111"时,计数增1,从下到上扫描位置线
Y<=Y+1;Z2<=’0’; -- Z2=’0’,正常显示
else -- Y="11111111"时,消隐控制,发出中断申请
Z2<=''1'', INT<=''0'';
end if;
end if;
4 结束语
本设计将单片机和EDA技术结合起来,简化了硬件结构,工作性能稳定,经过应用测试,达到了逻辑分析仪应有的功能要求。
通过本设计,笔者认为,运用EDA技术设计电路,设计者可专注于电路的行为和功能,而不必考虑电路如何实现及电路布线,并且可通过计算机进行设计效果的模拟和修改,为设计者提供了更广阔的设计空间。用单片机和EDA技术开发的电子产品,在功能、性能指标和开发效率等方面比传统的方法有明显的提高,而且成本降低。
参考文献:顾乃级,孙续. 逻辑分析仪原理与应用[M]. 北京:人民邮电出版社,1973.
李华,MCS-51系列单片机实用接口技术[M]. 北京:北京航空航天大学出版社,1993.
潘松,黄继业. EDA技术实用教程[M]. 北京:科学出版社,2002.