微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 带硬件地址识别的UART IP的设计和实现

带硬件地址识别的UART IP的设计和实现

时间:06-05 来源:互联网 点击:

在通信和控制系统中,常使用异步串行通信实现多块单板之间的辅助通信,各个单板通过总线方式连接。为了实现点对点通信,需要由软件定义一套较复杂的通信协议,过滤往来的数据,消耗了CPU较多的时间。89C51单片机有一种九位通信方式,采用一位地址位来实现通信对象的选择,只对发往本地址的地址发生中断进而接收数据。通用的UART芯片如16C550和89C51等构成总线式的通信系统时,需要由CPU通过软件处理接收到的地址和产生九位的数据。本文介绍的UART采用Verilog HDL硬件描述语言设计,可以用FPGA实现,可应用于SoC设计中。其主要特性如下:

·全硬件地址识别,过滤数据不需要CPU的介入;支持一个特殊地址,可用于监听和广播。
·支持查询和中断两种工作方式,中断可编程。
·接收和发送通路分别有128Byte FIFO,每个接收字节附带状态信息。
·设计采用Verilog HDL语言,全同步接口,可移植性好。
·支持自环测试功能。
·波特率可以编程,支持八位或者九位两种数据格式。

设计的UART的九位串行数据格式如图1所示。在空闲状态,数据线处于高电平状态。总线由高到低跳变,宽度为一个波特率时间的负脉冲为开始位,然后是8bit的数据位。数据位后面是1bit的地址信息位。如果此位是1,表示发送的字节是地址信息;如果此位是0,传输的是正常数据信息。地址指示位后是串行数据的停止位。

1 UART设计

UART采用模块化、层次化的设计思想,全部设计都采用Verilog HDL实现,其组成框图如图2所示。整个UART IP由串行数据发送模块、串行数据接收模块、接收地址识别模块、接收和发送FIFO、总线接口逻辑、寄存器和控制逻辑构成。串行发送模块和接收完成并/串及串/并的转换,接收地址的识别由接收地址识别模块完成。发送和接收FIFO用于缓存发送和接收的数据。总线接口逻辑用于连接UART IP内部总线和HOST接口。寄存器和控制逻辑实现UART IP内部所有数据的收发、控制和状态寄存器、内部中断的控制及波特率信号的产生。以下详细说明主要部分的设计原理。

1.1 串行数据发送模块

串行数据发送模块将数据或地址码由并行转换为串行,并从串行总线输出。设计采用有限状态机实现,分为空闲、取数、发送三个状态。其状态迁移如图3所示。各个状态说明如下:


空闲状态:状态机不断检测发送使能位、UART使能位和发送FIFO空/满标志位,如果使能位为高、UART使能打开且FIFO空标志位为低,串行发送进入取数状态。

取数状态:在此状态,分两个周期从发送FIFO中取出待发送的数据或者地址,然后进入发送状态。

发送状态:在此状态,状态机按照九位串行数据的格式依次发送开始位、数据位、地址指示位。待停止位发送完毕后,返回空闲状态。一个字节的数据发送完毕后,进行下一个字节数据的发送流程。

1.2 串行数据接收模块

串行数据接收模块用于检测串行数据的开始位,将串行总线上的串行数据转换成并行数据并输出。接收逻辑也采用有限状态机实现,分为空闲状态、寻找开始位、接收数据和保存数据四个状态。其状态迁移图如图4所示。各个状态说明如下:


空闲状态:在此状态,不断检测接收使能、UART使能和串行输入信号的状态。如果串行输入信号出现由高到低的电平变化且UART使能和接收使能都为高,则将采样计数器复位,并进入寻找开始位状态。

寻找开始位:在此状态,状态机等待半个波特率的时间,然后重新检测串行输入的电平。如果为低,则判断收到的开始位有效,进入接收数据状态;否则认为数据总线上出现干扰,开始位无效,重新返回空闲状态。

接收数据:在此状态,依次接收串行数据线上的数据位、地址指示位和停止位,结束后进入保存数据状态。

保存数据:此状态将收到的串行数据以并行方式从接口的并行总线输出,然后返回空闲状态,准备进行下一个字节数据的搜索和接收。

为提高对串行输入上突发干扰的抵抗能力,对于接收数据,在脉冲的中间位置连续采样三次,较多的电平作为接收的有效数据。所有接收数据的采样频率为接收波特率的16倍。

1.3 硬件地址识别模块

硬件地址识别模块用于从接收到的数据中判断出地址和数据,在地址识别功能打开时,选择数据通过或者丢弃;而该功能关闭时,所有数据都会通过。地址识别模块是一个有两个状态的有限状态机,分为地址和数据两个状态。其状态迁移图如图5所示。状态说明如下:


地址状态:在此状态时,判断接收到的数据以及地址识别使能位。如果地址识别功能没有打开,对于接收的任何地址,都进入数据状态。如果地址识别功能打开,则将收到的地址和本地地址比较,如果相等,则保存此地址,进入数据状态;否则继续在此状态接收数据和地址,将收到的数据忽略。

数据状态:将接收到的数据输出,直到收到地址位时,返回地址状态,处理地址。

为实现监听和广播功能,将地址255作为特殊地址,它可以和任何地址匹配。若本站的地址为255,此站点可以接收任何地址的数据,此功能可以用于监听总线上的数据;若发送数据的目的地址为255,则任何站点都会接收到此数据,此功能可以用于发送广播数据。

1.4 FIFO设计

FIFO由控制逻辑和双口RAM组成,控制逻辑用来实现将一个双口RAM转换成两个FIFO的功能,这两个FIFO分别用于发送和接收数据缓存;中断控制用于在中断工作方式时管理UART内部的中断状态和控制信息。

为减少所需块RAM的数量,接收和发送FIFO使用同一个块RAM实现,使用仲裁机制保证两个FIFO的四个端口,在同一时刻最多只有两个操作,不影响对FIFO的读写。

1.5 总线接口

UART采用同步接口,所有信号都在系统时钟的上升沿采样,设备的握手用一位应答信号完成。
数据总线宽度采用8+2的方式。和16位或者32位宽度的数据总线连接时,可以一次读取接收数据的数据和地址指示位,减少总线操作次数;若和8位系统连接,可以只连接低8位数据线,接收数据的地址信息可以通过内部的状态寄存器读取。

1.6 寄存器和控制逻辑

寄存器部分实现UART内部所有数据的收发、控制和状态寄存,用于设置UART的数据格式、收发波特率、FIFO控制、本地地址、地址识别、中断控制和状态寄存,实现对UART工作的控制。

控制逻辑产生所需的所有波特率信号及对应的上升和下降沿指示信号,并根据实际工作所选择的波特率输出与系统时钟同步的对应信号。波特率产生逻辑的组成框图如图6所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top