摘要:针对某型导弹电子设备电路板测试要求,采用可编程逻辑器件FPGA,提出了一种基于有限状态机(FSM,Finite State Machine)的可编程集成芯片功能测试的方案。以可编程定时计数器Cµ8254的检测为例,采用硬件描述语言Verilog HDL完成了FSM的设计和功能仿真,实验结果表明该方案能完成可编程集成芯片的功能测试,同时缩短了开发周期,减小了体积,有较高的实用价值。
关键词:可编程集成芯片,FSM,功能测试,Verilog HDL,FPGA
引言:
某型导弹电子设备电路板存在大量的可编程集成芯片(Cµ8254,82c51,8255),在对电路板进行检测过程中,不可避免的要完成这些可编程集成芯片的功能测试。因这些芯片中含有存储单元,同时这些芯片的测试激励的加入有严格的时序要求,对这些芯片的测试比普通数字逻辑芯片更为困难。FSM是由寄存器组和组合逻辑构成的硬件时序电路,被广泛应用于需要指定顺序操作的应用中,采用FSM可以方便、有效地对可编程集成芯片进行功能测试。本文针对该类被测可编程集成芯片的特点,提出了基于FSM的可编程集成芯片功能测试方案,取得了较好的效果。
1 可编程集成芯片测试方案设计
功能测试就是检测芯片是否能够完成所设计的功能,最基础最重要的方法是确定型的存储图案方法DSPT(Deterministic Stored Pattern Testing)。其原理是:给芯片加载激励信号,同时采样芯片响应信号,然后将采样到的响应信号与预期的正确信号进行比较,判断集成电路动作是否异常,以期得出测试结果。如图1所示。
图1 功能测试原理图
按照系统小型化、设计灵活和开发周期短的要求,根据可编程集成芯片功能测试的原理,采用以FPGA为核心的可编程集成芯片功能测试方案,具体方案如图2所示。
图2 功能测试硬件框图
其中FSM部分根据被测集成芯片信息和控制信号生成相应的数据,这些数据作为地址信号读取ROM中的测试向量,并将生成的测试向量施加到被测芯片上。信号源生成主要是完成被测芯片所需要的其他信号,如时钟信号和电源。
本文以可编程定时计数器Cµ8254的功能测试为例介绍该方案的实现过程,可编程串行/并行通信接口芯片8251/8255功能测试的设计与实现与此相同。
2 可编程计数器/定时器芯片Cµ8254介绍
Cµ8254是Intel公司生产的微型机外围芯片,它具有三个相同的16为减法计数器,分别为计数器0、计数器1和计数器2。具体工作方式参考文献7。
和其他可编程芯片一样,所谓对芯片的编程,就是对他进行读/写操作。下列情况下需要对Cµ8254编程:
工作之前写入控制字,以确定每个计数器通道的工作方式;
工作之前写入每个计数器通道的计数初值;
工作工程中改变某通道的计数初值;
写入命令字或状态字,以读取某一时刻某一通道的CE内容或状态寄存器内容。
Cµ8254个端口读/写控制作用如表1所示。
表1 Cµ8254个端口读/写控制作用
功能含义
0
1
0
0
0
写计数器0
0
1
0
1
0
写计数器1
0
1
0
1
0
写计数器2
0
1
0
1
1
写方式控制字0
0
0
1
0
0
读计数器0
0
0
1
0
1
读计数器1
0
0
1
1
0
读计数器2
1
X
X
X
X
禁止
其控制字书写格式如下图3所示。
图3 Cµ8254控制字格式
3 Cµ8254功能测试的FSM设计与实现
FSM在数字系统设计中应用十分广泛。根据状态机的输出是否与输入有关,可将状态机分为两大类:摩尔(Moore)型状态机和米莉(Mealy)型状态机。Moore型状态机的输出仅与现态有关;Mealy型状态机的输出不仅与现态有关,而且和输入也有关。本方案中有限状态机为Mealy。FSM的一般结构如图4所示。它主要包括三个部分,其中组合逻辑部分包括状态译码器和输出译码器,状态译码器确定状态机的下一个状态,输出译码器确定状态机的输出,状态寄存器属于时序逻辑部分,用来存储状态机的内部状态。
图4 FSM结构图
由FSM控制的测试向量的生成是整个测试系统的核心,该状态机的实现是通过采用Verilog HDL来描述的。首先是对整个测试过程进行相应的建模,得出相应的测试状态转移图(STG, Stae Transition Graph),再根据状态转移图采用Verilog描述出相应的状态机。
3.1 构建状态机的STG
由于该型导弹电子设备电路板中的Cµ8254均工作于方式0、方式1或方式2,对其进行功能测试没必要遍历每个通道的所有工作方式,可以针对Cµ8254相应通道的这三种工作方式进行测试(如:对其中一块Cµ8254的通道0工作于方式0、1、2进行测试),这样做既可完成对被测对象的功能测试,同时可以有效地减少FPGA资源的占用。根据以上分析,本设计共有5个状态,分别为:start,control0,control1,congtrol2,write。其中start表示测试开始,开始状态为start,control0、control1和congtrol2表示向三个通道写入方式控制字,write表示写入计数初值。其状态图如图5所示。
图5 状态转移
3.2 用Verilog语言编写源代码
用Verilog语言描述有限状态机可使用多种风格,不同的风格会极大地影响电路性能。通常有3种描述方式单always块、双always块和三always块。其中单always模块代码难以修改和调试,双always模块容易产生毛刺。通过以上分析,可以采用三always模块完成状态机的设计,其中两个时序always块分别用来描述现态逻辑和对输出赋值,组合always块用于产生下一状态。这种方式的状态机也是寄存器输出,输出无毛刺,并且代码比单always块清晰易读,但是面积大于双always块。其部分源程序如下。
always @(present or A or w)
begin
case(present)
start:
begin
if(A==2'b01) next=control0;
else if(A==2'b10) next=control1;
else if(A==2'b11) next=control2;
else next=start;
end
control0:
begin
if(w) next=write;
else next=control0;
end
write:
begin
if(w) next=write;
else next=start;
end
default:next=start;
endcase
end
3.3 FSM的功能仿真
通常EDA工具都为设计人员提供了测试平台,以验证数字电子系统设计在功能和时序的正确性。不同的EDA工具提供的平台会有差别,但是它们都可以实现对被测试对象加载测试信号,并且能够通过波形输出或文件记录输出等方式来方便地进行观察及比较仿真结果。通过QuartusⅡ自带仿真工具进行仿真结果如图6: