计算机IO协议扫盲之一

jdygrdzh 2013-01-29 11:24:45
此文总结了我对IO的看法。

首先,什么是IO。一般来说,IO是指对计算机外部设备的访问方式,跟内存访问相对应。但是在当今的计算机系统上,访存和访问IO的界限越来越模糊。如果按照访问速度界定的话,DDR3内存访问数据率最高1600Mbps每线,远比不上PCIe3的8Gbps。按照数据宽度,DDR3可以有64根数据线,PCIe也可以支持16对差分线。按照程序访问方式,内存可以直接按地址读写或者DMA,PCIe的数据区在内存映射后也一样。按照物理层连接方式,新一代的DDR4同时支持并行和高速串行差分线,更说明访存和IO在融合。

所以,我自己对IO重新做了一个定义:把所有连出芯片的管脚称作IO,而芯片内部连接各个模块的信号称作互连。这么分基于一个信号完整性的经验原则,即在高速电路中,当传输的距离和波长可比拟(差10倍)的时候,我们就不应该把信号仅仅看做逻辑0和1,而是需要考虑其模拟特性。最明显的一个特性是信号反射,也就是说整个线路必须保持阻抗一致,不然在阻抗变化的地方,会有类似波的反射,和之前的波叠加,信号振幅在全反射时乘以2。这样就很难判断是0还是1。

按照这个原则,在芯片内部,如果时钟是3GHz,那么波长是零点1米。在22nm工艺下,一个指甲大小的芯片可以包含10亿个晶体管(单层),晶体管之间的信号平均传输距离是三百万分之一米。波长和传输距离差三十万倍。就算是芯片内部模块间的信号,长度也应该在几个毫米以下。我曾经听到有人把AMD的处理器超频到8Ghz仍然可以工作,说明在波长0.04米的时候都不需要考虑内部信号完整性问题。但是,一旦我们把信号连出芯片,哪怕只是到DDR颗粒这种靠处理器很近的器件,其走线长度就可能是10厘米,必须要考虑信号完整性。至于那些连得更远的,比如USB的5米,以太网的几十米,那就更需要特殊的IO模块,甚至于独立的混合信号芯片来保证传输。基于这样一个分类,下文会把包括内存在内的所有出芯片的接口作为IO来讨论。

所有的IO协议,都可以按照网络OSI模型的1-3层来分。而且越高速的协议,这种分层越清晰。这样在芯片设计上,就形成了软IP和硬IP的说法。软IP只负责逻辑协议设计的实现,硬IP负责物理信号层的实现。他们之间的交互是预定义的逻辑层接口。这个中间接口既可以在芯片内,也可以在芯片外。在芯片外,物理层模块就独立成了外部PHY,反之,就成了内部PHY。这种模块化的设计,使IO控制器设计得到了简化。把旧的设计搬到新工艺上,软IP不用变,重新设计硬IP就行了。那些低速IO协议,比如GPIO,PWM,UART,他们的硬IP基本就是一个IO Buffer,估计加了点内部上拉,驱动电路,电流控制等,就直接连到封装外面去了。而高速IO协议的硬IP,只要传输率接近,也是可以公用模块的。这样设计和调试都会简单不少。

典型的IO协议,传输率1Mbps以下,有I2C和UART;1Mbps-100Mbps有并口NOR flash,nand,SD,SPI等。100Mbps往上到10Gbps,有USB, 以太网,PCIe,SATA等。
在此我先提出一个理想中的IO模型,包括它的软件驱动,软IP,硬IP。然后把这个模型和各个真实的协议作比较,分析他们在物理层,逻辑层,编程以及应用上的优缺点。这样我们可以讨论各种IO协议设计背后的原因,而不仅仅是比较协议的定义。这一点我觉得非常重要。在我学习IO协议的过程中,往往是拿起规范看几个月还似懂非懂,等到真正调试各种软硬件问题以后,才了解协议定义背后的含义。而一旦深入理解了一个协议,学习下一个就会容易很多。
...全文
689 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧