基于FPGA的频谱分析仪的设计与实现
5.1.3数据接收模块
数据接收模块reciever式根据RS232串口协议,在设定的波特率时钟下波特率时钟的驱动下接收RXD的串行信号,并将其转换为并行数据。
由于串行数据帧和接收时钟是异步的,由逻辑1转为逻辑0可以被视为1帧数据的起始位。在复位信号resetr无效的情况下串口传送可以正常工作,如果复位信号resetr有效,串口不在工作状态,无法启动。当resetr无效时,串口接收器开始捕捉起始位,在波特率驱动时钟bclkr上升沿到来时检测输入数据RXD是否为低电平,如果连续检测到的四个时钟上升沿到来时输入都为低电平才认为起始信号有效。在起始位有效的情况下每隔16个bclkr时钟周期采样一次,这样可以保证每次都在数据的中点处采样。采样结果都移入接收移位寄存器中,根据设定的接收的数据位数接收,比如本设计设定的采样数据位数是8,则采样数据到8比特是将数据输出,等待下一帧数据的到来。
1. 数据接收模块封装图
数据接收模块的封装图如图5-6所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-444.png
各引脚功能介绍如下:
bclkr:波特率驱动时钟信号。
resetr:复位信号。
rxdr:串行数据输入端口。
r_ready:一帧数据接收完成标志信号。
rbuf:接收以为寄存器的并行输出端口。
2. 数据接收模块状态转换的实现
依据UART接收模块的功能,此模块将采用状态机来实现,其状态转换图如图5-7所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-11054.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-9783.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-20906.png
根据此次设计的设计思路,共对此状态机设定了六个状态:r_start(等待起始状态)、r_center(判断起始位状态)、r_wait(等待数据中点采样状态)、r_sample(数据采样状态)、r_stop(数据输出状态)和r_hold(输出采样完毕状态)。
r_start状态:当复位后,状态机将处于这一状态。在此状态下接收起始位,如果接收到的第一位是低电平,在下一个时钟脉冲到来时进入到r_center状态,否则继续等待起始位。
r_center状态:求起始信号的中点,判断起始信号是否有效。若连续接收到的4个信号均为低电平,则认为起始位有效,在下一个时钟脉冲到来时进入到r_wait状态,否则起始位无效,返回r_start状态继续等待起始位。
r_wait状态:等待采样,等待计满15个bclk1,在第16个bclk1进入r_sample状态进行数据位的采样检测,同时也判断采集的数据位是否达到数据帧的长度,如果达到了,进入r_stop状态。
r_sample状态:数据位采样检测状态。待一位数据采样完后进入r_wait状态,等待下一位数据的到来。
r_stop状态:输出采样到的数据,并无条件转到r_hold状态。
r_hold状态:输出数据接收完毕信号,在下一个脉冲到来时进入r_start状态,等待下一帧数据的起始位。