最后还要在VC++程序中开发与USB设备进行数据读写的软件接口。这是通过构建MyUSB类来实现的[10],类中的成员变量包括USB设备句柄、发送数据缓冲区、接收数据缓冲区以及发送和接收数据的个数。类中的成员函数包括打开USB设备、发送缓冲区中的数据、接收数据到缓冲区和关闭USB设备。MyUSB类的头文件如下:
class MyUSB{
private:
HANDLE hDevice;
char ReciveDataBuf[100];
char SendDataBuf[100];
int ReciveDataCount;
int SendDataCount;
public:
bool OpenDevice();
bool CloseDevice();
bool SendData(SendDataCount, SendDataBuf);
bool ReciveData(ReciveDataCount, ReciveDataBuf);
};
3.2 测试平台软件模块和硬件模块的搭建
软件模块是由:用户测试可视化界面、故障类型和故障定位分析程序、测试响应文件、测试激励文件和被测芯片配置文件组成。
硬件模块是由:被测芯片配置控制器和被测芯片及其外围电路组成。

图5
图5是整个系统的运行流程。
①由用户启动测试指令;
②个人计算机从FPGA芯片配置库中读取二进制文件,并通过被测芯片配置控制器对FPGA芯片中的SRAM进行写操作,完成配置;
③调用测试激励库中的测试激励对FPGA芯片施加测试激励;
④回收测试响应并与测试响应库中的二进制文件进行对比;
⑤运行故障类型和故障定位分析程序对FPGA芯片的故障进行诊断;
此时,如果测试完毕那么得出诊断结果,否则就需要返回第二步继续执行此循环。
4 测试验证和故障诊断
利用软硬件协同测试平台,对SRAM型FPGA内部的可编程逻辑资源进行了测试。测试理论是基于与门和或门级联电路的方法,针对的芯片是Xilinx公司的XC2S100,此款芯片含有20行×30列=600个CLB。
在测试的过程中故障覆盖率,其中一部分CLB被配置为被测对象,另一部分CLB被配置为与门阵列,最后一部分CLB被配置为或门阵列。这就需要三次角色转换(配置)才可以完成对所有CLB的测试。
图6给出了这种方法的测试示意图。

图6
被测对象CLB的配置代码为:
moduleTestCLB(CLBTestIn,CLBTestOut,Clk,Set);
input[7:0]CLBTestIn;
inputClk,Set;
outputreg [7:0]CLBTestOut;
always@(posedge Clk)
begin
if(Set)
CLBTestOut<=CLBTestIn;
else
CLBTestOut<=CLBTestOut+1;
end
endmodule
被测对象CLB可能存在着恒定为0/1状态故障,使得数字系统难以正常工作。
严格按照基于与门和或门级联电路的测试理论对FPGA芯片进行了三次配置,并施加测试激励和回收测试响应,对FPGA芯片进行了故障诊断。FPGA测试系统的界面如图7,测试结果见表格1。
5 结束语
在FPGA测试中,为了解决故障覆盖率和测试时间之间的矛盾,利用的是基于阵列的测试方法。
这种方法的推出使得测试时间不会随着FPGA密度的增加而线性增加。既可以获得高故障覆盖率,又可以大大缩短测试时间。
随后开发了软硬件协同测试平台对FPGA测试理论进行了验证,基于此平台可以继续加深对FPGA测试理论的研究,并可以对FPGA芯片进行相关测试,尤其在FPGA技术迅猛发展的今天,可以为FPGA芯片的稳定应用提供性能保障。

图7
XC2S100测试结果
|
施加测试激励
|
回收测试响应
|
诊断结果
|
CLBTestIn
|
Clk个数
|
与门阵列输出
|
或门阵列输出
|
芯片
配置次数
|
第一次
|
OX00
|
8
|
OX00
|
0X08
|
此阵列存在恒定为0状态故障
|
第二次
|
OX55
|
16
|
0X65
|
0X65
|
此阵列没有恒定为0/1状态故障
|
第三次
|
OXAA
|
24
|
0XC2
|
0XFF
|
此阵列存在恒定为1状态故障
|
表格1
参考文献:
[1]杨海钢,孙嘉斌,王慰.FPGA器件设计技术发展综述.
2/2 首页 上一页 1 2 |