带硬件地址识别的UART IP 的设计和实现
寻找开始位:在此状态,状态机等待半个波特率的时间,然后重新检测串行输入的电平。如果为低,则判断收到的开始位有效,进入接收数据状态;否则认为数据总线上出现干扰,开始位无效,重新返回空闲状态。
接收数据:在此状态,依次接收串行数据线上的数据位、地址指示位和停止位,结束后进入保存数据状态。
保存数据:此状态将收到的串行数据以并行方式从接口的并行总线输出,然后返回空闲状态,准备进行下一个字节数据的搜索和接收。
为提高对串行输入上突发干扰的抵抗能力,对于接收数据,在脉冲的中间位置连续采样三次,较多的电平作为接收的有效数据。所有接收数据的采样频率为接收波特率的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所示。
2 功能和时序
《带硬件地址识别的UART IP 的设计和实现(第2页)》