基于FPGA的串口通信模块设计(原创)
0赞基于FPGA的串口通信模块设计
利用ADI公司的一些处理芯片时,常需要处理器与外围电路建立通信,其中,串口是比较常用的一个,下面进行简单的说明,外围电路串口模块的设计思想。
首先,先简单介绍一下串口协议,串口通信的基本帧有10个Bit,其中,第一位是起始位,低电平(0)有效,紧接着后面的8位是信息位,最后1位是结束位,高电平(1)有效,串口的通信速率有9600Baut/s 、19200Baut/s等。基本的串口通信模块结构如下所示:


串口发送模块很简单,只要给出串口的波特率就OK了,一般的通过串口通信需要发送端一个数据输入口,并且要有数据有效位,当数据满8个的时候就可以按照串口的协议往外发送数据。与发送模块相比,串口接收模块相对就要复杂一些,串口通信是异步通信,没有统一的时钟工作,所以,如何检测到起始位则是比较关键的,假如约定串口的通信速率是9600Baut/s,如果在接收端用速率为9.6k的时钟进行采样并进行起始位的检测,则基本上不会正常的接收并检测到起始位,因为通信速率有一个容错范围的问题,即标称的通信速率是9600Baut/s,则未必就是真正的9600Baut/s,在9.6K上下浮动几十赫兹之内是允许出现的误差,比如,串口发送端的速率可能是9580Baut/s,如果用9.6K的时钟采样,则就不一定能够检测到起始位,即如果用9.6k的时钟采样则抗干扰能力较差,基本达不到正常通信的要求.因此,考虑到上述情况,在串口接收端通常采用高于10倍通信速率(一般是10倍)的采样率进行采样,并进行起始位的检测,所以,理论上讲,在一个起始位的持续时间内,就可以检测到至少有9个低电平(0),这时可以设置一个计数器,用来计采样的低电平的个数,一旦低电平的个数超过9个,则认为起始位来了,这时,可以按正常通信率的时钟速率进行采样,以获得正常的8位有效数据位信息,(在此,再强调一下,接收信息位的时候为了增强通信的抗干扰性,应该在每个信息位的中间位置进行采样,)采到8个有效数据位以后,一般是以总线的形式给出数据,并且给出一个数据有效标志信息.
