03_串口 RS232( 二 )


6)比特率:每秒钟通信信道传输的信息量称为位传输速率,简称比特率,其单位为“每秒比特数(bps)” 。比特率可由波特率计算得出,公式为:比特率=波特率 * 单个调制状态对应的二进制位数 。如果使用的是 9600 的波特率,其串口的比特率为: 1bit=。
7)波特率和比特率的区别
要讨论比特率与波特率的关系,需要先了解码元与比特的关系 。就像刚才的例子中提及的公交车、地铁、的士可以搭乘不同数量的出行人员一样,不同码元也可以用不同位数的比特表示 。码元所需要的比特位数,由码元支持的状态数量确定 。
8)计算:若波特率为9600,由计算得串口发送或者接收 1bit 数据的时间为一个波特,即 1/9600 秒,如果用50MHz(周期为 20ns)的系统时钟来计数,需要计数的个数为 cnt = (1s * 10^9)ns / )ns / 20ns ≈ 5208 个系统时钟周期,即每个 bit 数据之间的间隔要在 50MHz 的时钟频率下计数 5208 次 。
9)上位机通过串口发 8bit 数据时,会自动在发 8 位有效数据前发一个波特时间的起始位,也会自动在发完 8 位有效数据后发一个停止位 。同理,串口助手接收上位机发送的数据前,必须检测到一个波特时间的起始位才能开始接收数据,接收完 8bit 的数据后,再接收一个波特时间的停止位 。
2. 亚稳态 2.1 打第一拍
1)为什么打第一拍,因为传进来的 rx 和时钟信号并不是同步的,要把 rx 信号变成与时钟信号同步 。
2)由于在 PC 机中波特率和 rx 信号是同步的,而 rx 信号和 FPGA 的系统时钟是异步的关系,我们此时要做的是将慢速时钟域(PC 机中的波特率)系统中的 rx 信号同步到快速时钟域(FPGA 中的 )系统中 。
2.2 连续打拍
1)什么是亚稳态?
因为在串口传输数据时,当你使用示波器把一个矩形脉冲的上升沿或下降沿放大后会发现其上升沿和下降沿并不是瞬间被拉高或拉低的,而是有一个倾斜变化的过程,这在运放中被称为“压摆率” 。此时 FPGA 的第一级寄存器的输出端在时钟沿到来之后比较长的一段时间内都处于不确定的状态,在 0 和 1 之间处于振荡状态,而不是等于串口输入的确定的 rx 值 。
2)亚稳态是如何产生?
建立时间Tus,保持时间Th,RS建立时间和保存时间不满足条件,寄存器延迟Tco,决断时间Tmet,信号传入寄存器没有保证他的建立时间和保持时间 。
3)如何解决亚稳态?
用多级寄存器去减少亚稳态对系统的危害 。一般打
2拍 。
3. 实验目标
设计并实现基于串口 RS232 的数据收、发模块,使用收、发模块,完成串口数据回环实验 。
4. 硬件资源
为 RS232 收发器芯片 。由于 RS-232 电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL”的电平信号,才能实现通讯 。
5. 模块设计 5.1 顶层模块框图
5.2 串口数据接收模块
为什么还需要输出一个伴随并行数据有效的标志信号,这是因为后级模块或系统在使用该并行数据的时候可能无法知道该时刻采样的数据是不是稳定有效的,而数据有效标志信号的到来就说明数据才该时刻是稳定有效的,起到一个指示作用 。当数据有效标志信号为高时,该并行数据就可以被后级模块或系统使用了 。

03_串口 RS232

文章插图
发送—>
5.3 串口数据发送模块
6. 波形图 6.1 串口数据接收模块
:下降沿,开始标志信号,有时候信号也会有0,1跳转,在数据位也会有下降延,为了避免这种情况的发生设置一个使能信号,信号就可以判断出此时出现的标志信号并不是我们想要的串口帧起始下降沿,从而将其过滤除掉 。