---
schema_version: "library-reader-v1"
source_type: "original_book"
title: "编码 隐匿在计算机软硬件背后的语言"
author: null
edition: null
publisher: null
year: null
isbn: "9787121181184"
library_document_id: "38270854-596f-4a26-8183-db8c968c6020"
source_sha256: "249786274d83909f0bddc34d77f81ed8f0b14d1eac8843c772a37a3ecbfe2cfc"
pdf_physical_page_count: 438
pdf_physical_page_index_base: 0
range_start: 280
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020?start=280&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=280&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=270&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=290&limit=10"
---

# 编码 隐匿在计算机软硬件背后的语言

> 页码规则：PDF_PHYSICAL_PAGE_INDEX 是从 0 开始的权威文件物理页索引；PRINTED_PAGE 是页面中识别出的印刷页码，可能为空，二者不得混用。

## PDF_PHYSICAL_PAGE_INDEX=280 | PRINTED_PAGE=264

在基极施加微小的电压就可以控制非常大的电压从集电极到发射极。如果在基极没有施加电压，那么晶体管将不起作用。

晶体管通常封装在直径为四分之一英寸的小金属罐中，并伸出三根金属线，外形如下图所示。

晶体管开创了固态电子器件的时代，即指晶体管不再需要真空而是使用固体制造，尤其是使用半导体以及当今最为常见的硅来制造。除了体积比真空管更小，晶体管需要的电量更小，产生的热量更少，而且持久耐用。随身携带一个真空管收音机是无法想象的一件事情。但晶体管收音机不同，它可以由一节电池供电，而且不会发烫。1954年，对于一些幸运的人来说，或许在圣诞节卓上打开礼物盒时能获得一件可以随身携带的晶体管收音机。德州仪器公司，半导体革命中一个非常重要的公司，制造了第一批可以随身携带的晶体管收音机。

可是，晶体管真正的商业应用却始于助听器。为了纪念亚历山大·格雷厄姆·贝尔(Alexander Graham Bell)为聋人奉献毕生精力，AT&T 公司允许助听器制造商无偿使用晶体管技术。晶体管电视机诞生于1960年，到现在电子管的应用几乎已经消失了（可是，并非完全消失，一些高保真音响爱好者以及电子吉他弹奏者较热衷于电子管设备，他们更喜欢真空管放大器产生的音质)。

1956年，肖克利离开了贝尔实验室成立了肖克利半导体实验室（ShockleySemiconductorLaboratories)。他回到了自己出生的地方，加利福尼亚帕罗奥图市。他的公司是第一个落户于该地区的大公司。其他的半导体和计算机公司立刻也在该地区建立基业，旧金山南部的这个地区现在被人称为硅谷（Silicon Valley)。

开发真空管的最初目的是为了放大电信号，但是它们同样可以应用在逻辑门的开关上，作用与晶体管一样。下面你将看到非常类似于继电器形式的由晶体管构造的与门。

编码—隐匿在计算机软硬件背后的语言

264

## PDF_PHYSICAL_PAGE_INDEX=281 | PRINTED_PAGE=265

只有当A和B输入同时为1时晶体管才可以导通电流，从而输出为1。电阻的作用是预防短路。

按照下图右边的方式连接两个晶体管可以组成一个或门。在与门中，上端晶体管的发射极连接下端晶体管的集电极。在或门中，两个晶体管的集电极都与电压源连接，两个发射极相互连接。

使用继电器构造逻辑门以及其他的部件的方法对于晶体管同样是有效的。继电器、真空管以及晶体管最初都是为了开发放大器设计的，但是通过相似方式连接可以组成逻辑门，而计算机则是由这些部件构成的。1956年诞生了第一台晶体管计算机，随后的几年里，在新型计算机设计中电子管就被淘汰了。

有一个疑问；晶体管肯定可以使计算机更加可靠、体积更小以及需要的电量更少，但晶体管可以使计算机的结构变得更简单么？

答案是否定的。晶体管允许在更小的空间里安装更多的逻辑门，但是你还是要考虑这些组件之间的互连问题。把晶体管连接起来构造逻辑门，与把继电器和真空管连接起来构造逻辑门一样困难。在某些方面来看，这更加困难，因为晶体管更加小而且不容易被控制。如果你想用晶体管制造第17章中的计算机和64KB的RAM，设计工作的重要部分应当是构造某种可以放置所有部件的结构。而你的大部分的体力劳动是在数百万只晶体管之中连接数百万根线，这是很乏味的。

18 从算盘到芯片

265

## PDF_PHYSICAL_PAGE_INDEX=282 | PRINTED_PAGE=266

可是，我们已经发现晶体管的某些组合具有特定功能，可以重复利用。一对晶体管可以连接成门，而门常常可以连接成振荡器、加法器、选择器，以及解码器。振荡器可以组成多位锁存器或者RAM阵列。如果把晶体管预先连接成常见的构件，再用其来组装计算机会更加容易。

这种设想由英国物理学家杰里佛（GeoffreyDummer，生于1909年）在1952年5月的一次演讲中提出，他说：“我希望展望未来，”，接下来他提出了以下观点：

“随着晶体管的出现以及半导体研究的广泛开展，现在也许可以设想将来会出现不采用连线而是由固体块组成的电子设备。这种固体块可能由绝缘层、导体层、整流层以及放大层四个层次组成，将不同层次的隔离区连接起来即可实现电子功能。”

然而，真正可以使用的产品还需要再等上几年。

1958年7月，德州仪器公司的杰克·基尔比（JackKilby，生于1923年）想到了--个可以在一块硅片制造出多个晶体管、电阻和其他电子元件的方法，而他并不知道杰里佛预言。6个月过后，也就是1959年1月，罗伯特·诺依斯（RobertNoyce，1927-1990）也想到了类似的方法。诺依斯起初是为肖克利半导体实验室工作，但在1957年，他与其他7位科学家离开了肖克利半导体实验室创办了仙童（Fairchild）半导体公司。

在技术的发展史中，同时产生一项发明是较常见的，这可能超出了人们的想象。尽管基尔比比诺依斯早6个月发明了这种设备，而且德州仪器公司先于仙童公司申请专利，但却是诺依斯首先获得了专利。因此产生了法律上的纠纷，但过了10年后，问题才得到令双方都满意的解决。尽管基尔比和诺依斯并没有在一起共事，但今天他们俩被称为集成电路，或者叫做IC（更通俗的说法是芯片）的共同发明者。

集成电路需要经过非常复杂的工艺流程才可以制造出来，包括将硅片分层，然后非常精确地掺入杂质以及蚀刻不同的区域形成微小组件。开发一种新的集成电路尽管很昂贵，但可以大量生产中获得效益产量越大，价格就越便宜。

实际上，硅片是薄而且易碎的，因此它必须被安全地封装起来，这样不仅可以起到保护作用，还可以为芯片内部的部件与其他芯片之间的连接提供某种便利。集成电路有几种不同的封装方式，但最为常见的是采用矩形塑料双排直插式(或称为DIP)，提供14、

编码—隐匿在计算机软硬件背后的语言

266

## PDF_PHYSICAL_PAGE_INDEX=283 | PRINTED_PAGE=267

16或者40个管脚。

上图是一个有16个管脚的芯片。将芯片上的凹槽朝左放置（如图)，用1到16对管脚进行编号，从左下角开始，环绕到右端，依次为1\~16，16号管脚位于左边最上端。管脚之间的距离正好是1/10英寸。

纵观20世纪60年代，太空项目以及军备竞赛推动了早期的集成电路市场的发展。在民用方面，第一台用集成电路构造的商品是极点公司（Zenith）在1964年出售的助听器。1971年，德州仪器公司开始出售第一批便携计算器，同年，脉冲星公司（Pulsar）出售了第一块电子手表（电子手表中的集成电路当然不是刚才图示的例子那样的）。随后其他利用了集成电路的产品陆续出现。

1965年，戈登·E·摩尔（GordonE.Moore，当时在仙童公司工作，后来成为英特尔公司的合伙创办人）发现从1959年以后，技术在以这样一种方式发展：同一块芯片上可以集成的晶体管的数目每年翻一倍。他预测这种趋势将会持续。真实的发展速度比摩尔的发现稍慢一些，因此摩尔定律（最终命名）被修正为：每18个月同一块芯片上集成晶体管数目就会翻一倍。这仍是一个令人吃惊的速度，它解释了为什么刚刚过了几年就家用计算机好像已经过时了。一些人相信直到2015年摩尔定律仍然有效。

发展的早期，人们常常谈论小规模集成电路（small-scale integration），即 SSI，指那些逻辑门小少10个的芯片；中规模集成电路（medium-scale integration），即 MSI（包含10到100个逻辑门）；大规模集成电路（large-scale integration)，即 LSI（包含100到 5000个逻辑门）。随后的术语为特大规模集成电路（very-large-scale integration），即 VLSI（包含 5000 到 50,000 个逻辑门）；超大规模集成电路（super-large-scale integration），即 SLSI（包含 50,000到 100,000 个逻辑门）；超特大规模集成电路（ultra-large-scale integration，超过100,000个逻辑门)。

本章的剩余部分以及下一章，我想将时间停留在20世纪70年代中期，此时正是第一部《星球大战》电影发行前的时代，而VLSI处于萌芽阶段。那时，人们使用几种不同的技术来制造集成电路的组件。有时每一种技术被称之为一个IC家族，到20世纪70年代中期，有两个“家族”盛行开来：TTL和CMOS。

18 从算盘到芯片

267

## PDF_PHYSICAL_PAGE_INDEX=284 | PRINTED_PAGE=268

TTL 代表 transistor-transistorlogic（晶体管-晶体管逻辑）。20世纪70年代中期，如果你身为一名数字电路设计师（用IC设计大规模电路)，那么一本1.25英寸厚、由德州仪器公司在 1973 年出版的名为 The TTL Data Book for Design Engineers(《TTL 工程师设计数据手册》，以下简称《TTL数据手册》的书将会是你书桌上的常客。这是一本德州仪器和其他几个公司出售的TTL集成电路7400系列完整的参考书，由之所以这样称呼是因为这个IC“家族”的每一名“成员”都是以数字74开头。

7400系列中的每一个集成电路都是由以特定方式连接的预留逻辑门组成。一些芯片提供简单的预留的逻辑门，设计者可以用它们来组成更大规模的组件；另外一些芯片则提供通用组件，例如：触发器、加法器、选择器以及解码器。

7400系列中第一个集成电路标号即为7400，在《TTL数据手册》中这样描述它—“四个双输入正与非门”。这意味着这个特殊的集成电路包含四个双输入与非门。“正”与门则是指1对应为有电压，而0对应为没有电压。下图是一个14管脚的芯片，数据手册中的一张小图显示了管脚对应的输入与输出。

上面这张图为芯片的俯视图（管脚在下面)，小凹槽位于左边。

14号管脚标注为Vcc，与符号V一样，用来代表电压（顺便说一下，大写字母V的双下标代表电压源。下标的字母C指晶体管的电压输入端，即集电极，collector)。7号管脚标注的GND代表接地（ground)。在特定电路中使用的所有集成电路都必须有接电源端与接地端。

编码隐匿在计算机软硬件背后的语言

268

## PDF_PHYSICAL_PAGE_INDEX=285 | PRINTED_PAGE=269

拿TTL7400系列来说，Vcc值必须介于4.75V和5.25V之间。换句话讲，电压必须在5V±5%的范围。电压低于4.75V时，芯片将无法工作。而高于5.25V时，芯片将被烧坏。即便有一个5V的电池，那也不能用来对TTL进行供电，因为电池的电压不可能刚好适合这些芯片。通常情况下，TTL需要从墙上接入电源。

7400芯片中每一个与非门有两个输入端和一个输出端，且相互独立工作。上一章中已经区分了输入为1（有电压）或者为0（无电压）的情况。实际上，与非门的输入端电压可以为0V（接地）到5V（Vcc）范围内的任一值。TTL中，当电压介于0\~0.8V任一值则可以认为是逻辑“0”，而介于2\~5V则可以认为是逻辑“1”。0.8\~2V范围的电压输入则应当尽量避免。

TTL的典型输出是以0.2V表示逻辑“0”，以3.4V表示逻辑“1”。考虑到电压值不稳定，有时会有一些波动，集成电路的输入和输出端有时不用“0”和“1”表示，而是用“低”和“高”表示。此外，有时候低电压可以表示逻辑“1”，而高电压则可以表示逻辑“0”，这种配置称为“负逻辑”。7400芯片被称为“四个双输入正与非门”，而这里的“正”则代表了上述所讲的正逻辑。

如果TTL的典型输出0.2V代表逻辑“0”，而3.4V代表逻辑“1”，那么这个输出电压确实是在输入允许的范围内，即逻辑“0”为0\~0.8V，且逻辑“1”为2\~5V，这就是TTL可以隔离噪声的原因。逻辑“1”输出的电压哪怕下降1.4V也仍可以作为逻辑“1”的高电压输入，同样的，逻辑“0”输出的电压哪怕升高0.6V也仍可以作为逻辑“0”的低电压输入。

影响一个集成电路性能的最重要因素可以认为是传播时间（propagation time)，也就是输入端发生变化引起输出端发生相应变化所需要的时间。

通常以纳秒来衡量芯片的传播时间，缩写为nsec，即ns。1纳秒是非常短的时间。千分之一秒称为毫秒，百万分之一秒称之为微秒，那么十亿分之一秒则称为纳秒。7400芯片中与非门的传播时间应该保证小于22ns，即0.000000022s。

感觉不到纳秒长短的并非只有你一人。地球上的所有人对纳秒只有概念上的理解，除此之外别无所有。纳秒比人类感觉到的任何事情都要短暂得多，以至于永远无法理解它。任何解释只会将纳秒变得更加难以捉摸。比如，当你拿着一本离你脸部距离为1英尺的书时，那么纳秒可以定义为光从书页到你的眼睛的时间，但这种解释可以使你更好地认识纳秒么？

18 从算盘到芯片

269

## PDF_PHYSICAL_PAGE_INDEX=286 | PRINTED_PAGE=270

然而，纳秒使计算机成为可能。正如在第17章中看到的，计算机处理器迟钝地做着简单的事情一从存储器中取出一个字节放到寄存器中，再将两个字节相加，然后将结果存放回存储器。迅速地完成这些操作是计算机（并非第17章中的计算机，而是当今使用的计算机）能完成任何实际工作的唯一原因。诺依斯说过：“当更好地认识了纳秒后，从概念上来讲计算机操作是相当简单的”。

继续阅读《TTL数据手册》会发现书中很多熟悉的小条目。7402芯片有4个双输入或非门，7404芯片有6个反相器，7408芯片有4个双输入与门，7432芯片有4个双输入或门，以及7430芯片有一个8输入与非门，如下图所示。

缩写 Nc 表示无连接（no connection)。

7474芯片是另一个较为熟悉的芯片。它是一个“带预置和清零的双D型正边沿触发器”，如下图所示。

编码—隐匿在计算机软硬件背后的语言

270

## PDF_PHYSICAL_PAGE_INDEX=287 | PRINTED_PAGE=271

《TTL数据手册》中其至还囊括了这个芯片中每个触发器的逻辑图。

除了使用的是异或门外，你会发现上面的这个图与第14章结尾的图很相似。《TTL数据手册》中的逻辑表也稍微不同。

表格中， $^ { \ast } \mathrm { { H } ^ { \prime \prime } }$ 代表高电平，“L”代表低电平。当然，可以将这些想象成1和 $\scriptstyle \mathbf { 0 } _ { \circ }$ 在触发器中，预置（Pre）和清零输入（Clr）通常为0；这里通常为1。

继续阅读《TTL数据手册》会发现，7483芯片是一个4位二进制全加法器，74151是一个8-1的数据选择器，74154芯片是一个4-16的解码器，74161芯片是一个4位同步二进制计数器，以及74175芯片是一个带清零的4输入D型触发器。从上述芯片中挑出两种可以制作一个8位锁存器。

现在你应该知道我是怎么想出从第11章中就开始使用的这么多不同种类的组件的，这些都是从《TTL数据手册》借鉴而来。

18 从算盘到芯片

271

## PDF_PHYSICAL_PAGE_INDEX=288 | PRINTED_PAGE=272

作为一名数字电路设计工程师，你应当多花点时间看完《TTL数据手册》这本书，使自己熟悉用得到的TTL芯片类型。一旦你熟知了使用的工具，那么就可以使用TTL芯片构造一台第17章中的计算机。将芯片连接起来比将一个个的晶体管连接起来容易得多，但你可能不会考虑使用TTL来做64KB RAM阵列。1973年出版的《TTL数据手册》中，列出的容量最大的RAM芯片仅仅只有256×1位，制造64 KB需要2048个芯片！对制造存储器来讲，TTL绝非最好的技术。关于存储器将在第21章中详细讨论。

或许你想使用更好一点的振荡器。只要将TTL反相器的输出连接到输入，就会获得一个振荡器，而且其振荡频率更容易计算。这种振荡器使用石英晶体制造相当简单，石英晶体放在带有两个引线的密封小扁罐中。这些石英晶体的振荡频率在一个特定的值，通常情况下是每秒至少振荡一百万个周期，称1兆赫兹，缩写为MHz。如果要使用TTL制造第17章中的计算机，那么需要时钟频率为10MHz才可以使其运行良好，每条指令执行时间为400ns。当然，这比使用继电器来做任何我们所构想的事情都要快。

芯片家族中另一位明星（至今仍是）是CMOS，CMOS表示互补金属氧化物半导体(complementary metal-oxide semiconductor)。如果你是一名 20 世纪 70年代中期的使用CMOS集成电路进行电路设计的爱好者，那么可能会使用到一本名为《CMOS数据手册》的书作为参考源，该书由美国国家半导体公司出版，可以在当地的Radio Shack商店买到，书中涵盖了CMOS 家族中 4000 系列的IC的信息。

TTL供电电压要求在4.75\~5.25V范围内。而对于CMOS来说，范围在3\~18V内的电压均可，这是非常灵活的。此外，CMOS相比TTL需要更少的能量，这使得用电池运行小型CMOS 电路变得可行。CMOS的缺点是速度慢，比如，在供电电压为5伏的情况下，CMOS 40084位全加器可以保证的传播时间只有750 ns。CMOS 芯片的传播速度会随着电压提高而提高——10V时为250ns，15伏时为190 ns，但仍不能与 TTL4 位加法器的24 ns的传播时间相媲美（25年前，TTL的速度与 CMOS 低功率之间的权衡是非常清晰的，斗转星移，今天TTL已经拥有了低功率版本而CMOS也有了高速版本)。

在实际应用中，芯片的连接是在一个塑料“面包板”（如下图所示）完成的。

编码—隐匿在计算机软硬件背后的语言

272

## PDF_PHYSICAL_PAGE_INDEX=289 | PRINTED_PAGE=2734

每一短行有5个孔，在塑料板背面这5个孔通过电线相连。把芯片插入到面包板中，芯片将横跨在中间长槽的两侧，芯片的管脚则分别插到槽两侧的孔里，这样芯片的每一个管脚都会与其他四个孔里的管脚相连接，通过在孔之间连接电线可以实现芯片之间的连接。

使用一种叫做“钢丝包装”（wire-wrapping）的技术可以使芯片之间连接更加牢固，芯片插入到带有几个长长的方柱的插槽中，如下图所示。

每一个柱体对应芯片的一个管脚，而插口本身则插入到事先穿孔的薄板中。在板子的另一面，使用特殊的钢丝包装枪将每一个柱体周围紧紧包上绝缘线。柱体的直角边缘则从绝缘线中破出，与导线相连。

如果实际应用中使用集成电路制造一个特定的电路，那可能会用到“印刷电路板”(printed circuitboard)。很久以前，这是集成电路爱好者做的事情。这种电路板上面布满了洞，并且被一层薄铜片覆盖。基本上，可以让防酸物质覆盖铜片上所有你想保护的地方，而使用酸蚀刻剩余的部分，接着就可以将集成电路的插口（或者是集成电路本身）直接焊接到电路板上的铜片上，但由于集成电路中存在很多互相连接，仅覆盖一层铜片通常情况下无法完成电路，所以商业制造的印刷电路板有多层互连。

到20世纪70年代早期，使用集成电路在一块电路板上制造一个完整的计算机处理器变得可能，实际上这距离将整个处理器放入一块芯片中，只是一个时间问题。虽然德州仪器公司在1971年为一块单芯片计算机提交了专利申请，但真正制造出一块这种单片机芯片的荣誉却属于英特尔公司（英特尔公司成立于1968年，由仙童公司以前的雇员罗伯特·诺伊斯和戈登·摩尔合伙创办)。1970年，英特尔发售了第一款产品，一个可以存储1024位数据的芯片，在当时这是单一芯片中可以存储的最大位数。

18 从算盘到芯片

2734

下一段：[继续读取](https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=290&limit=10)
