去除了状态机的RX模块要怎么设计呢?先梳理一下要完成哪些模块
1)判断什么时候收到数据?即检测帧数据中的start位,通过检测出现下降沿从而判定开始接收数据。—— negedge_detect
2)判断接收单帧数据的时间段?从检测到start位开始,到最后的停止位传完。总共跨越11个bit位,然后再第12个bit位的中途就可以关闭。——start_recieve_flag
3)每bit计数clk,进入数据接收区域了再开始算,脱离这个区域就清零。——baud_cnt
4)计算bit数,1bit起始位+8bit有效数据位+1bit校验位+2bit停止位。—— bit_cnt
5)数据传输,有效数据位的数据接收,bit_cnt>=1,bit_cnt<=8——rx_data
6)数据校验,check_mode_bit,^{rx_data,check_mode_bit} == CHECKMODE
//2022.6.30
//edgar.yao
//uart rx blaock
module uart_rx(
input clk,
input rst_n,
input rx,
output[7:0] rx_data,
output rx_data_valid
);
parameter CHECKMODE = 1;
parameter BAUD_NUM = 50_000_000/115200;
//(1)define all