ASIC设计中UART波特率误差计算

  • 背景
  • 误差来源
  • 计算最大误差允许值-简洁版
  • 计算最大误差允许值-完整版
  • 解决办法

背景

  本篇文章不涉及任何Verilog代码,仅仅只是对UART通信过程中产生的误差进行分析
  最近在写UART的Verilog的时候,因为没涉及同步通信和兼容各种其他协议所以很快就写完了。但是在做验证的时候遇到疑惑了,记录一些碰到的疑惑与大家分享。

误差来源

此处以9600bps举例
  例如,发送端和接收端都预期设定9600bps运行,但是两端实际已9800bps运行(时钟误差等原因造成),这样发送端和接收端依旧可以正常通信且不会造成误差。

中间采样
  首先如果接收端以9600运行,但发送端以9800运行,这样势必会造成原来在数据中间的采样点逐渐偏移到数据转换节点。如图
采样逐渐偏移

  其次,在量化时钟数据周期的时候势必也会造成误差,例如时钟为25M,9600bps,技数周期为2,604.166666666667,量化成整数就为2604了,此处我们来计算一下误差((25M/2604)-9600)/9600*10 = 0.064%。故经过量化传输之后每个字节误差为0.064%
  综上,UART传输误差来源有两处:

  • 确定波特率之后,确定计数周期时bps_clock=clock/bps,此时bps带有小数点,在量化的时候去除小数点就会跟笔者在误差来源分析的一样有误差。
  • 发射端和接收端波特率不一致,这样每bit的采样并不是采样在最中间点上,误差从起始位累计到结束位

计算最大误差允许值-简洁版

  首先我们假设可以容忍停止位采样误差,传输位为8位,不带奇偶校验位,且容忍余量为10%,只计算传输bit的误差,即在最后一位停止位处刚好采到90%。
  Tx设备的位周期定义如下:
Ttx=1baudrateTtx=\frac{1}{baudrate} Ttx=baudrate1​
我们这里使用E来表示接收波特率和发送波特率的百分比差值,那么公式如下;
Trx=Ttx+TtxE100Trx=Ttx+Ttx\frac{E}{100} Trx=Ttx+Ttx100E​
ΔTrx=TtxE100\Delta Trx=Ttx\frac{E}{100} ΔTrx=Ttx100E​
  对于初始分析,我们假设起始位采样到了50%处简化计算流程,因此对于一个8位的数据接口,采样时间为最后一个数据位8ΔTrx关闭RX
因此,我们在足够准确的情况下得出计算公式:
8ΔTrx<0.4Ttx8\Delta Trx<0.4Ttx 8ΔTrx<0.4Ttx
E<5E<5E<5
因此,基于这种简化分析,只要发送端和接收端之间的波特率误差小于5%,8位数据位的UART通信是可靠的

计算最大误差允许值-完整版

  相信看到这,读者已经笔者的分析比较感兴趣了。
接下来分析中包含的变量有:

  • 起始位采样误差
  • 可变数量的数据位
  • 对于停止位进行采样的可变余量
  • 帧误差容限

  现在我们的停止位采样余量是一个变量,我们将使用M(在简洁版中我们取10%代替的)。
8ΔTrx<((1−M)−0.5)Ttx8\Delta Trx<((1-M)-0.5)Ttx 8ΔTrx<((1−M)−0.5)Ttx
8ΔTrx<(0.5−M)Ttx8\Delta Trx<(0.5-M)Ttx 8ΔTrx<(0.5−M)Ttx
我们在前面的8位数据位到这里成了变量,现在数据位的数量(用N表示)是一个变量,我们还包括奇偶校验位§和停止位(S)的变量。此处如果有奇偶校验则P=1否则P=0;同理,如果要保持停止位正确采样则S=1,否则就为0。

  • N:数据位的数量
  • P:奇偶校验位
  • S:停止位

(N+P+S)ΔTrx<(0.5−M)Ttx(N+P+S)\Delta Trx<(0.5-M)Ttx (N+P+S)ΔTrx<(0.5−M)Ttx
此处还忽略的起始采样的实际误差:DsbTrx
DsbTrx+(N+P+S)ΔTrx<(0.5−M)TtxDsbTrx+(N+P+S)\Delta Trx<(0.5-M)Ttx DsbTrx+(N+P+S)ΔTrx<(0.5−M)Ttx
将上述的Trx=Ttx+TtxE100Trx=Ttx+Ttx\frac{E}{100} Trx=Ttx+Ttx100E​
ΔTrx=TtxE100\Delta Trx=Ttx\frac{E}{100} ΔTrx=Ttx100E​带入到最后的式子中即可得到
Dsb((1+E100)Trx)+(N+P+S)(E100)Trx<(0.5−M)TtxDsb((1+\frac{E}{100})Trx)+(N+P+S)(\frac{E}{100})Trx<(0.5-M)Ttx Dsb((1+100E​)Trx)+(N+P+S)(100E​)Trx<(0.5−M)Ttx
综合此不等式,读者只需将进行传输的数据位,停止位,奇偶校验位和余量数值,初始采样误差代入式子中即可算出整体误差。

解决办法

笔者查询了不少文章,真对上面误差的解决办法有两种

  1. 自适应波特率检测,采样连续两个Byte的起始位,根据起始位计算发送端的波特率,然后校准自身波特率进行改变
  2. 接收端停止位采样只采一半,留下半位为余量作校准

AISC/FPGA设计中 硬件UART波特率误差计算相关推荐

  1. (130)FPGA面试题-FPGA设计中波特率和比特率的区别

    1.1 FPGA面试题-FPGA设计中波特率和比特率的区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-FPGA设计中波特率和比特率的区别: 5)结束 ...

  2. 防止FPGA设计中综合后的信号被优化

    这不是一个新话题了,写这个也是当作自己的一个小小的笔记吧!觉得挺有用的. 一般在做前仿真(即功能仿真)时,不会考虑信号被优化的问题.最近做一个关于运算的小程序,前仿真的数据没有问题,但是实际出来的数据 ...

  3. (139)FPGA面试题-FPGA设计中的速度和面积互换原则

    1.1 FPGA面试题-FPGA设计中的速度和面积互换原则 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-FPGA设计中的速度和面积互换原则: 5)结束 ...

  4. FPGA设计中,产生LFSR伪随机数

    今天给大侠带来在FPGA设计中,产生LFSR伪随机数,话不多说,上货. 一.概述 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取 ...

  5. FPGA设计中,Vivado 调用IP核详细操作步骤

    FPGA设计中,Vivado 调用IP核详细操作步骤 今天给大侠带来了FPGA设计中,Vivado 调用IP核详细操作步骤,话不多说,手把手教学,请往下看. 首先咱们来了解一下vivado的IP核,I ...

  6. 简谈FPGA设计中不同设计方法资源消耗对比

    简谈FPGA设计中不同设计方法资源消耗对比 今天和大侠简单聊一聊FPGA设计中不同设计方法硬件资源消耗对比,话不多说,上货. 在这里,我们使用Verilog HDL 设计计数器,通过两种不同的写法,对 ...

  7. 关于FPGA设计中的线性序列机和状态机

    在FPGA设计中,线性序列机和状态机思想是十分重要的思想方法,用于实现各种时序要求.这次的内容是实现用FPGA,时钟周期为20ns,每间隔5000ns发送一个字节的数据,数据不从外部接入,而是内部给定 ...

  8. FPGA设计中,跨时钟域问题的处理

    FPGA设计中,跨时钟域问题的处理 今天和大侠简单聊一聊FPGA设计中跨时钟域问题的处理,话不多说,上货. 跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPG ...

  9. FPGA设计中 有符号数、无符号数

    FPGA设计中 有符号数.无符号数 今天给大侠聊一聊FPGA设计中有符号数以及无符号数,话不多说,上货. 在设计中,所有的算数运算符都是按照无符号数进行的.如果要完成有符号数计算,对于加.减操作通过补 ...

  10. 在FPGA设计中怎么应用ChatGPT?

    在FPGA设计中怎么应用ChatGPT? 科技即生产力,最近,OpenAI 发布了 ChatGPT,在各大论坛和许多网站上受到了广泛关注,ChatGPT是由 OpenAI 提出的大型预训练语言模型,使 ...

最新文章

  1. 多重循环控制(难点重点)
  2. CentOS - 修改主机名教程(将 localhost.localdomain 改成其它名字)
  3. android发送网络请求没反应,Android无法使用HttpURLConnection发送GET请求
  4. 初学C语言没有项目练手怎么行,这17个小项目收下不谢
  5. 4-1k近邻算法(k-Nearest Neighbors)
  6. 为下半年圣诞节提前准备素材模板,可临摹psd分层模板!
  7. 第 2 章 MongoDB
  8. 用Tensorflow搭建预测磁盘性能的机器学习模型
  9. 【OpenCV】重映射及仿射变换
  10. spring项目使用maven配置多环境动态读取配置值
  11. 八皇后问题-python描述
  12. Linux chmod文件授权命令
  13. 数据结构与计算机网络参考书,2019计算机考研:数据结构参考书及复习重点
  14. “差不多先生”姚劲波和不再神奇的58同城
  15. 在html用vue组件,html页面引入vue组件
  16. 360自研分布式存储系统Bada的架构设计和应用
  17. 爬虫之短信验证码自动化接收——Tasker
  18. 应用场景是什么?怎样判断、描述一个产品的应用场景?
  19. 大数据时代时代舍恩伯格书资源_疫情宅家,这些大数据书籍可以好好读读
  20. Vue3插件推荐和介绍

热门文章

  1. 百度站点LOGO尺寸标准
  2. 西工大计算机学院李春科,西北工业大学“青春逐梦 激情飞扬”2014友谊校区元旦晚会成功举办...
  3. Java实现文件搜索
  4. Hello MySQL(八)——自定义函数
  5. 未來用工新趨勢_2019年社会化用工成新趋势
  6. iso硬盘安装 凤凰os_虚拟机安装凤凰系统(PhoenixOS)教程
  7. 今天来聊聊CAD的“外挂”
  8. 打印机无法访问计算机,WIN7无法访问共享打印机及文件的解决办法
  9. 计算机开机桌面黑,电脑能正常启动但屏幕全黑原因和解决方法
  10. 软件测试工程师 岗位分析