立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 172|回复: 5

[分享] 人类制造的最不可思议的机器有哪些?

[复制链接]
发表于 2025-1-26 08:43 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2025-1-26 08:43 | 显示全部楼层
看了半天怎么没有人提目前元胞自动机领域最震撼的模型 — 0E0P?






^ 这是5个0E0P metacell





^ 放大 8 倍





^ 16倍





^ 32倍





^ 64倍





^ 512倍





^ 2048倍

下载地址:Life Wiki 0E0P glider
要知道,这个东西里面的白色方块(也就是活细胞),只要少一个,它就会完全崩溃(或者无法完成预想的演化)每一个滑翔机的位置都是精心安排好的,这能不能算人类制造的最不可思议的机器?
那这个 0E0P-metacell 到底有多复杂呢?

  • 一个metacell大约有18650000个活细胞(Number of cells)
  • 位于一个大小为262144 × 262144的选择框内
  • 迭代68719476736步为一个周期
Life Wiki是这么描述它的复杂度的:
The metacell's circuitry is sufficiently complex that a single Conway's Life meta-glider requires a compressed pattern file several megabytes in size.[3] It can be run in Golly at small step sizes with no difficulty, but simulating an entire replication cycle (half a metatick) is very difficult. On current computers it might take about half a CPU-year using Golly's standard HashLife algorithm.
An order of magnitude improvement over HashLife is available via Goucher's special-purpose StreamLife algorithm. However, even using StreamLife it might take several months to simulate the eight replication cycles (four full metaticks) needed to return a metaglider to its original phase. The original experimental verification of a single metatick, using rule where a single ON cell is a still life, took about a month.
metacell 的一个循环非常复杂,以至于单个0E0P的压缩文件占用几兆字节的大小。 它可以在 Golly 中以小步长毫无困难地运行,但模拟整个复制周期(半个 metatick)非常困难。在当前的计算机上,使用 Golly 的标准 HashLife 算法可能需要大约半个 CPU 年。 通过 Goucher 的专用 StreamLife 算法可以获得比 HashLife 一个数量级的改进。然而,即使使用 StreamLife 也可能需要几个月的时间来模拟将 metaglider 返回其原始阶段所需的八个复制周期(四个完整的 metaticks)。单个 metatick 的原始实验验证,使用单个 ON 单元格是静物的规则,花了大约一个月的时间。
<hr/>想要彻底理解这玩意有多震撼。先得知道什么是元胞自动机(考虑到国内研究这玩意的人少之又少,还是先简单介绍一下)
(选自维基百科)
元胞自动机(英语:Cellular automaton),又称格状自动机、细胞自动机,是一种离散模型,在可计算性理论、数学及理论生物学都有相关研究。它是由无限个有规律、坚硬的方格组成,每格均处于一种有限状态。整个格网可以是任何有限维的。同时也是离散的。每格于t时的态由t-1时的一集有限格(这集叫那格的邻域)的态决定。每一格的“邻居”都是已被固定的。(一格可以是自己的邻居。)每次演进时,每格均遵从同一规矩一齐演进。
简单的说,我们把二维平面分成无限个方格,每个方格看作一个细胞。它有两种状态:死或者活。
细胞的死活由其周围的细胞(即其8个邻居)决定:

  • 活着的细胞,在以下情况下,将会死亡:

    • 群体过剩: 如果细胞有4个及以上的邻居活着,则该细胞死亡。
    • 孤独: 如果活着的邻居数量等于或少于1个,则细胞死亡

  • 新生:

    • 死亡的细胞,如果它周围刚好有3个活着的邻居,则它也会变为“活着”状态。

  • 其余情况细胞的状态保持不变
^ 这就是著名的B3/S23规则 (Born if 3, survive if 2 or 3),也称为 life rule,这种规则下的元胞自动机叫做生命游戏。
很简单吧?告诉你我是怎么入这个坑的,大概在5、6年前,看到某乎回答说就是这种简单的规则能产生极其复杂的图案,甚至混沌中能产生生命!





我当时就血脉喷张,激动地立刻下载了golly来玩,查了很多资料。。。但是入坑了以后才发现,根本不是我想象的那样,可以自行演化出生命,这些所有精妙的图像(pattern)全是人精心制造或者搜索出来的,还极其脆弱,少一点就崩溃,变成一滩死水。。。
但生命游戏的魅力太大了,吸引着全球玩家投入自己的精力。
比如我,看到了这个wiki上的帕斯卡breeder,到处找都找不到源码。






于是花了好几天,放大了以后把细胞一个个抠出来,失误一个都会导致崩溃。非常佩服它的制造者,但是它仍远远称不上生命游戏中最复杂的机器。
给你代码(直接粘贴到golly就行):
x = 129, y = 103, rule = B3/S23
42bo13bo$41b3o11b3o$40b2obo5bo4b2obo15bo13bo$40b3o5b3o3b3o15b3o11b3o$
41b2o5bob2o3b2o15bob2o4bo5bob2o$73b3o3b3o5b3o$73b2o3b2obo5b2o2$51bo$
49b2o4b3o$55bo2bo19bo$52bo2bo16b3o4b2o$47bo7bo15bo2bo$46bo3b2o4bobo15b
o2bo$46bo27bo7bo$47bo23bobo4b2o3bo$83bo$40bo9bo31bo$39b3o6b3o$39bob2o
5bo30bo9bo$40b3o5bobo28b3o6b3o$40b2o7b2o30bo5b2obo$55bo5bo17bobo5b3o$
54b3o3b3o16b2o7b2o$54bob2ob2obo5bo5bo$55b3ob3o5b3o3b3o$55b2o3b2o5bob2o
b2obo$47bo20b3ob3o$47b2o9bo9b2o3b2o$46bobo8bobo22bo$56bo3bo10bo9b2o$
57bobo10bobo8bobo$23b3o11b3o12bo5bo10bo3bo$23bo2bo10bo2bo11b2o4bo11bob
o$23bo6b3o4bo13bobo3bobo11bo5bo12b3o11b3o$23bo5bo2bo4bo19bobo11bo4b2o
11bo2bo10bo2bo$24bobo2bo3bo4bobo17bo11bobo3bobo13bo4b3o6bo$30b4o36bobo
19bo4bo2bo5bo$32bo38bo17bobo4bo3bo2bobo$96b4o$24bo72bo$23b3o$23bob2o4b
3o25bo45bo$24b3o4b2o25bobo43b3o$24b2o5b2o25bo2bo8bo25b3o4b2obo$28b2ob
2o25bobo8bobo25b2o4b3o$29bobo19bo16bo2bo25b2o5b2o$30bo19b3o16bobo25b2o
b2o$49b2obo25bo19bobo$49b3o25b3o19bo$39b3o7b3o25bob2o$4bo13bo20bo2bo7b
2o26b3o$3b3o11b3o19bo38b3o7b3o$3bob2o4bo5bob2o18bo38b2o7bo2bo$4b3o3b3o
5b3o19bobo47bo$4b2o3b2o2bo4b2o70bo$9b2ob2o22b2o49bobo20b3o11b3o$9bo2b
3o20b3o6b3o3b3o57bo2bo10bo2bo$10bob2o22b2o5bo2bo3bo2bo38b2o16bo6b3o4bo
$12bo22bo10bo3bo26b3o3b3o6b3o15bo5bo2bo4bo$8bo3bo4b3o26bo3bo25bo2bo3bo
2bo5b2o17bobo2bo3bo4bobo$12bo3bo2bo23bobo5bobo25bo3bo10bo22b4o$12bo6bo
59bo3bo35bo$9bob2o6bo27b3o8b2o16bobo5bobo$8b2o6bobo28b3o8bobo50bo$47bo
bo9b2o9b2o8b3o27b3o$13b2o33bo20bobo8b3o27bob2o4b3o$12bo6b3o3b3o20bo20b
2o9bobo28b3o4b2o$2bo7bo8bo2bobo2bo53bo29b2o5b2o$b3o6bo8bo7bo53bo33b2ob
2o$2obo7bobo5bo7bo18bo3bo7b2o56bobo$3o9bo7bobobobo13bobo3b2ob2o6bo2bo
42bo5bo7bo$b2o38b2o4bobo8b2o10b2o7bo3bo18b3o3b3o$23bo17bo27bo2bo6b2ob
2o3bobo12bob2ob2obo15b3o$22b3o23bo21b2o8bobo4b2o14b3ob3o15bo2bo$22b3o
23bo39bo14b2o3b2o18bo$48bo32bo46bo$81bo24bo18bobo$8b2o71bo23bobo$9b2o
10bo3bo5bo72bo3bo$8bo12bo3bo4b3o72bobo$20bobobobo2b2obo65bo7bo14b2o$
22b3o4b3o65b3o6bo14bobo$13b2o7b3o5b2o65bob2o4bobo13bo$14b2o7bo74b3o4bo
bo$13bo84b2o6bo$116b2o$116bobo$18b2o83b2o3b2o6bo$19b2o$18bo$111b2o$16b
o89bo4bobo$15b3o5b2o81bo4bo$14b2obo6b2o$14b3o6bo$14b3o89b2o$15b2o89bob
o3b3o$106bo4bo2bo$114bo$110bo3bo$114bo$111bobo!
因为有更加NB的pattern。
比如Paul Rendell制作的通用图灵机,证明生命游戏是图灵完备的:






下载地址
还有著名的Golly Tricker(golly是个软件):






其他但是与下面这些复杂的图案比起来,上面都不算啥。这些人类智慧的结晶包括但不限于:

  • 各种滑翔机合成(多个滑翔机合成为一个复杂图案,理论上任何图案都能用滑翔机合成)











  • 打印机(类似Golly trickier)

















  • Replicator(复制机) 一直存在于理论中,直到2013年生命游戏中首个复制机被制作出来。它就是Linear_propagator,使用滑翔机流作为遗传信息载体,一个复制周期为237228617。











  • 各种 metacell
下面介绍一下著名的 OTCA metapixel,它可以作为生命游戏中的一个细胞,模拟任何规则。






从而实现生命游戏套娃:






<hr/>
现在本文的主角——0E0P终于可以登场了,作为metacell的一员,它的复杂度秒杀了以上所有pattern。






我们可以看到它的主体是一堆滑翔机流,但是很明显它们之间的间距不同,这意味着这些滑翔机像DNA一样编码着一些信息(参考上文的Golly-Trickier等打印机,用滑翔机流编码的信息输出了文字和图案)






当然它的四周也有逻辑元件,负责解码信息。这些庞大的信息流,相信你已经猜到了,编码的就是0E0P自己
也就是说,它可以通过解码滑翔机流,实现自我复制。
更令人震惊的,它还是一个通用构造器,只要你给它正确的滑翔机序列,也就是它的DNA,它就能打印出任何东西,包括它自己。下面是0E0P复制的全过程,当然是在一个极大的空间和时间尺度下进行的:






(来自B站视频 Structures auto-répliquantes dans les automates cellulaires - Passe-science
你以为这就完了吗?0E0P为什么会自我复制?因为它还可以作为元胞自动机里面的一个metacell,也就是生命游戏套娃,实现了从完全空白区域凭空产生一个活细胞,当然是由它的一个邻居复制而来。现在你就能理解为什么它叫0E0P:Zero Encoded by Zero Population。
平面上将会诞生的,他会由邻居复制出来一个,而平面上将会死亡的,0E0P会收到自毁信号,彻底抹去整个图案!这是与OTCA metapixel最大的不同,OTCA需要一个覆盖整个平面的metacell框架,而0E0P能将自己的结构打印到周围完全空白的空间。






^ 这个动图展示了0E0P如何模拟B3/S23规则。从单个细胞到判断周围细胞个数,再到判断是否应该自毁的演化。 最终应该是啥也不剩,因为在B3/S23中一个细胞是活不下去的。
由于单个0E0P只能收到周围4个相邻细胞的信息,也只能将自己复制到周围4个方向,生命游戏所指的邻居是周围8个细胞,因此它不得不将1代的演化拆分成2代进行,产生一些中间状态,过程略复杂。
但是当从很远的地方观看、且以 2^36 的步长运行时(即跳过中间状态),它将与使用相同规则的正常图案无法区分——除了元单元图案运行速度将慢 2^36 倍。






^ 这是从LifeWiki上下载下来的pattern,包含5个0E0P metacell,从大尺度上看它就是一个滑翔机。能猜到这个0E0P模拟的是滑翔机的斜向运动。
LifeWiki上展示了这个由0E0P构成的滑翔机是如何在B3/S23规则下演化一代的:


























































































参考:
本文使用 Zhihu On VSCode 创作并发布
回复 支持 反对

使用道具 举报

发表于 2025-1-26 08:44 | 显示全部楼层
Bagger 288挖掘机
KRUPP Bagger 288 是德国的 Krupp 公司为德国 Rheinbraun 采煤公司制造的巨型露天采矿车,它曾经在很长时间内占据着地球陆地表面上最大的可移动机械的霸主地位。Bagger 288 制造费用约为 1 亿美元,设计制造时间长达五年,需要有五人(五个唐国强?)进行操作。总长 220 米,高 96 米,重 13500 吨,从各方面来说这都是一台巡洋舰级的巨无霸。

Bagger 288" 走 " 起来不算快,每分钟约 2~10 米,但它的旋转挖矿轮每天可以吃下 240000 吨的土石(平均一小时 1 万平方米)。18 个轮盘式挖掘铲斗中的每一个就可以铲起 6.6 立方米的矿石或土质材料,这台巨型怪手每天可以创造一个的 5 个足球场大、17 米深的大坑!

有德国人吐槽说,2 千万年前埋藏在德国地下的宝贵褐色煤矿,被这怪物贪婪地吞噬着,悲催的是他们正在上网用的电就来自于怪兽拉出来的便便。











图片来源:
https://www.quora.com/What-is-the-most-interesting-vehicle-land-sea-or-air-you-know-about极其震撼! 大过自由女神的挖掘机  你见过吗?(图)
回复 支持 反对

使用道具 举报

发表于 2025-1-26 08:45 | 显示全部楼层

哈曼505计算器


布朗斯11s计算器



Cellatron R44SM计算器


百万富翁计算器


哈曼300计算器


布朗斯11s


Diehl Transmatic计算器


Diehl Transmatic计算器


Friden 1217


Marchant EFA计算器


Marchant EFA计算器


Cellatron R44SM计算器


门罗Mach 1.07计算器


门罗PC1421

回复 支持 反对

使用道具 举报

发表于 2025-1-26 08:46 | 显示全部楼层


1964年,4倍于U-2飞行速度的SR-71横空出世,拯救了美国军方和总统的荣誉。SR-71使用了大量当时的先进技术,不但设计上采取低可侦测性技术,更能以3马赫的高速躲避敌机与防空导弹。在实战记录上,没有任何一架SR-71曾被击落过。
SR-71被设计为具有非常小的雷达反射截面(radar cross-section,RCS),这是早期的隐形设计。然而,工程师忘了飞机有发动机吗?高温发动机是会排气滴呀!即使燃料用了铯来干扰雷达,还有温度滴呀。。。于是即使采用了大量的隐身技术,黑鸟在高速飞行时候巨大的红外特征(还有声音吧?)导致其完全不具备隐形功能。SR-71在自家联邦航空总署(Federal Aviation Administration,FAA)的长程雷达上都是最大的目标之一,在几百哩外就能追踪,莫说敌国了~~~
在头顶上被收集情报对任何国家来说都是一种侮辱,尤其是俄罗斯和朝鲜。虽然美国的侦察行动是秘密开展的,但飞机许多部位的温度可以达到900度,源源不断地散发热量,明明知道美国谍机就在头顶上,下面的军队却完全无计可施。
在全世界头顶招摇过市,调戏敌国30多年的SR-71完全是凭其神一样的高速,和比当时商务班机的飞行高度高3倍的高度,成功摆脱了上千次针对它的阻截和攻击全身而退的,其中绝大部分都来自前苏联的飞机和对空导弹。
附上两个关于著名的SR-71的笑话
“我永远记得那一天的无线通讯,当时我正和沃尔特(我的后座驾驶员)一起在13英里高度划过南加利福尼亚的天空。
“在飞入洛杉矶空域的时候,我们一直监听着空中其他飞机和飞控中心的通讯。虽然飞控中心并不真正控制我们,但是它始终在自己的雷达上监视着我们。这时,我听到一个塞斯纳(注:中国桑塔纳式普及型单引擎飞机)飞行员请求塔台读出他的地速。
“‘90节。’塔台回复。
“沉默了片刻,一架双发比奇(注:一种双引擎螺旋桨飞机)也同样要求塔台读出它的地速。
“‘120节。’塔台回答。
“很明显那天并不只有我们对自己的地速感到自豪,因为几乎是立刻,无线电上传来一个F-18(注:美国海军双引擎喷气式战斗机)飞行员得意的声音‘哦,中心,‘灰尘52’需要地速读出。’
“短暂的沉默之后,塔台回答‘地速525节,灰尘。’
“又一阵短暂的沉默。正当我心里痒痒的考虑时机是否成熟的时候,我听到后座传来了熟悉的无线电开关的喀嗒声。就在这一瞬间,我明白我和Walt成了真正的拍档。
“‘中心,我是‘白杨’20,需要地速读数,完毕。’
“一阵比平常长的多的沉默之后:‘白杨’,我这里的读数是,呃……1742节。
“那天那个频道没有更多的地速读数请求了。”
以下是另一段著名的SR-71与洛杉矶塔台的对话:
“请求60000英尺高度的空域使用权,over。”
沉默了片刻,传来了塔台调度员略带惊奇和嘲讽的声音:
“你打算怎么爬升到那个高度?”
沉默。飞行员回复:
“我们不打算爬升到那个高度。我们要下降到那个高度。over。”
回复 支持 反对

使用道具 举报

发表于 2025-1-26 08:46 | 显示全部楼层
//2015.1.20 更新多路选择器,锁存器,你们都以为我要太监了吧!我会更完的!
我决定占个坑准备写我人生中第一个长答案。
我心目中最不可思议的机器大概是计算机。这里计算机的概念包括所有涉及数字电路的东西,自从我上了数字逻辑设计之后我就对这一类的东西感到无比敬畏。这一类东西的终极体现,就是现在的家用计算机,手机,单片机,超级计算机等等的具有编程能力的计算设备了。我一直以为这类计算设备是人类历史上工程学的顶峰,处处体现着人类智慧的伟大之处,精巧得无与伦比。
为什么呢?
可能因为我对计算机这个东西了解比较深吧,毕竟大学上过课,所以可能觉得它真是神奇,而对于其他的东西比如火箭和航空发动机,我就没什么了解,啥都不知道自然不理解它的复杂性。
评论区
@阿傩 提到,计算机其实从结构上不复杂,它由很多大的部分组成,每个大的部分里面有很多重复的东西。我其实还蛮同意这个观点的。不过我还是坚持我的看法。在我有限的知识范围内,我觉得计算机最为不可思议的逻辑其实是这样的:
我们不能用一样东西的功能集成度来判断一个东西复不复杂,你肯定不能仅仅因为一辆汽车里面有行车电脑就认为汽车比计算机来得更加精巧对吧。为什么我觉得计算机非常精巧,是因为计算机的每一个小部件,都是为计算机整体服务的,你把内存拆出来,它什么事也干不了;你把8253计时器单独拿出来,它也没什么用,你必须把它加到一个计算机系统里面,它才能发挥作用。计算机的每一个部件,从高级的主板,CPU直到三极管级别,都是为计算机整体服务的。这里当然涉及了很多层的抽象:从三级管到门,从门到全加器和多路选择器这类数字电路器件,从数字电路器件到比如ALU和控制器这样的中型集成器件,再到CPU和内存这样的高级集成器件等等。其中每一层的设计都很精巧,足够让人赞叹。这里每一层的抽象,目的都只有一个:计算机,或者像我上面所说,可编程的数字电路计算设备。当一个工程设计涉及了无数层的集成和抽象,其中每一层都很美妙的时候,最终产品的精妙真的只能用脏话来形容了。这个答案也就是为了展现其中每一层抽象设计的精巧所在。
我会试图用最简单的语言把它讲清楚。
目录
三极管
二元布尔代数和逻辑门
全加器和多路选择器
锁存器和触发器
时序逻辑和自动机理论
模型机和控制器
CPU结构
储存器结构
总线
现代计算机架构

appendix
有关半导体的初步知识和光刻技术
图灵机和可计算性理论初步

那么,我们从三极管开始慢慢讲起…
//12月26日更新
这是一个电子管:


这是一个晶体管:


这是一个MOSFET的示意图:


严格来说,MOSFET其实是晶体管的一种。
这三样东西都可以被叫做三极管(Triode),一种电气器件。
这三样东西在历史上都曾经被用作数字电路的基本部分,先是电子管,然后是BJT晶体管,然后是MOSFET,现在常用在集成电路里面的就是MOSFET了,因为它能做的特别小,小到几十纳米(怎么做出来这种很小很小的三极管我后面会介绍一下)。具体它们怎么工作的大家不用知道,涉及半导体物理,这个我也不是很懂,只需要知道它们的功能:能够做成一个电子开关。电子开关就是能用电信号控制电路通断的一个开关。啥意思呢,假设你家里现在装了一盏灯,如果它装了一个电子开关,那么你就需要给这盏灯的开关施加一个电压才能把灯打开。这显得特别蠢,因为为啥我不直接把电压加到灯泡上呢?这是因为:我只需要给这个开关施加一个很小的电压就能让开关打开,而这个电压未必能足够让灯亮起来,这是三级管的放大作用,不过在数字电路里边不会用到;另一个原因是有一类电子开关是反着来的,高电压断路,低电压接通。这两种电子开关就是我们用来做计算机的玩意儿了。
用电子开关去焊一台计算机出来貌似很遥不可及,不过现在我们手头有了电子开关,我们可以做一些简单的东西了:
逻辑门
大家耳熟能详的一句话叫做计算机只认识0和1,这个是什么意思呢。计算机里面的数字电路是基于某一种特殊的布尔代数的,布尔代数这个名字听上去有点吊吊的,但是这种特殊的布尔代数其实就是在0和1上的运算,只有0和1,这个概念和二进制有点不一样,二进制是一种计数法,二元布尔代数只有0和1两个东西,没有2啊3的,也没有10,11。计算机使用布尔代数的原因倒是不难想,因为高电平和低电平(电平这个词大家就理解成一个电压标准好了)天然适合表示0和1,你要它表示一个新的数,你得弄个中电平出来,这个东西在电路设计里面就很麻烦了。不如用高低电平来表示,这样直接用电路通断就能很方便的控制了。布尔代数这玩意牛逼就牛逼在弄出布尔代数的时候可还没有计算机啊,那个时候才1850年,研究这东西没有物理背景的,谁能想到这玩意以后因为计算机大红大紫了呢。很多现在研究的数学问题也没有什么物理背景,千万别去嘲讽数学家们弄这个,没准哪天就用上了。
感谢
@高建的补充:
"给一点纠正和补充吧,布尔代数不必须只有0和1,详细参考近世代数和/或离散数学的内容。逻辑电路使用的是一个特殊的布尔代数系统。"
实在抱歉,不过不影响理解我后面的内容就暂时不改了,大家知道是错的就好。
布尔代数里面最基本的三个运算是与、或、非,与和或是二元运算,代表着它需要使用两个数来算出一个数,非是一元运算,代表着它只需要一个数就能算答案了我把这三个运算的真值表列在下面:
与:


或:


非:


这三个运算构成了一个布尔运算的完备集(是这个词吗?我离散数学的书不在手边查不到...),意思就是只要用这三个运算的组合,就能完成这世界上所有可能的布尔运算,你怎么定义这个运算都可以。其实使用一点简单的代数知识我们可以证明其实只要非和与,或者非和或,也能做到。
那么,如果我们想要实现一个运算,比如一个三元布尔代数运算,就是有三个数输入,一个数输出的运算,我们只需要用一大堆与或非,然后凑吧凑吧就能把这个运算写出来。这个功能其实就很强大啦,比如,我们想要做一个四位二进制加法,四位数加四位数,输出一个四位数加一个进位,我们只需要五个八元布尔代数运算就行了,每一个运算对应答案上的一位,还有一个对应进位。
为了实现这样强大的功能,我们只需要做出三种对应最基本的三种运算的电子器件,我们再使用这些东西组合一下,就能实现非常复杂的逻辑了对吧?这些对应最基本运算的电子器件,就叫做逻辑门(Logic Gates)


与门有两个输入端,两个输入端都是高电平的时候输出端也是高电平,否则就是低电平,非门当输入端是高电平的时候输出端是低电平,输入端是低电平的时候输出端是高电平,或门就不用说了。
怎么做呢?
我们最先考虑一个简单的东西,与门。
我们回顾一下最基本的初中物理:串联和并联


恩,这是两个开关串连在一起,最左边接电压源。我们发现只有两个开关都接通的时候,输出端是高电压。非常合适。我们把这两个开关变成上面说的,通电就通的电子开关,分别引出两个输入端,我们就有一个与门了。
但其实这还不够,在输出为低电平的时候,输出端不能像现在一样啥都不接,得接一个低电平,所以这只是一个与门的一半,另外一半是这样的:



0这一端表示接地,这两个电子开关是那种反着来的电子开关,加电压就断,不加电才通。
我们把这两个东西写到一起来。


开关变了个样子,大家不要激动,忽略那些参数,箭头向下指的是PMOS,就是M3和M4,相当于我们说的反着来的电子开关。箭头向上指的那两个(M1和M2)是NMOS,相当于我们说的正着来的电子开关。这两种MOS一起组成的电路就叫CMOS电路。我们现在就有了一个与门。
但其实现实中也不是这样做的。因为PMOS和NMOS本身的一些电气特性,这样做出来的与门稳定性很差,现实中我们是这样做的:


把0和1反一下。
这样做出来的输出正好和与门是反过来的,相当于与门后面跟了一个非门,所以它叫与非门(NAND Gate),写成符号的话是这样的:


它很牛逼,原因如下:
这是一个非门:


这是一个与门:


这是一个或门:


根据上面的内容,只要有这三个门就能完成所有的二元布尔运算。也就是说,它一个门就能搞定所有的二元布尔运算。
实际上在操作中我们是直接使用原理相似的或非门和非门去搭电路,而不是用与非门做出来的这种复杂玩意儿,但是这也足够神奇了不是么。
接下来我们就可以尝试做做最简单的计算器了。
全加器(Full Adder)

全加器是用来计算加法的电路,顾名思义。既然有全加器,那么就应该有对应的半加器。半加器是不带进位的加法,如果是一个一位半加器,就只有两位输入,一位输出,如果有进位的话就丢弃掉。全加器表示的是带进位的加法。一位全加器有三个输入端,除了两个加数以外还有一位的进位。对应的,它也有两个输出,一个代表的是这一位的结果,另外一位是进位。多了进位的好处是,如果我们把足够多的全加器串联起来,就能做成一个多位加法器,像是这样:


这是个三位的加法器,A和B表示输入,O表示输出。当然也可以往后面不断接更多的全加器,变成4位5位6位....等等。加法器其实是所有运算电路的基本元件,减法器和加法器基本上是一样的,乘法其实是移位和加法的结合,除法是移位和减法的结合(大家想想运算的时候列竖式是怎么列的?)。
说起来全加器的内部结构也是挺简单的。不过首先我们需要一些分析,这里可能讲得比较晦涩,如果大家不想看的话直接往后跳到下一部分就好了。
全加器一共有两个输出,O和C,分别代表结果和进位。
O在三个输入中有一个为1或者都为1时为1,其余情况为0,相当于在输入中数1的个数,如果是奇数就为1,如果是偶数就为0。很凑巧的是,我们有一个专门的逻辑运算来处理这个问题,叫异或(XOR),它是一个二元运算,如果两个值相同则输出0,两个值不同输出1。写成公式的话就是下面这个样子。

圆圈里一个加号就是XOR,上加横线表示not,表示或,这个符号上下颠倒表示与。
其实我们也是有专门处理异或运算的门的,用符号表示成这样:


那么输出端O的电路可以这么画:



C在三个输入中有两个以上为1时为1,其余情况为0。
我们可以把它写成这个样子:

看上去超级复杂,其实逻辑很好理解,如果A和B都是1,等于1,,C就等于1,接下来一个部分是来考虑A和B不都等于1的情况的,这个时候只要AB其中之一等于1,C0也等于1,C输出也是1。
我们可以把它也画成电路:


然后把两个部分拼在一起:


(不想画图了,就从课件上截了个图...)
就是全加器啦。可能有人发现了,我们其实重用了一个门的输出,就是O部分电路里面的第一个异或门。这个异或门的输出可以代替C部分电路里面的第一个或门的输出,结果是一样的。
现在,如果大家有心思用开关和小灯泡当输入和输出器件的话,我们已经可以做成一个只能算二进制加法的计算器了。
离计算机还真是遥遥无期啊。
接下来要简单介绍一个很重要的部件,它是计算机实现多种功能选择的基础:
多路选择器(Multiplexer,MUX)
多路选择器,顾名思义,就是能在很多路中间选一个的元件。
最简单的多路选择器是这样的:


什么意思呢,当A为0的时候Z的输出等于I0,当A为1的时候Z的输出等于I1。
当然它也有4:1版本,8:1版本,输入端相应增加就是了,功能不变。下面是一个4路选择器的门级电路图(后面电路说明不想看可以不看),看上去有点乱,其实还蛮简单。拿I0这条线来说,把它和A的非和B的非同时接到一个与门上,这个时候这个与门的输出就只在A和B都为0的时候等于I0,其余时刻永远为0了。其它线路也是一样的,把所有线路或成一个输出,就是多路选择器了。


这个东西有两个重要作用:
首先,比如你想做一个计算器,又能做加法又能做乘法,这个时候就需要MUX出手了。你做一个开关,表示现在正在进行的运算,0的时候表示加法,1的时候表示乘法,然后做一个加法器,做一个乘法器,把输入分别接到加法器和乘法器上,加法器和乘法器的输出接到MUX上,控制开关接MUX的控制端,输出就是你想要的东西了,现代计算机里面最重要的东西是CPU,CPU里面负责算数运算的模块叫算术逻辑单元(Arithmetic and Logic Unit, ALU),可以负责很多种运算,加减乘除,或与非等等,就需要多路选择器的控制。这个东西还可以用在存储器里面,比如我需要提取哪一个地址上的东西,把MUX控制端看成地址输入,输入端看成存储内容输入,输出就是我想要的内容了。
其次,这个元件非常讨懒人工程师们的喜欢。为什么呢?假设我要做一个三元运算,有了MUX以后我再也不用费劲想哪个门应该怎么接了,只要写一下三元运算在所有情况下的输出,然后再MUX的输入上对应接上这些输出,比如000输出0,我就在I0的位置直接接低电平,001输出1,我就在I1上接高电平,直接完事,都不用想的。
到了这里我们已经把组合逻辑部分讲完了,到了这里大家可以做一些比如闰年计算器之类的小玩意,但是离可以实用的家用电器还差得很远很远。
我们上面提到了一个重要的东西叫做存储器,大家仔细想一想,其实如果没有存储能力的话,我们能做的东西非常有限,做个计算器输入还得是用开关一位一位去拨才行,连现在的计算器上面的按键开关都不行,因为它也有最基本的存储功能,在你按下键的时候,按键开关发出了一个很短暂的高电平信号,我们还得把这个很短暂的信号存下来,变成一个稳定的高电平才行。这个时候需要一个很重要的部件出场了:锁存器(Latch)
从名字上就能看出来锁存器的功能了,把输入锁住,存起来。
锁存器需要干一些什么呢,它作为一个最简单的时序元件,它需要完成下面两个简单的任务:
1.在某一个输入状态之下,可以保存一个信号,或0或1。
2.在某一个输入状态之下,能把其中储存的信号变成自己想要的信号。
想要做一个能把一个电平存住的东西需要大家有点想象力。
先看下面这个电路:


这个电路没有输入,但这个电路用两个非门可以把里面的这个1存到天荒地老,或者停电为止。而且你要是把图上的0和1换一下,也行,这样就变存储0了。这个结构的好处就是,它可以用同一个结构存储0或者1,这是所有存储器件的基本功能。
但是光有它不够,作为一个存储器件,你最起码得有一个能力就是我要你存啥你存啥,这个结构...不行。
那我们改改。


当我们需要一个输入的时候,我们把最左边的开关合上,把Store开关断开,这个时候这个能存储的电路环就不存在了,然后从左边给输入。然后我们把Store一合,Load一断,这个时候就已经存上了。这个模型就可以当做一个存储单元用了。我们只需要把它改成一个门电路的形式就好。为了以后的制造工作省点事,我们在改动过程中需要尽量使用比较少的门电路来完成这个过程。
我们先试试用一个门行不行。


这个电路保持了上面电路的特点,如果你不给他输入,它就能一直把里面的东西保存到天荒地老。如果原来电路中保存的是0,输入为1的时候存储值就会改变成1。但是这个电路虽然能有“把存储的信号变成1的功能”,但是没有一个可以稳定的完成“把存储的信号变成0”的功能。我们需要把这个功能给引入进来。那么我们把电路改成下面这个样子:


这样,如果S保持0,R是1,就可以将保存的内容置成0了。
这个门电路结构叫做SR锁存器,其实在很多书上它还有一个非常炫酷的画法:


Q是输出表示和输出的反相,相当于输出加一个非门。
这个锁存器的功能是这样的:当S和R都是0的时候,输出是之前存储的内容。如果S是1R是0,存储的内容变为1,如果S是0R是1,存储内容变为0。如果两个都是1,此时的输出时没有定义的,这个器件要求大家在电路运行的时候不要这样做,否则会被玩坏掉。
这个锁存器是我们接下来许多各式各样的储存元件的基础,比如,门控SR锁存器:


它加入了一个控制端C,相当于之前的控制开关,只有当控制端为1的时候,S和R的改变才会影响到锁存器内部保存的信号,这样可以解决一部分S和R同时为1的情况。
再有D锁存器:


字比较小,我说一下:后面那个大元件是一个门控SR锁存器,三个输入端分别是S,C,R。
它用一个D输入端取代了S和R两个输入端的功能。纯粹靠C来控制写入/储存状态,靠D来输入,在应用上面就更加简单了。
这些锁存器有很多优点:用的门特别少,所以速度飞快,但是相对应的,比如在SR锁存器中就有一个输入组合是不能用的,而且速度再快,每个门对于电信号的处理还是要花时间的,如果输入变化太快,它也是会出现很多不稳定的现象的。怎么解决呢?我们可以通过使用一种叫做时钟的信号来控制这些锁存器工作在一个比较稳定的速度下面,还可以同步许多锁存器的共同工作。

施工中。
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表