Menu Close

UART 接收器设计(RXD)–判多

上节内容讲解了过采样原理以及利用过采样进行数据中心位置的采样,从而消除采样时由于采样点相位不确定带来的亚稳态、抗干扰性能差,数据误判等因素。本节内容介绍另外一种常用的方法,即将过采样的每个值进行统计,观察在一个数据位的采样中0与1的比例,从而判定该位是0还是1。例如在位的采样中,如果是8倍过采样,则每个数据位总共采样8次,理论上讲如果该数据位为0,则8次采样的值都应该为0。如果该位为1,采样的8次结果都应该为1,但由于频率偏移,采样相位偏移,噪声等各种因素的影响,最终会出现非全1和非全0的情况。因此需要利用判决。下面就起始位的判多采样为例进行介绍。为了方便说明问题,如图1,2展示了奇数次过采样(9次)对数据位(bit)的采样过程。实际采样中一般采用偶数次过采样(如4次或8次等),这与2进制的进位特性有关。

图1

图2

1.判多的方式依然需要边沿检测配合

边沿检测可以正确定位数据的位置。如图1,由于0采样点为高电平,1采样点为低电平,可以知道在此处有下降沿变化。由此推断采样点1,2…8应该分布在整个数据为上。图2可以看出,如果不考虑边沿检测,从采样点1到8可能随机分布在不同的接收位上,极端的情况如图2,一半采样在IDLE位(高电平),一半在起始位,在这种情况下,判多方法也一样无法正确将接收的位提取出来。如图2,从第一个0采样点到到采样点8,统计为1的个数为5,0的个数为4,判定为1,此时没用捕获到起始位。如果从第2个0采样点开始,如果起始位后面的数据为1,9次采样后的结果也是1多0少,因此将会丢失起始位的判定,从而无法成功捕获整个数据帧。因此需要首先检测边沿,确定位起始后在进行判多处理。

除了边沿检测,是否还有其他的方法可以成功捕获起始位呢?可以使用滑动串口的方法,即在IDLE状态通过移位的方式动态统计8采用中1的个数,判定起始位。

 

2. 判决方法

如图1,一旦边沿确定后,利用采样点1…8的值就可以进行判决,判决方法如下:采样点1…8中1的个数大于等于5,判定该数据位为1,否则为0。

3. 其它接收位的判定

起始位正确定位后,紧随起始位的其它位(数据位、校验位、停止位等)不用判断边沿,直接从下一个的0采样点开始统计每个位的1的个数即可。

例1,利用判多设计RX的参数化接收程序,要求使用8次过采样。


 

仿真程序:仿真程序继续使用上节内容提供的(中心对齐)testbench,


 

图3-1

图3-2

由于判多相对于中心对齐的采样相对复杂,因此例1对判多的描述采用了3段式状态机实现,第一段采用实现次态(sample_st_ns)到现态(sample_st_cs)的转换。第二段描述了次态逻辑,根据sample_count_cs的值实现状态跳转。第三段描述了rx的数据采样及实现。

 

Posted in FPGA, FPGA 教材教案, IP开发, Quartus II, Quartus II, Verilog, Vivado, Vivado, 教材与教案, 文章