串口收发UART(Verilog HDL)
UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是一种异步串行通讯协议,重要用于盘算机和嵌入式系统之间的数据交换。实现UART通讯的接口规范和总线尺度包括RS-232、RS449、RS423和RS485等,接口尺度规定了通讯尺度的电气特性、传输速率、毗连特性和机械特性。
文章摘要:本篇文章目标设计一个格式为起始位+8位数据(无校验)+停止位的串口收发,接收PC上位机RS232总线信号后,重新打包转发至PC端显示(形成回环),数据完整无错码情况。
关键词: 异步时钟;亚稳态;异步串行通讯;Verilog HDL
目标设计框图:
https://img2024.cnblogs.com/blog/3025061/202406/3025061-20240613193709746-1300826410.png
【串行帧格式】
UART通讯使用两条信号线进行数据传输:发送数据线(TX)和接收数据线(RX)。数据以数据帧的形式传输,每个数据帧由起始位、数据位(通常为5到9位)、校验位(可选)和停止位(通常为1到2位)构成。
发送方在发送数据之前,会先发送一个起始位(通常为低电平),然后按照设定的数据位和校验位发送数据,最后发送一个或多个停止位(通常为高电平)以标识数据传输的结束。接收方在检测到起始位后,会开始接收数据,直到检测到停止位为止(起止式协议)。同时,接收方会根据约定的校验方式对数据进行校验。
https://img2024.cnblogs.com/blog/3025061/202406/3025061-20240613193717094-721398592.png
1、起始位(Start Bit):通常是一个单独的位,逻辑值为0(低电平),表示字符开始,接收端同步到发送端的数据流。
2、数据位(Data Bits):帧的主体部分,包含传输信息,数据位数量可以根据需要进行配置,常见的有5位、6位、7位、8位等。
3、校验位(Parity Bit):可选位,校验位可以是偶校验(Even Parity)、奇校验(Odd Parity)或无校验(No Parity),偶校验意味着数据位中1的个数(包括校验位)应该是偶数;奇校验则是奇数。
4、停止位(Stop Bits):标志字符的结束,并允许接收器在接收下一个字符之前有时间复位。停止位的数量可以是1位、1.5位或2位。
5、空闲位(Idle Line):在两个字符之间,线路通常保持在高电平状态(逻辑值为1)称为空闲线状态,它允许接收端在字符之间有时间来检测和响应线路状态的变化。
数据传输中,波特率(Baud rate)是一个重要的参数,表示单位时间内传输的码元符号的个数(通常指二进制位)。波特率并不直接等同于比特率(bit rate),因为每个码元符号可能包含多个比特。但在很多情况下,特别是在串行通讯中,一个码元符号就是一个比特,此时波特率就等于比特率。
传送速率为960字符/秒,而每个字符为10位(可能是1个起始位、8个数据位和1个停止位)。总的二进制位数传送速率是960字符/秒 × 10位/字符 = 9600位/秒,所以波特率就是9600。
【异步传输存在亚稳态】
在数字电路设计中同步建立至关重要,异步时钟域之间的信号通讯不可制止存在亚稳态问题。UART接收过程,起始位的检测尤为关键,错误的起始位检测可能导致整个数据包的接收失败。为了制止因亚稳态导致的采样错误和电路故障,设计者必须在接口处采取可靠的同步化措施。
亚稳态:简单来说,亚稳态是指触发器(Flip-Flop)或其他数字电路元件无法在某个规定的时间段内达到一个可确认的稳固状态。
产生原因:重要由于违反了触发器的建立和保持时间(Setup and Hold Time)要求。在时钟上升沿前后的特定时间窗口内,如果数据输入端口上的数据发生变化,就会产生时序违规,从而导致亚稳态的出现,如下图。
https://img2024.cnblogs.com/blog/3025061/202406/3025061-20240613193735065-439716316.png
表现特征:在稳固期间,触发器可能输出一些中心级电平,或者处于振荡状态。并且,这种无用的输出电平可以沿信号通道上的各个触发器级联式流传下去,导致整个系统的不稳固。
https://pica.zhimg.com/v2-61aa739e5dffaca68bf07686909cb4d8_720w.jpg?source=172ae18b
减少亚稳态影响:
亚稳态震荡时间(Tmet)关系到后级寄存器的采集稳固问题,Tmet影响因素包括器件的生产工艺、温度、环境等。
当Tmet1时间长到大于一个采样周期后,那第二级寄存器就会采集到亚稳态,但是从第二级寄存器输出的信号就是相对稳固的了。由于寄存器本身就有减小Tmet时间让数据快速稳固的作用,第二级寄存器的Tmet2的持续时间继续延长到大于一个采样周期这种情况虽然会存在,但是其概率是极小的。在第三级寄存器时,数据传输几乎达到稳态。
https://img2024.cnblogs.com/blog/3025061/202406/3025061-20240613193908730-1490176331.png
单比特信号从慢速时钟域同步到快速时钟域需要使用打两拍的方式消除亚稳态。第一级寄存器产生亚稳态并经过自身后可以稳固输出的概率为70%~80%,第二级寄存器可以稳固输出的概率为99%左右,再多加寄存器的级数改善效果就不明显了,Verilog HDL程序如下。
always @(posedge sys_clk or negedge sys_rst)begin if(!sys_rst) rx_reg1
页:
[1]