HIPPI 的思路是「不用编码、不用协商,直接拉一堆线并行传」。 它做到了 800 Mbps,但被 25 米这个物理死穴锁死。
3.6.6 的光纤通道是「串行 + 编码」的路子,HIPPI 是反方向:并行、不编码。 这两条路的对比,就是过去三十年接口演进的全部内容。
一、算一下就三个数
HIPPI 的规格简单到可以用一句话说完:
| 项目 | 规格 | 说明 |
|---|---|---|
| 位宽 | 32 位、50 对双绞线 | 一次传 4 字节 |
| 时钟 | 25 MHz | 每拍 40 纳秒 |
| 速率 | 800 Mbps | 即 100 MB/s |
| 距离 | 25 米 | 铜线的上限 |
| 扩展 | 双工用两组线 | 1600 Mbps 全双工 |
第二行和第三行乘起来就是 800 Mbps:32 位乘 25 MHz,正好 800 兆比特每秒。 没有 8B/10B、没有扰码、没有链路训练——因为它是并行接口,每根线上跑的就是原始数据位。 所以它的速率完全由「当时铜线能稳定跑多快」决定: 1990 年前后,25 MHz 是个稳的时钟;再快,接收端就采不准了。 「50 对线」这个数字也值得注意:32 对传数据,剩下的是控制、时钟、校验和地线。 一根线缆五十对、接头一百个针脚——这就是它贵的根本原因。
二、25 米是物理死穴
并行传输有个绕不过去的麻烦,叫「偏斜」: 每一对线的长度不可能完全一样,信号到达的时间就有先后。 线越长,这个时间差越大;差到超过一个时钟周期,接收端就分不清哪一位是哪一位了。 算个量:电信号在铜线里大约每米 5 纳秒。 25 米的线,如果两对之间差 1 米,就是 5 纳秒的偏斜; 而 25 MHz 的一拍是 40 纳秒——还忍得住。 要是时钟提到 100 MHz,一拍只有 10 纳秒,这点偏斜就直接把数据采错。 所以「并行接口距离短」不是工艺问题,是物理限制: 它不能用「把线做好一点」解决,只能「把线做短一点」。 串行链路没有这个问题:只有一根线,没有「谁先谁后」; 而且它可以编码(8B/10B、64B/66B)把时钟信息嵌进数据里,不依赖单独的时钟线。 代价是要多跑一些比特,收益是距离可以拉到几十公里。
三、并行转串行这条主线
把几个接口排在一起,就能看出这条主线:
| 接口 | 位宽 | 时钟 MHz | 距离 |
|---|---|---|---|
| HIPPI | 32 | 25 | 25 米 |
| PCI 并行总线 | 32 | 33 | 板上 |
| 串行链路 | 1 | 1250 | 几十公里 |
第三行用 1 位、1.25 GHz,比第一行的 32 位 25 MHz 还快: 32 乘 25 是 800,1 乘 1250 是 1250。 「线多了不一定快」这句话,在这张表里看得最清楚。 同样的转向在别的地方全发生过:硬盘从 IDE 的 40 根排线改成 SATA 的两对差分线; 显示从 VGA 的 15 针改成 HDMI 的四对差分线; 总线从 PCI 改成 PCIe。 每一次都是「砍掉线数、提高单线速率、加编码」。 所以 HIPPI 不是「失败的怪东西」,它是一个时代的合理答案: 在那个「串行还跑不快」的年代,堆线是唯一能提高带宽的办法。 它退场的原因和它当初成功的原因,是同一件事。
四、动手 Demo:HIPPI——用五十对铜线换 800 Mbps
把它和并行 PCI、串行链路放在一起算,看「位宽乘时钟」这件事的极限在哪。 注意最后一张表:1 位比 32 位还快,这就是串行反超的地方。
width, clock = 32, 25e6
rate = width * clock
print('HIPPI: %d 位 x %.0f MHz = %.0f Mbps = %.0f MB/s'
% (width, clock / 1e6, rate / 1e6, rate / 8 / 1e6))
print('一拍 %.0f 纳秒' % (1e9 / clock))
for name, bits, mhz in (('HIPPI', 32, 25), ('PCI 并行总线', 32, 33),
('串行链路', 1, 1250)):
print('%-14s %2d 位 %6d MHz -> %7.0f Mbps'
% (name, bits, mhz, bits * mhz))
print('偏斜 5 ns/米,25 MHz 一拍 %.0f ns' % (1e9 / clock))
实跑输出:
--------------------------------------------------------------------
HIPPI——用五十对铜线换 800 Mbps
--------------------------------------------------------------------
**HIPPI 是八十年代末的超级计算机互连,思路非常「暴力」:**
**不用编码、不用协商,直接拉一堆线并行传。**
**它把「简单」这件事做到了极致。**
项目 规格 说明
---------------------------------------------------------------------
**位宽** **32 位(4 字节)/50 对双绞线** **一次传 4 字节**
时钟 25 MHz **每 40 纳秒一拍**
**速率** **800 Mbps(100 MB/s)** 25M × 32 位
距离 **25 米** **铜线的极限**
扩展 **双工用两组线** 1600 Mbps 全双工
**第二行那个 25 MHz 和第三行的 32 位乘起来正好 800 Mbps**:
**这个速率不是「算出来的上限」,是「当时能稳定跑的时钟」。**
**所以 HIPPI 的速率完全由「铜线能传多快」决定,跟协议无关。**
**第四行那个 25 米是它的死因**:
**并行传输有个物理限制——每一对线的传播延迟必须几乎一致(叫「偏斜」)。**
**线越长,偏斜越大,接收端就采不准。**
**所以并行接口的距离上限通常是几十米,串行接口可以做到几十公里。**
**这解释了一条贯穿全书的技术路线**:
接口 位宽 时钟 MHz 距离
------------------------------------------------------------------
HIPPI 32 25 25 米
PCI 并行总线 32 33 板上
**串行链路(以太网/FC)** 1 1250 **几十公里**
**第三行用 1 位、1.25 GHz,跑得比第一行的 32 位 25 MHz 还快**:
**因为「串行」没有偏斜问题,线可以拉得很长,时钟可以提得很高。**
**这就是「并行转串行」这件事在过去二十年反复发生的原因**——
**硬盘(IDE→SATA)、显示(VGA→HDMI)、总线(PCI→PCIe),全是同一条路。**
那个「一拍 40 纳秒」不是凑出来的:25 MHz 的周期就是 40 纳秒。 并行接口的时序余量全靠这一拍—— 偏斜必须小到「信号在拍中间稳定」,所以它同时限制了距离和时钟。 「100 MB/s 在 1990 年是什么水平」值得交代一句: 当时最快的硬盘持续读写大约 5 MB/s,SCSI 总线 20 MB/s。 100 MB/s 是「内存到内存」的速度——HIPPI 存在的意义就是让两台巨型机之间的内存能直接互灌。 为什么最后是「差分串行」而不是「单端串行」:差分用两根线传一个信号,靠电压差判断 0 和 1, 共模干扰会被抵消掉。 所以它抗干扰强、能跑高速、能跑远——今天的高速链路,无一例外都是差分。
30 秒实验
- 算一下:如果 HIPPI 的时钟提到 50 MHz,25 米还够用吗?
- 想一下:为什么并行接口不能用「加一根时钟线」来解决偏斜?
- 数一下你电脑里还有几根「并行」的线,剩下的都换成什么了?
常见误区
- 以为「线多就一定快」。 32 位 25 MHz 是 800 Mbps, 1 位 1.25 GHz 是 1250 Mbps——线少反而更快。
- 以为「25 米是厂商的限制」。 是偏斜的物理限制,把线做长一点、做好一点都救不了。
- 以为「HIPPI 的设计是错的」。 在串行还跑不快的年代,它是最优解, 它只是在串行追上来之后失去了意义。
自测三问(点开对答案)
1. HIPPI 的 800 Mbps 是怎么算出来的? —— **32 位乘 25 MHz**,因为并行接口每根线上跑的是原始数据位,没有编码开销。 2. 它为什么只能跑 25 米? —— **并行传输有偏斜**:各对线长度不同,信号到达时间有先后,线越长差得越多, 超过一个时钟周期就采错。 3. 串行链路凭什么反超? —— **没有偏斜问题,而且可以把时钟嵌进数据里**,所以时钟能提到 GHz 级、距离能拉到几十公里。下一节看 1394:一个「能保证带宽」的消费级接口。
- ☐ (本节完,下一节 3.6.8 IEEE1394)