第二章 FPGA学习笔记之 UART
文章来源于 Crazy Bingo博客。
对于单片机 UART 使用没有问题,毕竟已经是人家厂商封装好的硬件电路,针对FPGA需要自己构建出UART的硬件电路出来。
1、UART通信协议
UART:Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,所谓异步,就是说发送和接受不能同时进行,是单工的。
构成: 1,波特率发生器 2,数据接收模块 3,数据发送模块
(1)波特率
在UART通信协议中很重要的一个定义,就是“波特率”,即传输数据时的速率。
(2)数据传输时序
对于UART数据传输的协议,如下所示。其中奇偶校验位与停止位不是必须的。而“起始位、数据位、停止位”则是必须的。一般数据位为8 bits。



2、UART硬件设计
UART是计算机中串行通信端口的关键部分。在计算机中,UART相连于产生兼容RS232规范信号的电路。RS232标准定义逻辑“1”信号相对于地为-3到-15伏,而逻辑“0”相对于地为3到15伏。所以,当一个微控制器中的UART相连于PC时,它需要一个RS232驱动器来转换电平。
如下图所示,只需要一块电平转换芯片即可。电平转换芯片一般用Max3232、Max232,SP3232等,其中Maxim公司的电平转换芯片比较常用。跟PC和处理器相连接的,只要相应的TXD、RXD两根信号线即可。

3、UART Verilog设计
基于FPGA的UART设计,其实在单片机中没有这么一说。单片机中早已有了UART的IP,我们只要调用函数即可,但FPGA中,纯硬件设计电路上,我们想要使用串口来调试,那我们就必须了解彻底UART通信协议,必须自己动手写UART的硬核。利用硬件描述语言,相当的方便。
(1)波特率发生器
Bingo 自己设计“相位控制分频原理”完成此模块的设计。
本模块的功能是生成两个时钟:
a) clk_bps : UART TXD信号线数据发送的波特率
b) clk_smp: UART RXD信号线数据接受的采样速率,以对已波特率的16倍速度采样,捕获数据的中点,在数据最稳态读取数据,达到最大限制的稳定。
(2)TXD发送模块
这部分代码比较简单,因为FPGA是主控,只要根据固定的时序给数据即可。Bingo设计的状态机来完成时序,状态机代码如下:

(3)RXD接收模块
由于接收数据的时候,主控是PC,从机是FPGA,因此FPGA需要采样数据。以上波特率发生器中讲到过,采样时钟clk_bps = 16*clk_bps。FPGA硬件描述,通过计数,当采样到RXD数据起始位信号有效时,0-7-15开始计数,,其中7为数据的中点,最稳定的时刻。因此在此时采样数据,能够达到最稳定的效果。

浙公网安备 33010602011771号