异步串口通信电路的FPGA实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学术研究 Academic
Forum2011/05 物联网
专用异步串口通信电路的FPGA实现
苏 明,姚冬苹
(北京交通大学电子信息工程学院,北京 100044
)摘 要:提出了一种利用异步串行通信接口电路的FPGA实现方法,该方法运用双端口RAM乒乓操作、CRC校验、状态机、组帧等操作描述了各个功能模块的FPGA设计,同时给出了该异步接口电路在集成开发软件XilinxISE11.1下的Modelsim仿真结果。结果证明,该异步串口通信设计可以简化电路并提高程序的灵活性和实用性,有利于程序在不同场合下的应用。
关键词:异步电路;串口通信;FPGA;CRC校验
中图分类号:TN402 文献标识码:A 文章编号:2095-1302(2011)03-0065-
03FPGA Implementation of Special Asy
nchronous Serial Communication Interface CircuitSU Ming,YAO Dong
-ping(Electronics and Information Engineering,Beijing Jiaotong University,Beijing
100044,China)Abstract:FPGA implementation method of using asynchronous serial communication interface circuit is proposed.The dual-port RAM pingpong operation,CRC check,state machine,framing and other operations are used in the meth-od to describe,the FPGA design of each module.The Modelsim simulation results of the asynchronous interface circuitunder the integrated development of software is presented.The results show that the asynchronous serial communicationwith FPGA resources can simplify circuit design,improve program flexibility and practicality,and benefit program ap-p
lication in different occasions.Key
words:asynchronous circuit;serial interface communication;FPGA;CRC check收稿日期:2011-03-
150 引 言
随着FPGA在电子产品中的广泛应用,多片FP-GA芯片中的数据传输也应用的非常广泛。就传输
数据而言,
串口通信是通信系统和控制系统应用中较为广泛的一种。串口通信分为异步和同步两种方式。本文采用RS 232异步通信协议来设计两片FPGA的之间的数据传输电路,同时,为了保证传输的准确性,还在数据的收发端加入了CRC校验。1 专用异步串口通信接口电路设计
本设计的目的是实现两块基带板之间的数据传输,其通信电路的结构框图如图1所示。在每块基带板上均有一片Xilinx公司的XC4VSX55型FPGA
芯片,两块基带板之间通过柔板相连接。为了节约两片FPGA相互通信的I/O口,设计采用RS
232异步串行通信协议和RS
422接口电平,其传输速率为115 200bps。异步串行通信协议是基于FPGA来实现的,并选用MAX3077作为RS
422电平转换芯片。两片FPGA的全局时钟GLOBAL_CLK均由100MHz
的晶振产生
。图1 通信电路的总体结构框图
本设计将整个电路分为接收基带板与发送基带板两部分接口电路。其中接收基带板接口电路包括数据乒乓读取模块、数据组帧模块、CRC编码模块、
5
6
学术研究 Academic
Forum 物联网 2
011/05串口发送模块;而发送基带板接口电路则包括串口接收模块、CRC校验模块。在接收基带板上,先将无线接收下来的数据进行乒乓存储与读取,再组成发送端所需的帧结构,并在组帧的同时进行CRC编码,最后将组成帧的数据进行串行发送。在发送基带板上,也可通过串口接收数据,并进行CRC校验。当CRC校验通过后,可直接送给后级的数据调制模块进行数据的调制与发送。1.1 数据乒乓读取模块
本模块是前端程序与接口电路的隔离模块。前端基带解调模块先将接收到的基带数据按一定的速率写入RAM,接下来被组帧模块按一定的速率读出并送到串口发送模块发送。因此,两者有着各自的数据线、地址线和控制线。介于此,双端口RAM可以很好的满足要求,为了保证数据读取速率与读取的准确性,将双端口RAM设计成为乒乓模式,这样,读取RAM的速率就不受写入RAM速率的约束,
只要检测到写满标志为1,
就可以以较快的速率读取,而无需担心读空。设计时,可将双端口RAM的大小设置为2块128×8b。1.2 串口发送模块
串口发送模块的主要目的是将需要发送的数据按字节发送到FPGA芯片外的串口电平转换芯片MAX3077上,由其转换成差分RS
422电平后,再将数据送到柔板上进行传输。本接口电路采用的是异步传输方式。为了每个字节的同步需要,在每个发送字节前先发一个0比特作为字节同步。
该模块中主要有分频计数器、发送计数器和移位寄存器。分频计数器可将系统时钟分成所需的波特率,当分频计数器计到一个特定值(将该特定值设为参数)时将采样使能置1,其余时刻均保持0状态。当该模块的发送数据请求管脚收到一个高脉冲的时候,即可将需要发送的字节读取进来送入移位寄存器,同时按照采样使能的频率发送一个同步比特0,然后比特输出计数器加1,当使能的下一个上升沿到来时,将移位寄存器中待发送数据的最高位发送出去,同时将移位寄存器循环右移一位,发送计数器加1,
当发送计数器加到8时,表明一个字节已经发送完毕,此时将发送完毕的信号送一个高脉冲出去,并通知前级可以再填入需要发送的字节数据。1.3 CRC编码与校验模块
采用CRC编码模块是因为其不仅能够加强传输过程中检测错误的能力,而且其实现电路比较简单。本项目中的CRC不仅能够检测收发基带板之间串口传输时出现的错误,而且能够检测基带发送板与接收发射信号的终端之间无线链路传输过程中出现的错误。
最基本的CRC校验码编码方法是用待发送的二进制数据M(x)除以生成多项式g(x),然后将最后的余数作为CRC校验码。从CRC的编码规则可以看出,CRC编码实际上是将待发送的n位二进制多项式M(x)转换成可以被g(x)除尽的n+k位二进制
多项式T(x),所以,解码时可以用接收到的数据去除g(
x),如果余数为零,则表示传输过程没有错误,否则表示存在错误。
本项目中需要对124个字节进行校验,
故采用CRC16的编码方式,生成的多项式采用g(x)=x16
+
x15+x5+1。由于CRC编码的过程本质上是一个循
环移位的模2运算。故可设置一个2字节移位寄存器(CRC),在需要做CRC校验的每一帧数据到来前将该移位寄存器全部设置为1。需要校验的数据按字节送入该CRC校验模块,当数据到来时把数据的最高位和移位寄存器的最高位进行异或并作为反馈值,然后将其存入移位寄存器中的第0b位。移位寄存器的第5b、15b分别存储反馈值与移位寄存器的第4b、第14b的异或值,其余移位寄存器的每一位都存储低一位的值,然后参与校验的每一位数据在时钟的驱动下,再在移位寄存器中右移存储,移完一个字节后,移位寄存器中的两个字节就是CRC的校验结果。在CRC的编码端将所需要进行CRC校验的数据依次送入该模块进行CRC编码,并将编码结果紧跟编码数据一起通过串口发送。在CRC的校验端,可将CRC编码端参与编码的数据以及收到的编码结果依次送入同一个CRC校验模块进行校验,如果校验结果为0,证明传输过程中没有错误,反之则表示传输存在错误,数据不能用。1.4 组帧模块设计
本模块是基带接收板接口电路的核心模块,该模块控制数据乒乓读取模块、CRC编码模块以及串口发送模块。组帧模块所组的帧为每帧127B的定长帧,该模块包含一个帧头和帧尾数据发送计数器、读RAM地址计数器、CRC编码数据发送计数器。当检测到数据存储乒乓RAM的一块写满信号为1时,即启动帧头帧尾发送计数器,将帧头EB91按字节送入串口发送模块,同时将EB91送入CRC编码模块编码。发送完EB91,可将读RAM的使能信号置高,
以66