打印

十年经验,无私分享,我对接口的一点理解!

[复制链接]
4222|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
901757|  楼主 | 2015-12-23 12:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 901757 于 2015-12-23 12:52 编辑

看到网友们经常问一些接口的问题,我也和一些群友分享了一下我对接口的一些粗浅理解,群友们的反馈都不错,所以我决定花点时间,把它总结出来,与更多的人分享,以技术会友,不亦乐乎!
做了十来年研发,开发过不少商用的产品,当年也算搞过国内最高端的通信设备。我深刻地认识到大到一个多框系统,小到一块单板,一个功能模块,要想发挥它的作用就离不开各种各样的接口。我一提接口,大家脑子里肯定蹦出很多,通常看到的UARTSPII2CPCILocalBus。还有一些就专业一些,例如UTOPIACPRIPOS-PHY,还有以太网里的各种MII接口。一个接口一出现在我们的脑海里,我们可能就会想这个接口有几根信号线,能跑多高频率,适合于哪种场合。很多人看到自己没搞过的接口就会有些莫名的紧张,担心自己对接口的理解不够,设计时会出差错。在我的理解里,接口从低级到高级,是有一些规律的,掌握了这个规律,你至少会对各种接口大致做到心中有数,新接口来了也不至于慌乱。且不论一个接口的状态机转换有多复杂,单从接口的时钟和数据交互来看,我以为下面的分类方法能让大家更好地理解接口。

第一类是异步接口。最典型的异步接口就是最常用的UART口。接口是用来在两个模块之间传递信号,异步接口最大的特点就是没有互传时钟。举一个通俗的例子来解释,比如我要把很多苹果传给周润发,如果我们之间是异步接口,那就相当于我们都看着自己的手表作动作。每隔一个固定的时间,我就传一个苹果过去,同样每隔相同的时间,周润发把苹果拿走。这就带来了一个问题,就是不能传的太快。因为表都有误差。我每隔1分钟传一个,这肯定没有问题,但要每隔1ns传一个,那肯定崩溃了。所以我们看到UART的频率,9600正常,115200就算快的。现在很多芯片支持USART,就是要突破这个限制。把异步改成同步。

第二类是同步接口。同步接口是数字电路的一个巨大的进步。还是以我和周润发传苹果为例,现在不是两个表了,而是我和周润发都看着墙上的钟,我们参照同一个时钟在传苹果。这样每传一个苹果,我跟发哥的动作都是同步的。同步接口的典型例子就是pci接口,这是一个垄断了高大上接口界好多年的接口。在一个pci-clock的上升沿master把数据打出来,slave在下一个时钟周期把数据收回去,可能有人要问,为什么不是同一个clock呢?我要告诉大家,这是同步接口的一个特点。在一个时钟的上升沿,master在把数据打出来的时候,slave还没有收到,因为数据传输是有延迟的。同步接口的频率可以上的比较高,pci33M66Mcompact pci可以上到133M。但同步接口同样也有硬伤,就是slave的发送也要依赖于master的时钟,那slave发出和master接收就会有个时间差,如果slavemaster的传输距离太长,时序就很难保证了,这是同步接口无法解决的。其实I2CSPI等接口,都可以看作同步接口,速度都不会太快。问题提出来了,总有解决之道。解决同步接口问题的招,就是把同步接口变成源同步接口。多了一个源字,问题就引刃而解了。

第三类是源同步接口。源同步接口最大的特点就是数据和时钟是同源的,发出数据的同时总是带着时钟,对端用收到的时钟采样收到的数据。显而易见,如果走线的时候是等长的,那理论上永远也不会有时序的问题了。通俗一点,还是以我和周润发传苹果为例,如果我们是源同步的,那就不用看自己的手表了,也不用两个人同时看墙上的钟,而是我在传苹果的时候叫一声发哥,发哥听到了再接苹果,发哥传给我的时候也叫一声。这样就不会有问题了。
我举一个的例子,大家可能就更明白了。大家都用过DRAM芯片,在SDR SDRAM时代,全部接口都靠CLK信号,这其实是一个同步接口,不管控制器还是DRAM颗粒,都以CLK为准。所以我们看到SDR SDRAM的频率也一般也只到133M。到了DDR SDRAM时代,我们发现这个接口多出来一个DQS信号,这与我们通常的理解不符合,为什么非但不精简,还越搞越复杂了呢?这个信号是干嘛的呢?这个信号是采样数据用的。而且写的时候由DRAM控制器发出,读的时候由DRAM颗粒发出,讲到这大家明白了吧。有了DQS信号,DRAM的接口已经由同步接口转变成了源同步接口,速度大幅度提升,DDR3DDR4的时钟频率已经可以上到1G以上了。
其实从硬件设计的角度看接口,我们总是在头疼两样东西,一个是时序,另一个就是信号质量。刚才说了源同步可以解决时序的问题,那搞好信号质量靠什么法宝呢?搞过仿真的朋友可能知道,一对多的仿真,即使拿到的模型基本是准确的,我们也会花很多时间去搞拓扑结构,星型?Y型?stub多长?搞得浑身不自在。啥时候就不用搞这些呢?答案就是点对点的时候,点对点就是搞好信号质量的法宝。
还是以DRAM为例,从DDR2升到DDR3的时候,由于速率上去了,信号质量成了当务之急,特别是一对多的Clock信号。JEDEC推荐了一种方式叫Fly-By, 这种方式其实就是一种伪点对点的拓扑,保证了stub最短。说到这,我们自然会想,有没有一个接口方式,它即是源同步,又是点对点呢?答案是有的,它就是Serdes

第四类就是Serdes,也就是接口物理层的串行化。它既是源同步,同时也是点对点。Serdes的发送端把数据和时钟编在一起,在一对差分线上发送出去,到对端再依赖CDR把两者分开,用CDR恢复出的时钟采样恢复出的数据。目前商用的Serdes已经有25G基带波特率,传输的带宽大幅度提升。其实接口Serdes化已经悄然在我们身边发生了很多年,只是有的人没有注意而已。 以前我们用IDE硬盘,现在都是SATA硬盘。以前我们用VGADVI,现在是HDMIUSB3.0也增加了serdes链路。包括信号数目超级多的TCAM接口,现在也慢慢变成了InterlakenSerdes化了。哪天Serdes价钱便宜了,DRAM搞个串行化也说不定呢。

经过我的描述,大家对接口有个宏观的认识了吗?在这个基础上再去学习各种不同的接口,是不是有一览众山小的感觉?希望能对大家的学习起到一个抛砖引玉的作用,有问题欢迎交流。

相关帖子

沙发
懿芯雅创| | 2015-12-24 16:26 | 只看该作者
好高深的样子,新手,学习了。

使用特权

评论回复
板凳
有妖气| | 2015-12-24 16:37 | 只看该作者
有点深奥,看不懂。

使用特权

评论回复
地板
luochangqing112| | 2015-12-27 12:53 | 只看该作者
学习了

使用特权

评论回复
5
luckyzy| | 2015-12-28 17:06 | 只看该作者
说得有点乱,不过楼主也算有心了。

使用特权

评论回复
6
cov0xt| | 2015-12-28 19:24 | 只看该作者
硬件接口,大开眼界

使用特权

评论回复
7
willywu123| | 2015-12-29 07:31 | 只看该作者
頂阿鼎阿~

使用特权

评论回复
8
willywu123| | 2015-12-29 07:32 | 只看该作者
頂阿鼎阿~

使用特权

评论回复
9
willywu123| | 2015-12-29 07:32 | 只看该作者
新人報到~

使用特权

评论回复
10
user12have| | 2015-12-29 13:00 | 只看该作者
谢谢指点。

使用特权

评论回复
11
city520boy| | 2015-12-29 16:06 | 只看该作者
深度好文啊,感谢专家分享

使用特权

评论回复
12
OldMouth| | 2016-1-27 18:06 | 只看该作者
Mark留着学习

使用特权

评论回复
13
Nick0908| | 2016-1-29 11:45 | 只看该作者
举例易懂,学习了,谢谢

使用特权

评论回复
14
WINA8| | 2016-1-29 16:07 | 只看该作者
学习了。

使用特权

评论回复
15
justinlin2015| | 2016-2-2 11:18 | 只看该作者

学习了
学习了

使用特权

评论回复
16
xmar| | 2016-2-2 11:45 | 只看该作者
本帖最后由 xmar 于 2016-2-2 11:59 编辑

异步、同步、源同步、SerDes四种接口。

源同步接口最大的特点就是数据和时钟是同源的,发出数据的同时总是带着时钟,对端用收到的时钟采样收到的数据。

Serdes的发送端把数据和时钟编在一起,在一对差分线上发送出去,到对端再依赖CDR(Clock Data Recovery,时钟数据恢复) 把两者分开,用CDR恢复出的时钟采样恢复出的数据。

实际上,接口就2种:同步、异步。只不过随着技术进步,同步又发展更多新技术。

为了抗干扰,提高数据传输信噪比,先后经历了:提高信号电压幅度、用电流代替电压传输信号、用差分方式传输信号、光纤数据传输。例如,日本5代战机“心神”全部采用光纤数据接口。

使用特权

评论回复
17
dsyq| | 2017-10-7 12:14 | 只看该作者
谢谢分享!

使用特权

评论回复
18
weixc0525| | 2018-3-21 20:43 | 只看该作者
MARK 留着学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝