"FPGA与单片机实现数据RS232串口通信的设计"
本文针对由FPGA构成的高速数据采集系统数据处理能力弱的问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强的通用性和推广价值。
FPGA作为高速数据采集系统的核心组件,具有高速数据采集和处理能力,但其数据处理能力相对较弱,需要将采集到的数据送到其他CPU系统来实现数据处理功能。这就使FPGA系统与其他CPU系统之间的数据通信提到日程上,得到人们的急切关注。
本文介绍利用VHDL语言实现FPGA与单片机的串口异步通信电路。整个设计采用模块化的设计思想,可分为四个模块:FPGA数据发送模块,FPGA波特率发生控制模块,FPGA总体接口模块以及单片机数据接收模块。
FPGA数据发送模块的设计根据RS232异步串行通信来的帧格式,在FPGA发送模块中采用的每一帧格式为:1位开始位、8位数据位、1位奇校验位、1位停止位,波特率为2400。本系统设计的是将一个16位的数据封装成高位帧和低位帧两个帧进行发送,先发送低位帧,再发送高位帧,在传输数据时,加上文件头和数据长度,文件头用555555来表示,只有单片机收到555555时,才将下面传输的数据长度和数据位进行接收,并进行奇校验位的检验,正确就对收到的数据进行存储处理功能,数据长度可以根据需要任意改变。
波特率的设置可以算出分频系数,具体算法为分频系数X=CLK/(BOUND*2)。可由此式算出所需的任意波特率。
在VHDL语言中,使用IEEE std_logic_1164.all、IEEE std_logic_arith.all、IEEE std_logic_unsigned.all三个库文件来实现FPGA数据发送模块的设计。entity atel2_bin指令定义了FPGA数据发送模块的接口信号,包括时钟信号txclk、复位信号reset、发送的数据din、允许传输信号start和串行输出端口sout。
在architecture behav中,使用了多个信号变量来实现FPGA数据发送模块的设计,包括thr、len、txcnt_r、sout1、cou、oddb等信号变量。process(txclk)指令用来实现时钟信号txclk的上升沿触发事件,process(reset,txclk)指令用来实现复位信号reset和时钟信号txclk的上升沿触发事件。
本文的设计具有较强的通用性和推广价值,对于高速数据采集系统和单片机之间的数据通信提供了有价值的参考。
知识点:
* FPGA在高速数据采集系统中的应用
* RS232异步串行通信协议
* VHDL语言在FPGA设计中的应用
* FPGA数据发送模块的设计
* 分频系数的计算方法
* IEEE std_logic_1164.all、IEEE std_logic_arith.all、IEEE std_logic_unsigned.all库文件的应用
* FPGA与单片机之间的数据通信解决方案