该解码模块主要由解码状态机控制。状态机的状态由初始态、数据解码态,以及最后的解码成功和解码失败状态组成。接收到解码开始信号时,状态机由初始态跳转到数据解码态开始解码,在解码过程中,如果发现输入的数据违背了编码规则或不符合命令的设置,则直接跳入失败状态。在该状态下,会有一个解码失败信号error产生并输出。如果解码顺利进行到结束,则跳转到解码成功状态,会有一个解码成功信号data_success产生并输出,控制下一个模块的工作。这样解码状态机一边接收待解码数据,进行解码处理,一边将前面处理完的数据输出给CRC5/16校验模块,实现了类似于流水线的工作,节省了解码时间。
解码模块接收部分通过采样信号接收待解码数据,这样便只需检测采样信号,节省了计数器的消耗。采样到的数据首先进行帧头检测,判断使用的帧头类型及编码形式,若帧头检测正确,则实施去帧头处理,将有效数据通过控制状态机流程来进行解码。而其他控制信号,即来自解码预处理模块的数据开始传输指示data_start,数据传输结束指示data_end,数据传输错误指示data_error则直接控制状态机状态的转换。
解码完成之后,根据前面发送命令的类型,对解码后的数据进行CRC5/16校验,若校验正确,则去掉校验位,将有效数据输出;若错误,则返回给状态机,发出解码错误指示。同时,根据状态机所处的特定状态,在每一个解码数据期间会输出持续一个周期的数据采样信号sclk,以及在数据开始解码时便与解码数据同步输出的信号data_out_flag,以便后续模块进行数据的采样与控制。
5 软件仿真与硬件测试
以上各模块均使用硬件描述语言实现。在QUARTus II9.0中全部编译通过,满足时序要求,编译报告显示本设计共消耗了679个LE资源。调用Modelsim软件仿真验证。使用了Quartus II软件的Signaltap逻辑分析仪,捕捉了读写器实际工作时FPGA的编解码数据。
图8是读写器先后发送不同命令并与标签交互的部分流程。图9是读写器发送的Query命令的PIE编码,所发送的命令数据是1000_00110000 0000010101,其中前4位1000为Query命令的命令码,后面18位则为命令数据。
图10是读写器接收到标签返回的miller2编码信息后的操作。为了便于观察,将解码后的数据也作为一路信号显示,即decode_data。最后一路信号是串口要发送的数据。图10中的enc_cmd_data_out信号是读写器接收到标签返回来的信息后,发出的ACK命令,发送的命令数据为01_0001111010100111,其中前两位01为ACK命令的命令码,后面的16位数据按照协议要求为标签返回的RN16。
图11是在读写器工作时利用Signaltap逻辑分析仪捕获到的解码后的标签数据及采样信号。
结语
本文介绍了在EPCC1G2协议下,利用FPGA快速处理大量数据流的优势,实现UHF RFID读写器中编解码模块的设计方案,解决了读写器读取标签速率难以提升的问题。经过软件仿真与实际硬件测试,读写器工作良好,速度、性能均得到显著提升。
本文关键字:读写器 编、解码-加、解密电路,单元电路 - 编、解码-加、解密电路
上一篇:用8051软件编程的编解码电路