在设计UART时,波特率是如果实现的?UART的发送和接收速率是多少?

如题所述

摘 要:UART是广泛使用的串行数据通讯电路。本设计包含UART发送器、接收器和波特率发生器。设计应用EDA技术,基于FPGA/CPLD器件设计与实现UART。
关键词:FPGA/CPLD;UART;VHDL
---UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。
---串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

一 UART简介
1 UART结构
---UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。
---功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。
---图1是UART的典型应用。
2 UART的帧格式
---UART的帧格式如图2所示。

---包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。
---这种格式是由起始位和停止位来实现字符的同步。
---UART内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2)等设置。

二 UART的设计与实现
1 UART发送器
---发送器每隔16个CLK16时钟周期输出1位,次序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。
---CPU何时可以往发送缓冲器tbr写入数据,也就是说CPU要写数据到tbr时必须判断当前是否可写,如果不判这个条件,发送的数据会出错。
---数据的发送是由微处理器控制,微处理器给出wen信号,发送器根据此信号将并行数据din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存器tsr[7..0]发送串行数据至串行数据输出端dout。在数据发送过程中用输出信号tre作为标志信号,当一帧数据发送完毕时,tre信号为1,通知CPU在下个时钟装入新数据。
---发送器端口信号如图3所示。

---引入发送字符长度和发送次序计数器length_no,实现的部分VHDL程序如下。
---if std_logic_vector(length_no) = “0001” then
---tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr
---tre <= '0' ; --发送移位寄存器空标志置“0”
---elsif std_logic_vector(length_no) = “0010” then
---dout <= '0' ; --发送起始位信号“0”
---elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then
---tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端dout
---dout <= tsr(0) ;
---parity <= parity xor tsr(0) ; --奇偶校验
---elsif std_logic_vector(length_no) = “1011” then
---dout <= parity ; 校验位输出
---elsif std_logic_vector(length_no) = “1100” then
---dout <= '1' ; --停止位输出
---tre <= '1' ; --发送完毕标志置“1”
---end if ;
---发送器仿真波形如图4所示。

2 UART接收器
---串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个CLK16时钟周期,才是正常的起始位,然后在每隔16个CLK16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。
---接收器的端口信号如图5所示。
---实现的部分VHDL程序如下。
---elsif clk1x'event and clk1x = '1' then
---if std_logic_vector(length_no) >= “0001” and std_logic_vector(length_no) <= “1001” then
-----数据帧数据由接收串行数据端移位入接收移位寄存器
---rsr(0) <= rxda ;
---rsr(7 downto 1) <= rsr(6 downto 0) ;
---parity <= parity xor rsr(7) ;
---elsif std_logic_vector(length_no) = “1010” then
---rbr <= rsr ; --接收移位寄存器数据进入接收缓冲器
---......
---end if ;
---接收器仿真波形如图6所示。

3 波特率发生器
---UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。
---根据给定的晶振时钟和要求的波特率算出波特率分频数。
---波特率发生器仿真波形如图7所示。

三 小结
---通过波特率发生器、发送器和接收器模块的设计与仿真,能较容易地实现通用异步收发器总模块,对于收发的数据帧和发生的波特率时钟频率能较灵活地改变,而且硬件实现不需要很多资源,尤其能较灵活地嵌入到FPGA/CPLD的开发中。在EDA技术平台上进行设计、仿真与实现具有较好的优越性。
温馨提示:内容为网友见解,仅供参考
无其他回答

在设计UART时,波特率是如果实现的?UART的发送和接收速率是多少?
---UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。---根据给定的晶振时钟和要求的波特率算出波特率分频数。---波特率发生器仿真波形如图7所示。三 小结 ---通过波特率发...

UART串口通信(二)
一.UART串口通信实验 设置数据位为8比特,停止位1位,无校验位,波特率为115200bps。数据传输时,每比特占用时长为8680.5纳秒,基于50MHz系统时钟,即每20纳秒一个时钟周期。因此,每434个时钟周期传输1比特数据。接收端使用rx_cnt计数器记录接收数据位数,Clk_cnt每计数434次,rx_cnt加1,从而统计接收...

单片机uart通讯中的UART通讯的波特率设置问题
在同步传送方式,数据的传输速度是 1M bit\/s。比 UART,要快得很多。而且,在同步传送方式,没有起始位、校验位和结束位,每一位,都是数据。因此,在《同步传送方式》,并没有常说的 9600、4800...,等波特率。同样,在 UART 中,也就没有 1M bit\/s 这样的说法。--每秒可以发送10^6个数...

如何更改uart通信波特率
实际编程时用库函数直接设置即可,不需要计算。分数波特率的产生:接收器和发送器(RX和TX)都是设置城USARTDIV整数和小数寄存器中配置的值。TX\/RX波特率=Fck\/(16*USARTDIV)例子:从BRR寄存器的值计算得到USARTDIV 如果DIV_Mantissa=27D,DIV_Fraction=12D(BRR=1BCH),那么 Mantissa(USARTDIV)=27D ...

基于Linux的tty架构及UART驱动详解
波特率是衡量数据传输速率的指标,它表示每秒传输的符号数。波特率与数据的阶数有关,阶数越高,数据传输速率越慢,但同步的容忍程度越大。UART接收和发送数据按照相同的波特率进行,波特率发生器产生的时钟频率为波特率的16倍,用于在接收时进行精确采样,确保数据传输的正确性。UART的工作原理分为发送和接收...

改uart协议跟哪些有关
需要了解UART协议的几个参数。波特率:即每秒可以传输的码元个数起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由...

uart核模块的工作的原理是什么
UART(UniversalAsynchronousReceiver\/Transmitter)是一种通用的异步串口通信接口。它主要由收发器和波特率生成器组成。工作原理如下:1.数据发送:数据被分成8位的字节,每个字节依次发送。每个字节的开头都会添加一个起始位(STARTBIT),结尾添加一个停止位(STOPBIT)。2.数据接收:接收器等待起始位,并依次...

UART通信速度
数据传输的起点可以由最低有效位(LSB)开启,但部分UART允许用户选择发送LSB或最高有效位(MSB)的顺序。在微控制器的世界中,UART的数据传输速度可变化大,从每秒数百位直至惊人的1.5兆比特每秒。比如,ElanSC520微控制器的高速UART能实现高达1.152兆比特每秒的通信速率。此外,UART的波特率也受传输线路...

FPGA入门之串口通信(UART)
具体实现中,首先设定一个波特率计数器(MCNT_BAUD)和位计数器(MCNT_BIT),通过系统时钟(sysclk_p)进行计数。在发送数据时,通过延时计数器(dly_cnt)确保在1s后启动发送,并使用D触发器存储数据值,防止数据瞬间变化导致发送错误。波特率使能信号en_baud_cnt控制发送过程,当计满10个码元且最后一...

如何解读uart 接口的电路设计?
1.**数据线**:通常,UART至少需要两条数据线:发送(TX)和接收(RX)。在一个典型的串行连接中,一个设备的TX线将连接到另一个设备的RX线,反之亦然。2.**波特率**:这是数据传输的速率。两个设备之间的通信必须设定相同的波特率才能成功通信。3.**数据位**:每次发送的数据位数量。常见的有...

相似回答