一、FPGA接收其他设备通过uart协议发送的数据
使用ISSP查看uart接收模块接收到的数据,串口接收到的数据由PC机发出
1. uart通信协议工业环境下数据接收实现(干扰状态,进行一些处理保证稳定性)
工业应用中,往往有较强的电磁干扰,因此只采集一次作为该数据的电平判定不保险,需要多次采样求概率
将每一位数据平均分成 16 小段,在刚发生变化和即将发生变化时期,数据极可能不稳定,因此灰色这段忽略。考虑中间6次采样,选取出现次数较多的电平。各占一半时判定当前通信线路环境非常恶劣,数据不具有可靠性,不进行处理。
将中间6次结果加起来(3位),>3(最高位为1)为1,<3为0,最高位数即为统计结果
reg [2:0] r_data_byte [7:0]8个3位寄存器,r_data_byte[0][2]:第0个寄存器的第2位
2. 异步时钟同步处理
Rs232_tx是外部输入信号,是异步信号,对其采样可能采集到不定态,D触发器会发生振荡,振荡后在下一个时钟信号到来前稳定下来,其稳定结果不确定,因此经过两级寄存器同步处理(与系统时钟变化一致)。
第一个D触发器采集异步信号,q有振荡,但在下一个时钟信号前稳定,因此第二级D触发器(延迟一个时钟周期)采集到的是稳定态
3. ISSP探针probe使用
外部输入Rs232_rx,使用探针(8位)探测 data_rx_r(只有在rx_done高电平时将data_rx赋值给data_rx_r)
二、时序图
uart发送端发送一个字节Byte(8bit)数据时序图
每个bps_clk上升沿发送数据
串口接收时序图
对数据线 Rs232_tx 上的每一位进行采样:开始和结束段数据变化,一般认为每一位数据的中间点最稳定,因此一般采集中间时刻时的电平即认为是此位数据的电平
bps_clk上升沿对齐中点,在每个上升沿读取数据
三、模块设计
起始位检测进程:起始位低电平,检测到下降沿,表面可能数据传输,开启波特率时钟(异步转 同步(两个同步寄存器s0_)、边沿检测(两个暂存寄存器tem0_,比较前后状态))。起始位可能检测错误,第12位起始位不为0(>=3)可判断为检测错误
波特率产生模块:每位采集16次,频率:Bps*16
数据接收进程
串口接收模块框图
先有顶层设计思路,再分块实现
注意
1.