专栏首页摸鱼范式为什么串口比并口快?

为什么串口比并口快?

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我

欢迎大家加入2022届数字IC交流群,QQ群号 1060380138

作者:又见山人 链接:https://www.zhihu.com/question/27815296/answer/38699109

作为一个电路设计师,我整个职业生涯都花在接口电路上,串行并行都做过,且速度不慢(DDR3-1600Mbps, SerDes 30Gbps),这个问题不答实在技痒难耐。已经看到的答案中,大家基本上都命中了关键的知识点,但是没有把背后的逻辑说清楚,也没有人从电学特性和经济的角度分析这个问题。大言不惭,欢迎大家拍砖讨论。


名词解释:

  • Mbps, Gbps: 一百万比特每秒,十亿比特每秒
  • skew:时间偏差,A比B快/慢一秒,就叫skew一秒
  • PCB:印刷电路板,也就是大多数电路板
  • IO:输入输出电路
  • cable:线缆
  • SerDes:串行转并行,并行转串行

还有人说贯口最快的,我们来算一算。业界目前大量应用的28Gbps SerDes,传一个比特只要35.7皮秒,这点时间光在真空中可以走上一厘米,连角膜到视网膜都不够。哪个快?


先说我的答案,串行接口为啥比并行接口快?是因为串口的特性和应用场景,决定了它更加适合采用一些提高单根信道速率的设计方法,这些方法用在并口上并不合适。

讨论这个问题,首先要搞清楚定义,什么叫并行接口(parallel link)?什么叫串行接口(serial link)?这就可以吵一天。

并口代表DDR说:“我是并口的纯正血统杰出代表,每8bit要附带一对DQS线作为时钟,每个bit都要同步到这对DQS上去,skew超标就不能工作,64位DDR3-1600总带宽可以到100Gbps,哪个串口做得到”?鄙人冷笑,说:“别以为我不知道你的底细,别看你IO是1.6G,内存控制器给你的一般都是4位并行的400M,你要先悄悄做一下并行转串行,再输出。何况你传64bit数据需要80根全速率的DQ/DQS线,还要20多根半速率命令地址线,平均下来一根线1G还不到”。 XAUI举手问:“我算串口么?XAUI一定是8组16根差分线,4组读4组写,缺任何一组都不符合协议,看着很并行啊?” 32位的PCI-E也一脸关心的等着答案。

我们先这么定义:在一个独立的信道上,每次同时传输1bit为串口,每次同时传输多个bit为并口。标准的串口如XAUI,HDMI等,每对差分线组成一个信道(channel),每个信道是否能成功传输并不取决于其他信道。而DDR这种,10根线组成一个信道,每次同时传8bit,错了某一bit只能重新传,便是标准并口,芯片内部的并转串和IO并不相关,不影响定性。按照这个定义,大家看看各种接口协议怎么划分呢?我觉得已经很清楚了,以单个channel的传输速率衡量,串口一般来说更快。下一个问题就是,为什么呢?

这是一个电学问题,但首先是一个经济问题。对任何一种协议,提高总带宽不过是两种办法,首先要提高单根线的传输速率,其次只能增加电线的数目。增加线的数目实在费钱,首先现在的芯片往往IO都很紧张,增加了IO PAD还要搭上额外的ESD和面积;封装和PCB上增加额外的线更复杂更贵这就不用说了,对于某些用cable的协议基本就是不可接受的。你是愿意插16根网线还是一根?接电视机的时候喜欢一根线的HDMI,还是五根线的RGB+音频?还有 @Arthur Wang提到的150米长线。。。。。。何况并口还要对这些线进行长度匹配,想想头就大了。

历史上,工程师们确实是先做了串口,速度不够没办法只好含泪加电线上并口,直到他们发现了三大法宝来提速,并口的动力就不那么强劲了,正如 @auxten 所言。但是在芯片内部,增加总线宽度的代价并不高,因此CPU里面有个1024位的数据总线也不奇怪。

为了提高单根线的传输速率,必须要讲到我们模拟电路工程师的三大法宝,差分信号(differential signaling),时钟-数据恢复(Clock-Data Recovery,简称CDR),和信道均一化(Channel Equalization,Eq)。

差分信号的好处 @龚黎明@andrew song 已经提过了,不外乎抗干扰能力强,引入的噪声也比较小,虽然必须要两根线,但速度从几百M提高到几G,还是很值得的。

CDR的好处 @龚黎明也说过了,消灭了skew,减少了时钟的功耗和噪声(但多出了CDR电路本身的功耗和噪声),同时避免了电磁干扰。想想在PCB或者电线上传一个15G的时钟,太带感了,幸亏我们不用做这种事。

信道均一化 相当值得一提,这才是SerDes高速发展的决定性因素,所以我决定花点文字讲一下。一般来说,真实世界中的信道都是低通特性的,到处都是小电容,所谓绝缘体中的分子在高频情况下吸收电场能量,再加上金属线中的趋肤效应,所以我们想要的高频信号走不了多远就不像样子了,比如下面某信道的频率特性(绿线)。

如图所示,在对应28Gbps的频点上,信号能量被衰减了30db,电压幅度只剩3%了;在对应56Gbps的频点上更惨,65db意味着信号电压摆幅剩下不到千分之一。在这种信道中,发送端一个完美漂亮的数据眼图

到了接收端会变成这样的一堆垃圾:

img

什么都辨认不出来对吧。但是,经过我们聪明的工程师们一番努力,均一化开关打开,信号就变成了这样:

神奇么?我觉得挺神奇的,我认识的电子工程师们第一次看到这个,没人觉得不神奇。

下面一个重要的问题,既然有了三大法宝,他们只能用在串口上吗?

答案很显然,不是,串口可以用的,我们并口一样可以用。那为什么并口不用呢?

差分信号这条不用说了,并口的电线本来已经够多了,数目还要再翻一倍?系统工程师会杀人的。CDR 意义也不大,反正你并口速度也不高,一堆数据线中顺便传下时钟,比做接收端做CDR再采样每一位数据省事多了。

信道均一化属于屠龙之技,不用差分信号的话也就传几百M,本来就没啥衰减,用这个干啥?还是考虑下各种噪声串扰的问题吧。

于是答案就呼之欲出了。串口为啥比并口快?是因为串口的特性和应用场景,决定了它更加适合采用一些可以提高单根信道速率的设计方法,这些方法用在并口上并不合适。

从现有的应用看来,需要持续稳定高带宽的应用,往往使用高速串行接口,一根带宽不够再加一根,各种视频网络应用,基本如此。而一些历史遗留速度不高的应用,还有一些需要突发性高带宽的应用,并口仍然存活,比如很特殊的DDR。虽然XDR/GDDR/HMC/HCM这些新标准都在试图引入SerDes, 但DRAM行业的特殊性还是让并口继续存活着。

最后一段是我对 @龚黎明 答案的批评,欢迎指正。这个答案清楚明晰的指出了几乎所有串口的优势,但是忘了提及一点,这些优势其实是三大法宝带来的,并非串口与生俱来。就像小强开车小明走路,小强自然快很多,但并非他天生就快,而是因为小明腿短够不到油门。

END

本文分享自微信公众号 - 摸鱼范式(icparadigm),作者:又见山人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 6-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口接收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!

    杨奉武
  • 7-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口接收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!

    杨奉武
  • 8-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口接收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!

    杨奉武
  • 12-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口接收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!

    杨奉武
  • 为什么说 Storm 比 Hadoop 快?

    “快”这个词是不明确的,专业属于点有两个层面: 1.时延 , 指数据从产生到运算产生结果的时间,题主的“快”应该主要指这个。 2. 吞吐, 指系统单位时间处理的...

    CSDN技术头条
  • 为什么 Promis 比setTimeout()更快?

    先做一个实验:来看看立即解决的 Promis 和立即超时( 0 毫秒的超时)哪个执行的更快?

    疯狂的技术宅
  • Spark为什么比Hadoop快那么多?

    在2014年11月5日举行的Daytona Gray Sort 100TB Benchmark竞赛中,Databricks 用构建于206个运算节点之上的spa...

    叶锦鲤
  • java中为什么需要接口

    最近看到论坛里有个帖子在讨论接口和抽象类的区别和作用,这其实也是很多面试官喜欢问的问题,这里我就说说我的总结,顺便说说内部类的作用,当是给刚入门,或者想学习ja...

    bear_fish
  • 为什么要做接口测试

    当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代周期对所有功能做完整的回归测试。即使有比较完整的UI自动化(版本迭代带来UI在变, 维...

    louiezhou001
  • python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

      上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试。

    北京-宏哥
  • 串口调试助手是做什么的 串口调试助手如何下载

    随着科技的发展,计算机的运用有很大意义上的普及,但是如果计算机出了什么问题,一般人是不清楚的。但是在没有特别严重的问题时,是可以通过计算机自己检测的。例如串口调...

    JanusWin
  • ArrayList 为什么要实现 RandomAccess 接口?

    在我们的开发中,List 接口是最常见不过,而且我们几乎每天都在用 ArrayList 或者 LinkedList,但是细心的同学有没有发现,ArrayList...

    一个优秀的废人
  • 为什么寄存器比内存快?

    计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。

    帅地
  • 为什么寄存器比内存快?

    计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。 ? 同样都是晶体管存储设备,为什么寄存器比内...

    ruanyf
  • 为什么寄存器比内存快?

    计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。

    Linux阅码场
  • 为什么小程序将成为风口?为什么要做小程序?

    为什么小程序将成为风口? 因为你的竞争对手都在做小程序! 为什么要做微信小程序? 因为你的目标客户都在使用微信! 在当今,国民级别的聊天应用非微信莫属。在现今,...

    企鹅号小编
  • 为什么有些语言比别的快?

    来自Ars Technica的文章评论了影响编程语言速度的各个方面。Ars这个网站虽然自称技术网站,但编程方面的文章一般比较浅,这篇也不例外。虽然文字很长,但无...

    钱曙光
  • Reddit热议:为什么PyTorch比TensorFlow更快?

    近日,Reddit 上有一个热帖:为什么 PyTorch 和 TensorFlow 一样快 (有时甚至比 TensorFlow 更快)?

    新智元
  • Reddit热议:为什么PyTorch比TensorFlow更快?

    近日,Reddit 上有一个热帖:为什么 PyTorch 和 TensorFlow 一样快 (有时甚至比 TensorFlow 更快)?

    代码医生工作室

扫码关注云+社区

领取腾讯云代金券