计算机IO协议扫盲之一
来源:互联网 发布:千牛淘宝卖家怎么发货 编辑:程序博客网 时间:2024/05/21 10:22
此文总结了我对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协议的过程中,往往是拿起规范看几个月还似懂非懂,等到真正调试各种软硬件问题以后,才了解协议定义背后的含义。而一旦深入理解了一个协议,学习下一个就会容易很多。
- 计算机IO协议扫盲之一
- 计算机扫盲
- java扫盲篇之一
- 计算机原理扫盲
- 计算机知识扫盲
- 网络协议扫盲
- 计算机多用户登录(扫盲)
- 计算机协议
- 扫盲行动之一:Linux常用命令简介
- DNS扫盲系列之一:有关公网DNS
- 计算机操作系统之一:绪论
- [搬运]扫盲 HTTPS 和 SSL/TLS 协议
- HTTP/2协议–特性扫盲篇
- HTTP/2协议–特性扫盲篇
- HTTP Live Streaming (HLS) 协议科普扫盲
- IO流之一
- IO流总结之一
- io学习之一
- 堆排序算法 总结
- ajax通过post传递参数
- ubuntu编译android2.2.1,遇到asm/byteorder.h:没有那个文件或目录
- 块设备驱动设计
- ajax post传参通用函数 f函数名(div层id,目标文件地址,from名称)
- 计算机IO协议扫盲之一
- 扩展精度算法
- QT Screenshot Example 看看看
- QT System Tray Icon Example 看看看~
- 听乔布斯演讲有感
- 关于/usr/include/linux和/usr/src/linux/include/linux/
- Andriod编译内核模块*.ko
- 挑战编程 程序设计竞赛训练手册-1.6.7 将军(Check_the_Check)
- 怎样在cmd(命令提示符)下进行复制粘贴操作