专用异步串口通信电路的FPGA实现
扫描二维码
随时随地手机看文章
引言
随着FPGA在电子产品中的广泛应用,多片FP- GA芯片中的数据传输也应用的非常广泛。就传输数据而言,串口通信是通信系统和控制系统应用中较为广泛的一种。串口通信分为异步和同步两种方式。本文釆用RS 232异步通信协议来设计两片FPGA的之间的数据传输电路,同时,为了保证传输的准确性,还在数据的收发端加入了CRC校验。
1 专用异步串口通信接口电路设计
本设计的目的是实现两块基带板之间的数据传输,其通信电路的结构框图如图1所示。在每块基带板上均有一片Xilinx公司的XC4VSX55型FPGA芯片,两块基带板之间通过柔板相连接。为了节约两片FPGA相互通信的I/O 口,设计采用RS 232异步串行通信协议和RS 422接口电平,其传输速率为115 200 bps。异步串行通信协议是基于FPGA来实现的,并选用MAX3077作为RS 422电平转换芯片。两片FPGA的全局时钟GLOBAL _ CLK均由100 MHz的晶振产生。
本设计将整个电路分为接收基带板与发送基带板两部分接口电路。其中接收基带板接口电路包括数据乒乓读取模块、数据组帧模块、CRC编码模块、串口发送模块;而发送基带板接口电路则包括串口接 收模块、CRC校验模块。在接收基带板上,先将无线接收下来的数据进行乒乓存储与读取,再组成发送端 所需的帧结构,并在组帧的同时进行CRC编码,最后将组成帧的数据进行串行发送。在发送基带板上,也可通过串口接收数据,并进行CRC校验。当CRC校验通过后,可直接送给后级的数据调制模块进行数据 的调制与发送。
1.1 数据乒乓读取模块
本模块是前端程序与接口电路的隔离模块。前端基带解调模块先将接收到的基带数据按一定的速率写入RAM,接下来被组帧模块按一定的速率读出并送到串口发送模块发送。因此,两者有着各自的数据线、地址线和控制线。介于此,双端□RAM可以很好的满足要求,为了保证数据读取速率与读取的准 确性,将双端口 RAM设计成为乒乓模式,这样,读取RAM的速率就不受写入RAM速率的约束,只要检测到写满标志为1,就可以以较快的速率读取,而无需担心读空。设计时,可将双端口RAM的大小设置为2块128X8 b。
1.2 串口发送模块
串口发送模块的主要目的是将需要发送的数据按字节发送到FPGA芯片外的串口电平转换芯片MAX3077上,由其转换成差分RS 422电平后,再将数据送到柔板上进行传输。本接口电路采用的是异步传输方式。为了每个字节的同步需要,在每个发送字节前先发一个0比特作为字节同步。
该模块中主要有分频计数器、发送计数器和移位寄存器。分频计数器可将系统时钟分成所需的波特率,当分频计数器计到一个特定值(将该特定值设为 参数)时将釆样使能置1,其余时刻均保持0状态。当该模块的发送数据请求管脚收到一个高脉冲的时候,即可将需要发送的字节读取进来送入移位寄存器,同时按照采样使能的频率发送一个同步比特0, 然后比特输出计数器加1,当使能的下一个上升沿到来时,将移位寄存器中待发送数据的最高位发送出去,同时将移位寄存器循环右移一位,发送计数器加1,当发送计数器加到8时,表明一个字节已经发送完毕,此时将发送完毕的信号送一个高脉冲出去,并通 知前级可以再填入需要发送的字节数据。
1.3 CRC编码与校验模块
釆用CRC编码模块是因为其不仅能够加强传输过程中检测错误的能力,而且其实现电路比较简单。本项目中的CRC不仅能够检测收发基带板之间串口传输时出现的错误,而且能够检测基带发送板与接收发射信号的终端之间无线链路传输过程中出现的错误。
最基本的CRC校验码编码方法是用待发送的二进制数据M(工)除以生成多项式g(z),然后将最后的余数作为CRC校验码。从CRC的编码规则可以看出,CRC编码实际上是将待发送的"位二进制多项式M(Q转换成可以被g(x)除尽的儿+艮位二进制 多项式T(z),所以,解码时可以用接收到的数据去除g(x),如果余数为零,则表示传输过程没有错误,否则表示存在错误。
本项目中需要对124个字节进行校验,故釆用CRC16的编码方式,生成的多项式采用g(a:) = rclf,+刘'+ / + 1。由于CRC编码的过程本质上是一个循环移位的模2运算。故可设置一个2字节移位寄存器(CRC),在需要做CRC校验的每一帧数据到来前将该移位寄存器全部设置为1。需要校验的数据按字节送入该CRC校验模块,当数据到来时把数据的最高位和移位寄存器的最高位进行异或并作为反馈值,然后将其存入移位寄存器中的第0b位。移位寄存器的第5 b、15 b分别存储反馈值与移位寄存器的第4 b、第14 b的异或值,其余移位寄存器的每一位都存储低一位的值,然后参与校验的每一位数据在时钟的驱动下,再在移位寄存器中右移存储,移完一个 字节后,移位寄存器中的两个字节就是CRC的校验结果。在CRC的编码端将所需要进行CRC校验的数据依次送入该模块进行CRC编码,并将编码结果紧跟编码数据一起通过串口发送。在CRC的校验端,可将CRC编码端参与编码的数据以及收到的编码结果依次送入同一个CRC校验模块进行校验,如果校验结果为0,证明传输过程中没有错误,反之则表示传输存在错误,数据不能用。
1.4 组帧模块设计
本模块是基带接收板接口电路的核心模块,该模块控制数据乒乓读取模块、CRC编码模块以及串口发送模块。组帧模块所组的帧为每帧127 B的定长帧,该模块包含一个帧头和帧尾数据发送计数器、读RAM地址计数器、CRC编码数据发送计数器。当检测到数据存储乒乓RAM的一块写满信号为1时,即启动帧头帧尾发送计数器,将帧头EB91按字节送入串口发送模块,同时将EB91送入CRC编码模块编码。发送完EB91,可将读RAM的使能信号置高,以进入读RAM状态。如果读RAM的读地址计数器小于121,同时检测到串口发送模块字节发送完毕信号为1时,地址计数器加1,这样就可以不断将RAM 中的数据按字节送入串口发送模块,同时将从RAM 中读出的数据送入CRC编码模块编码。当读地址计数器加到121时,若检测到第121个字节发送完毕信号为1,则将读RAM的读使能信号拉低,同时将CRC的输出信号送入串口发送模块,当检测到串口发送模块发送完CRC编码的第二个字节发送完毕时,即可将状态跳回帧头帧尾发送状态,以将帧尾4E送入串口发送模块,同时将帧头帧尾数据发送计数器加1。当该字节发送完毕后,再将所有寄存器清零,同时将状态机置为初始状态。
1. 5 串口接收模块
串口接收模块可将基带接收板上发出的异步串行数据接收下来存在双口RAM中,在接收数据的同时将数据按字节送入CRC校验模块,再校验接收下来的帧是否为有效帧。通过CRC校验时则将数据整帧读走进行调制发送,否则丢弃。
为了能够准确地从串口线上接收数据,解决两个基带板上的全局时钟同频不同相的问题,避免釆样时钟采集到串行数据的跳变边沿,通常需要在数据的中 间进行采样,以保证采到的数据值是唯一的。
通过本模块分频计数器可将时钟分成传输波特率的八倍,并给出相应的采样使能,再用该采样使能去检测传输数据的边沿。因为每个字节前都加入了同步比特0,所以,当采样使能检测到下降沿时,立即起动一个采样计数器。当采样使能为1时,采样计数器加1。当釆样计数器计到3时,正好是同步0比特的中间,此时可将釆样计数器清零,此后,在没有接收 完一个字节时,采样计数器都是计到7再清零。而每次串行数据都是在采样计数器计到7时循环移入一个8 b移位寄存器。
这样,每次移入的串行数据都是在数据的中间采 样的,从而保证了数据传输的准确。此外,还需要设 置一个比特接收计数器对接收到的每比特数据进行 计数,每次采样计数器计到7时,比特接收计数器加1,当比特接收计数器加到7时,表示一个字节的数据 已经接收完毕,此时便可以将数据存到双端口 RAM中了。数据的存储过程也是采用乒乓存储的方式,这里不再赘述。
2 接口电路的仿真验证
将串口发送端口和串口接收端口连接在一起进行时序模拟仿真的仿真结果如图2所示。该仿真结果表明,本设计电路能够实现基带接收板双端口RAM中数据的乒乓读取,之后可再进行组帧、CRC 编码、串口发送接收、CRC校验及乒乓存储等功能。同时还可以将程序下载到FPGA中运行。此外,运行结果还表明,该电路工作稳定,而且具有较高的实用价值。
3 结语
本设计电路采用FPGA芯片较好的实现了两片FPGA中数据互相传输的问题,并可对所传输的数据 进行一定的数据处理,(如CRC校验以及数据组帧), 因而从一定程度上简化了两块基带板之间的数据传输问题。另外,由于FPGA的可编程特性及程序的可移植性,因此,采用参数化的程序设计,还可以对本设计电路进行功能扩展,以满足更高的要求。