问题记录总结1----串口项目中遇到的问题1

描述问题:当对串口的空闲状态进行曼彻斯特编码后,在pe_uart_rx如何识别数据的起始是解码成功的关键。

当我设置三个连“”1“”作为数据起始码时,如何识别它们是问题的关键。

问题难点:使用与串口发送相同的波特率时钟(不同之处再于稍稍延后约2000ns,以保采到电平)时,若使用bps_clk一直采,容易采到空闲时的“1”,从而识别错误。

 若停止使用bps_clk,使其只采集数据位,那么前导码又识别不了,根本无法采集到数据位。

目标:需要找到办法控制它在3个连“1”时开始bps_clk 或者使bps_clk在除前导码以外的位置均采不到3个连“1”。

问题解决:最初想的办法是在检测到前导码前一直进行数据的过采样,直至检测出3个连“1”后再切换回采数据沿,方法虽行的通,但是过于繁琐且耗费资源过多;后经过反复查看多种数据组合的signalTap后发现,空闲编码时“0”“1”电平均正常,因此只需保证在3个连“1”前有大于1个bps_clk时钟周期的0,保证它在3个连“1”到来前状态处于CHECK_1即可。这个问题需修改pe_uart_tx代码

            case(tx_cnt)
				0  : pe_tx_Data <= 1'b0; 
				1  : pe_tx_Data <= 1'b0; 
				2  : pe_tx_Data <= 1'b1; 
				3  : pe_tx_Data <= 1'b1; 
				4  : pe_tx_Data <= 1'b1;
				5  : pe_tx_Data <= !s0_pe_Data[0];
				6  : pe_tx_Data <= s0_pe_Data[0];
				7  : pe_tx_Data <= !s0_pe_Data[1];
				8  : pe_tx_Data <= s0_pe_Data[1];
				9  : pe_tx_Data <= !s0_pe_Data[2];
				10 : pe_tx_Data <= s0_pe_Data[2];
				11 : pe_tx_Data <= !s0_pe_Data[3];
				12 : pe_tx_Data <= s0_pe_Data[3];
				13 : pe_tx_Data <= !s0_pe_Data[4];
				14 : pe_tx_Data <= s0_pe_Data[4];
				15 : pe_tx_Data <= !s0_pe_Data[5];
				16 : pe_tx_Data <= s0_pe_Data[5];
				17 : pe_tx_Data <= !s0_pe_Data[6];
				18 : pe_tx_Data <= s0_pe_Data[6];
				19 : pe_tx_Data <= !s0_pe_Data[7];
				20 : pe_tx_Data <= s0_pe_Data[7];
				default:pe_tx_Data <= 1'b0; 
			endcase

修改后可正确识别前导码并入数据解码状态 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值