□唐雨辰 吉明明 苏圣超 马笑尘 王慧然 蔡昭嵘 张嘉兴
基于FPGA相较于嵌入式编程更为灵活、处理速度更快的特点,本文使用FPGA设计一个可以检测环境温度与湿度并将其显示在液晶屏上、能够对火情进行报警的公共交通环境综合检测系统,并使用循环冗余校验码对所采集的数据进行传输。本文简要介绍了基于XILINX ISE 12.4的循环冗余校验码仿真实验以及由循环冗余校验码进行数据校验的环境监测系统构成和设计思路,并将其与基于嵌入式的公共交通环境综合检测系统进行对比。在此基础上,简要分析嵌入式系统与FPGA系统对初学者的利与弊,从而方便在今后项目中的选择使用。
本文选用XILINX的Spartan6系列芯片XC6SLX9作为仿真芯片,以并行硬件方式对循环冗余校验码进行实现。
(一)循环冗余校验码。CRC(Cyclic Redundancy Check)是各类数字通信系统中应用最为广泛的错误检测算法之一,它代表着循环冗余码校验或简单的循环冗余校验[1]。大多数流行的通信协议都使用循环冗余校验进行错误检测,是因为循环冗余校验码使用极其广泛、漏检率较低且便于实现[2]。
(二)线性反馈移位寄存器。LFSR(linear feedback shift register),即线性反馈移位寄存器,是给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器,而循环冗余校验正可以通过LFSR进行实现[3]。如表1所示,展示出了输入数据经过LFSR多次移位后依据“0⊕X=X”化简的结果:CX为输出循环冗余校验码的位数,DX为输入数据的位数,“⊕”为异或运算符。
(三)仿真实现。根据表1的移位化简结果进行编程,并使用ISE 12.4软件进行仿真,可以得到如图1所示的仿真波形。由于“reset”信号的存在,在该信号保持高电平的情况下,校验码会被正常运算,如果该信号因为故障或者人为拉低,整个校验码的计算过程将会停止,其存储的值也将被清零。
表1 LFSR多次移位化简结果
图1 循环冗余校验仿真波形
FPGA系统选用XILINX的Spartan6系列芯片XC6SLX9作为控制器,采用12864B液晶显示屏、DHT11温湿度传感器、YG1006火焰传感器等I/O设备。
(一)系统构成。FPGA系统选用并行收发模式下的12864B液晶显示屏与拉高状态下的4*4按键组成人机交互界面;串行收发总线的DHT11温湿度传感器以及1位二进制输出的YG1006火焰传感器作为外界条件接收装置;3.3V供电的有源蜂鸣器作为警报装置。各个部件之间的逻辑关系通过Verilog的“always @ (*)”块进行连接,并通过串口通信与上位机(计算机)取得数据上传链路,传输过程使用循环冗余校验码作为数据收发有无误码的校验方式。
(二)系统对比。FPGA系统与基于嵌入式的公共交通环境综合检测系统在代码编程上进行对比,可以明显发现两者编程思路不同——FPGA系统更倾向于各个部件运行时的时序关系,而嵌入式系统更倾向于各个部件运行时的逻辑关系。从而导致在部件增多,即相互制约影响因素增多的情况下,嵌入式编程难度会随之上升,代码的臃肿程度也不言而喻。
在系统运行方面,FPGA系统运行更为流畅,尤其是在4*4键盘的扫描读取上,误读与漏读情况明显较少。但是,FPGA系统的层次结构较嵌入式系统而言较为单调,无法像嵌入式系统那般层层递进,有一套逻辑性强的菜单关系。
本文简单介绍了循环冗余校验码的并行硬件实现原理,并对该方法的实现做了仿真,之后对基于FPGA的环境检测系统的系统构成作了说明,并通过与嵌入式系统下的环境监测系统对比,得出了:时序性强、逻辑功能要求较低的情况下FPGA占优势,反之嵌入式在逻辑关系要求高的情况下有不可替代的作用。