UART接口的FPGA实现(一)——UART接口的相关基础知识

UART系列文章先介绍UART的基础知识,然后自己动手写Verilog代码实现这个接口并进行测试,最后介绍Xilinx的AXI-uartlite IP核。本系列文章编写时参考了乔庐峰老师编写的VerilogHDL教材第15章和Xilinx官方文档pg142-axi-uartlite。

一、UART简介

UART是FPGA工程师在工作中会接触到的最常见的接口之一。它的全名是Universal Asynchronous Receiver/Transmitter,通用异步收发器。为什么叫异步收发器呢?因为收发双发通信时不需要严格的时钟同步。还记得前面讲的SPI接口吗,SPI的数据通信必须带着时钟一起,是一种同步通信协议,而UART的数据通信是不需要带着时钟的,是一种异步通信协议。就是因为这个异步,UART的通信机制比SPI稍微复杂,不同设备之间的低速通信使用UART协议时,它们会以字符的方式进行数据传递。

二、UART字符格式

UART采用的是一种起止式的异步通信协议,所谓起止式就是传输一个字符总是以起始位开始,以停止位结束,特点是一个字符一个字符地传输,字符之间没有固定的时间间隔要求。这样做的好处是每一个字符收发双方都可以重新建立同步,哪怕双方的时钟频率略有偏差也没关系,以此保证异步通信的可靠性。下图给出UART的字符格式。

图1 UART字符格式

起始位:逻辑0,表示开始传输1个字符。

数据位:在起始位之后的多个数据比特,先传输低位比特,一般情况下是7个或者8个,本系列文章以8个为例。

奇偶校验位:在数据位之后加上奇偶校验位,使1的个数为偶数(偶校验)或奇数(奇校验),以此来校验数据传输过程中是否出现误码,不过这样只能校验单数个误码,本系列文章以偶校验为例。

停止位:一个字符的结束标志,逻辑1,至少需要1比特的宽度。

空闲位:当线路上没有数据传输时处于逻辑1状态,表示线路的空闲。

三、UART协议的通信模型

UART接口的一般应用场合是一端受控于CPU,一端与另一个UART接口通过外部线路互联,下图是UART接口的通信模型示意图。

UART接口的FPGA实现(一)——UART接口的相关基础知识_第1张图片 图2 UART通信模型示意图

上面这个模型的基本工作过程是这样子的:

接收过程 —— 接收控制器在允许接收的条件下接收数据,然后进行奇偶校验,无论有无错误都将数据缓存进“接收寄存器”并通知控制电路产生中断,有错误则将“错误寄存器”设置成1,CPU接收到中断,经查询是接收中断,并同时确认了“错误寄存器”有无错误,之后CPU读取“接收寄存器”的值,如果没有错误则该值有效,如果有错误则舍弃掉这个值。控制电路确认CPU读走数据之后告知接收控制器可以继续接收下一个值。

发送过程 —— CPU将一个值写入“发送寄存器”中,然后再向“命令寄存器”写一个命令通知控制电路,表示可以发送数据了,控制电路这时就告知发送控制器进行数据发送,发送控制器计算出奇偶校验位之后将数据发送出去,发送完成之后则通知控制电路产生中断,CPU接收到中断,经查询是发送中断,表示本次发送已经完成,可以发送下一个数据。

除了上面两个基本过程,UART也可以工作在不同的波特率下(这里的波特率表示每秒钟传输的比特的个数,反映到具体设计中就是传输数据的时钟频率),所以在设计时也要考虑到CPU配置特定寄存器控制传输波特率的这个过程。

下一篇文章将会详细介绍UART接口内部的寄存器并给出设计代码。

 

 

你可能感兴趣的:(简单接口开发,fpga,串口通信,uart,verilog)