通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)

目录

  • 1. 功能介绍
    • 1.1. 低速接口 驱动沿和采样沿
      • SPI CPHA模式的意义
  • 2. 架构
    • 2.1. usart
    • 2.2. baud_clk_gen
    • 2.3. usart_rx
    • 2.3. usart_tx
  • 3. 逻辑设计
  • 4. 测试
    • 4.1. APB 握手
    • 4.2. usart_tx 数据发送
    • 4.3. usart_rx 数据接收


《 KeyStone Architecture Universal Asynchronous Receiver/Transmitter (UART) User Guide SPRUGP1—November 2010》
IIC、SPI、UART、USART、USB、CAN等通讯协议原理及区别
串行外设接口(Serial Peripheral Interface, SPI)
I2C详解(一)
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)


1. 功能介绍

USART,如同UART依旧是全双工、串行,与UART不同的是USART具备同步传输模式。其实USART就是在UART基础上加入了同步时钟SCK,就类似于SPI主从之间在同时钟域。

但与SPI也不相同,SPI是只能全双工工作、不可如UART那样半双工工作,这是因为SPI本质是spi master与spi slave之间循环移位寄存器实现数据传输,即发数必收数。而USART则要类似UART那样具备半双工工作模式,即发数和收数完全隔离。

有一种思路就是USART由USART_TX和USART_RX组成,将USART_TX看作是SPI_MASTER、将USART_RX看作是SPI_SLAVE
但USART1与USART2通信的时候只将USART1_TX.sck与USART2_RX.sck、USART1_TX.mosi与USART2_RX.miso相连,而USART1_TX.miso与USART2_RX.mosi断开.
这样就消除了SPI循环移位寄存器导致的不可半双工工作的问题,如下图。

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)_第1张图片

1.1. 低速接口 驱动沿和采样沿

然后这里说一下波特率的问题,既然是可以实现同步传输,那么速度就会有提升,这个没问题。

这里想说的是,但凡是芯片间慢速通信接口,例如UART、SPI、I2C,都有一个特点就是驱动沿与采样沿不同,如下图所示

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)_第2张图片

其中,R = CLK_FREQ/ BAUD_RATE表示每驱动1bit数据花费的clk周期数。

uart_tx驱动txdbaud_cnt == R处驱动,但uart_rx采样rxd则是在baud_cnt == R/2

spi_master驱动mosi 在sck下降沿处驱动, 但spi_slave采样mosi 则是在 sck上升沿处

i2c_master驱动sda 在scl低电平中部驱动,但i2c_slave采样sda 则是在scl高电平中部

SPI CPHA模式的意义

那么为什么不像平时设计时,一个模块内信号的采样和驱动在同一边沿呢?这个原因在 串行外设接口(Serial Peripheral Interface, SPI)有介绍,其实就是STA问题,

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)_第3张图片

T s e t u p S I < T S C K + T S C K 2 S I − ( T S C K 2 M O + T C K 2 Q M O + T M O 2 S I ) (a) T^{SI}_{setup}TsetupSI<TSCK+TSCK2SI(TSCK2MO+TCK2QMO+TMO2SI)(a)

T h o l d S I < T S C K 2 M O + T C K 2 Q M O + T M O 2 S I − T S C K 2 S I (b) T^{SI}_{hold}TholdSI<TSCK2MO+TCK2QMO+TMO2SITSCK2SI(b)

因为 T S C K T_{SCK} TSCK比较大, T s e t u p S I T^{SI}_{setup} TsetupSI一般可以满足。但是 T h o l d S I T^{SI}_{hold} TholdSI则不好说,如果SCK走线时间和MOSI走线时间差距比较大的话,可能会违背。

但如果对MO/CK和SI/CK在SCK不同沿的话, ( b ) (b) (b)式就会在左侧多一个 1 2 T S C K \frac{1}{2}T_{SCK} 21TSCK,就可以保证。

那么对于USART来说,也可以参照SPI这样的驱动采样双边沿的形式

2. 架构

功能介绍完毕后,给出基于APB协议的USART基本架构,注意APB信号不能直接输入至USART_TX或USART_RX模块内,需要在USART中作调度,如下图所示:

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)_第4张图片

2.1. usart

UART的接受器

Signal Direction Width(bits) Description
prstn_sck input 1 tx_sck时钟复位信号
pclk input 1 APB时钟
prstn input 1 复位信号
paddr input PADDR_WIDTH 用于访问usart_tx和usart_rx内部FIFO
pwrite input 1 1表示写,0表示读
psel input 1 是否对usart选通
penable input 1 APB使能
pwdata input PDATA_WIDTH 写数据
prdata input PDATA_WIDTH 读出的数据
pready output 1 usart准备标志
rx_sck input 1 usart_rx波特率时钟
rxd input 1 usart通信单bit总线
tx_clk output 1 usart_tx的波特率时钟
txd output 1 usart通信单bit总线

之后是参数描述

Parameter Units Description
BAUD_RATE bit 设定的波特率
PCLK_FREQ bit pclk的时钟频率
PADDR_WIDTH bit 地址宽度
PDATA_WIDTH bit 数据宽度
ASYNC_FIFO_DEPTH bit USART_TX和USART_RX中异步FIFO深度

2.2. baud_clk_gen

用于产生波特率时钟sck

Signal Direction Width(bits) Description
prstn_sck input 1 tx_sck的复位信号
pclk input 1 SPI的用户时钟
tx_sck output 1 波特率时钟

之后是参数描述

Parameter Units Description
BAUD_RATE bit per second 设定的波特率
PCLK_FREQ HZ clk的时钟频率

2.3. usart_rx

USART的接受器

Signal Direction Width(bits) Description
prstn input 1 复位信号
pclk input 1 USART_RX的用户时钟
rx_sck input 1 USART_RX的波特率时钟
rxd input 1 USART通信单bit总线
fifo_rdata output PDATA_WIDTH USART_RX接受模块数据
fifo_rdata_val output 1 USART_RX接受模块数据有效
fifo_rd_en input 1 USART_RX外部模块读请求信号
fifo_empty output 1 USART_RX中FIFO空标志

之后是参数描述

Parameter Units Description
PDATA_WIDTH bit UART_RX接受模块数据宽度
ASYNC_FIFO_DEPTH bit USART_TX和USART_RX中异步FIFO深度

2.3. usart_tx

Signal Direction Width(bits) Description
prstn input 1 复位信号
pclk input 1 USART_TX的用户时钟
tx_sck input 1 USART_TX的波特率时钟
txd output 1 USART通信单bit总线
fifo_wdata input PDATA_WIDTH USART_TX发送模块数据
fifo_wdata_val input 1 USART_TX发送模块数据有效
fifo_full output 1 USART_TX中FIFO满标志

之后是参数描述

Parameter Units Description
PDATA_WIDTH bit UART_TX发送模块数据宽度
ASYNC_FIFO_DEPTH bit USART_TX和USART_RX中异步FIFO深度

3. 逻辑设计

USART - 逻辑设计部分

4. 测试

选择参数为

parameter BAUD_RATE 		= 10000000;					
parameter PCLK_FREQ 		= 50000000;					
parameter PADDR_WIDTH 		= 1;
parameter PDATA_WIDTH 		= 16;					
parameter ASYNC_FIFO_DEPTH 	= 4096;

回环测试,总体波形图

在这里插入图片描述

以及transacript

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)_第5张图片

从log中可以看出写入的数据均被正确读出来了

4.1. APB 握手

波形中可以看出基于APB协议能够实现正确的数据写入和读出

在这里插入图片描述

在这里插入图片描述

4.2. usart_tx 数据发送

在这里插入图片描述

4.3. usart_rx 数据接收

在这里插入图片描述

你可能感兴趣的:(数字IC,数字IC,IC验证,fpga开发)