原帖http://zh.minecraftwiki.net/wiki ... 3%E7%94%B5%E8%B7%AF

搬运会分多个大章节(不是骗加分……页面内容实在太多没办法)
这一篇的RS锁存器由Nonomori翻译,其它的部分是我翻译的。



锁存器触发器是相当有效的一位(1bit)存储单元。与一般单个逻辑门输出信号随着输入信号实时改变不同,锁存器与触发器允许存储输入数据,并在可控的一段时间后输出。我们可以利用这些组件建构函数,用以在即使输入不变时也会得到输出的执行结果,这样的电路可以被描述为“时序逻辑”。这样使得仅仅通过逻辑门的组合无法建成的计数器、长周期时钟与大规模复杂存储装置成为可能。
每个红石锁存器或触发器的核心为RS或非锁存器。RS或非锁存器由两个输入与输出彼此接成环的或非门组成(见下)。基本RS或非锁存器的对称性带来了对究竟哪一种状态代表“设定(Set)”一个任意结果的选择问题(除非其他的逻辑结构被接入以建立复杂结构)。锁存器通常有两个输入,一个叫做“设定(Set)”输入,另一个叫做“复位(Reset)”输入。这两个输入端被用以控制存储数据。触发器的原理是在RS锁存器周围环绕逻辑门以实现特定功能。



RS或非锁存器(RS NOR Latch)与输入稳定器  
RS或非锁存器的设计。


  
RS或非锁存器设计版本E


  
设计版本H,一个紧凑的垂直方向的RS或非锁存器 (Source)


  
RS或非锁存器使用中继器的变种


RS或非锁存器的S端收到信号真后,Q端信号将为真且永久保持,直到R端收到信号真,Q端才为假。
这个也许是Minecraft里可以制作的最小的存储器装置。 须知 Q 表示Q的反相,也就是说,如果 Q 表示为真,则 Q 是假,反之亦然。这表示,在某些情况下,你可以简单地选择你要的信号端Q,而不需要在Q后面额外的添加一个非门了。
一个很基础的例子是用它来制作一个警报系统,当作为传感器的压力板被玩家或怪物踩上后,一个警告灯(比如红石火把)会亮起,并且将一直亮下去,直到有人按下复位按钮。
在真值表中,输入端 S 和 R 是禁止同时为真的,因为这就破坏了输出端 Q 与 Q 互反的规则。并且,在一些设计版本(比如B和D)中,输入端信号非隔离于输出端信号,会导致输出信号 Q 和 Q 同时显示为真。只有当 S 或者 R 为假后,输出信号才会重新变为正确值。然而,如果 S 和 R 在同一周期同时变为假,则输出结果将不可预测,可能是 Q,也可能是  Q,取决于游戏的机制。在实际使用中,这种使得输出值无法预测的输入状态应该避免使用。在设计版本E中,如果 S 与 R 同时为真,则 Q 和 Q 同时为假。

除了传统红石电路设计,RS或非锁存器还可以用粘性活塞来实现。如果一个红石中继器连接着自己本身,并且给他一个初始电源,则这个电力将一直在电路中循环直到电路被断路。如果一个粘着方块的粘性活塞来切断电路,那么它就可以作为重置输入端 R,来重置整个锁存器电路。这个方法比传统的红石电路设计要简单,不过需要占据更多的空间。


  
一个使用粘性活塞来制作RS或非锁存器的例子。

S R Q Q
1 1 无定义 无定义
1 0 1 0
0 1 0 1
0 0 保持状态 保持状态
设计 A B C D E F G H
尺寸 3x3x1 2x3x2 3x3x3 4x2x2 7x3x3 4x2x1 3x2x2 1x3x3
红石火把数量 2 2 2 2 2 2 2 2
红石粉数量 4 4 8 6 18 4 3 5
输入独立?
输出独立?
输入端方向 相对 相对 相邻 均有 相邻 相对 相邻 相反












启用/禁用RS或非锁存器启用/禁用RS或非锁存器可以由在锁存器的两个输入端(S 和 R)均放上一个与门来实现。两个与门的输入端连到第三个输入端 E 上。如果 E 为真,则锁存器正常运行。否则,锁存器将不会改变输出状态。这又被称为门控D锁存器。
输入稳定器单元  
输入稳定器电路


这个装置可以稳定输入信号,一旦收到输入信号就能一直保持它,即使输入信号源已经关闭了。本质上,它就是一个中继器自供电的不可重置的RS或非锁存器。比如用该装置可以将按钮或者压力板所产生的一次性短促信号变为永久信号。这个装置可以改装为RS或非锁存器。一个方法是在图示的顶行,放置两个串联的非门(红石火把)。当第二个非门被激活后(也就是非门输出为假),装置的状态回到假。除此之外,也可以用活塞来实现这个改装。



D触发器与门控D锁存器(D Flip-flop & Gated D Latch)  
一个D锁存器和D触发器


D触发器(英文中“D”代表“Data”,“数据”之意),是对输入时钟脉冲边沿信号敏感的装置。只有在检测到边沿信号,才设置输出信号与输入端D相同。比如时钟的信号由假变为真(上边沿信号),或时钟的信号由真变为假(下边沿信号)。一个触发器一般被称为是边沿触发装置,锁存器被称为电平触发装置(在时钟信号真或假时一直触发)。一个基础的电平触发装置是D锁存器(设计版本A),它只在时钟信号为假时设置输出信号,在时钟信号为真时忽略输入端信号 D 的改变,保持输出端信号 Q 不变。
将一个D锁存器转换成D触发器只需要加入一个边沿触发器。设计版本B里就带有一个上边沿信号触发器,它只会在时钟信号由假变为真的时候,根据输入端信号 D ,设置输出端信号。
在这些设计版本中,它们的输出端信号都是非隔离的。这就允许异步R和S端输入(会覆写时钟信号并且强制设定输出状态)。如果要使输出端隔离,可以不使用输出端 Q, 取而代之的是使用 Q 端且加一个非门。
  
垂直D锁存器的侧面视角,设计版本C(Source)


设计版本C就是比设计版本A宽一格,并且用了正相时钟的设计版本。它会在时钟信号为真时持续的设置输出信号。我们可以设计多个这样的触发器,并且并行放置在最小的空间里。一个时钟信号可以分配给所有这些触发器,这样就允许多个触发器共用一个时钟边沿信号。输出端 Q 在反方向上和输入端一道比较容易连接。
  
设计版本D (Source)


  
设计版本E是紧凑版的设计版本A。


设计版本E就是一个更紧凑版的设计版本A,同时仍给予一样的高度需求。 图中右边的设计和左边相比需要额外的1个方块高出,不过这也允许这个边沿触发器在高电平输入时被触发。这个额外的高出方块可以通过将垂直方向上的非门放置在其所在方块下方的方块的侧面来避免。另外一个更简单的解决方法是在时钟信号上加非门,因此可以一次性满足所有共用这个时钟的该版本触发器的需求。
  
设计版本F


设计版本F在时钟信号为真时保持状态,始终信号变为假时输出D的状态。注意图中有一个用于断路的在红石线之上的方块,用黄色斜线表示。中继器在此用来同步信号,为此它必须处于激活状态。
  
门控D锁存器 - 设计版本G


设计版本G是为在墙上建造而设计的。如果你想改变状态,就必须在按按钮前拉动拉杆。该电路较宽一格,比其他设计小一些。并且比传统的宽一个的设计电路少一个红石周期运行时间。(设计版本C)
设计方案 A B C D E F G
尺寸 7x3x2 7x7x2 1x5x6 2x4x5 3x2x7 3x2x6 1x5x6
红石火把数量 4 8 5 8 5 4 6
红石粉数量 11 18 5 5 13 8 6
中继器数量   
  
  
  
  
1
触发方式 电平 边缘 电平 电平 电平 电平 电平
输出独立?
输入独立? 只有C端 只有C端



JK触发器与锁存器(JK Flip-flop & Latch)  
JK触发器设计方案


JK触发器可以作为另一种形式的记忆单元。其功能为:只有当时钟信号C“从假变真”异或“从真变假”(边沿触发,设计方案A与B)或者当时钟持续在某一电平位置(电平触发锁存,设计方案C)时启动触发。当触发器被触发:如果输入J=1且K=0,那么输出Q=1;如果J=0且K=1,那么Q=0;如果J=K=0,那么JK触发器保持当前状态;如果J=K=1,那么输出会反向变化——例如,如果触发前Q=1,那么触发后Q=0。下方的真值表总结了这些状态的变化——请注意Q(t)为出发后的新输出,Q(t-1)为触发前的输出。
JK触发器的取反功能 (J=K=1) 只有对于边沿触发的JK触发器才是有意义的——边沿触发是一种瞬时触发态。如果让电平触发的触发器(比如设计方案C)具有取反功能,保持时钟信号为真的话会使触发器不停地取反。虽然这个取反的速度还不足以让红石火把燃尽,但对于电平触发的触发器来说,取反功能依然不适用。
J K Q(t)
0 0 Q(t-1)
0 1 0
1 0 1
1 1 Q(t-1)
设计方案 A B C D
尺寸 11x9x2 9x8x2 5x7x4 5x7x2
火把数量 12 12 11 7
红石粉数量 34 35 22 20
中继器数量 0 0 0 6
存在Q输出?
触发方式 边沿 边沿 电平 边沿
  
纵向JK触发器 长宽高为1x15x10


右图是基于设计方案A的一个纵向的JK触发器设计。整个电路可以成组地建造在一起——只要您遵循一定的建造方向,电路与电路之间有一方格之隔便可。如果将K端与Q端一起输入一个与门,与门输出端接到下一级触发器的J与K端,您可以得到一个二进制计数器。如果要追求占地面积的压缩,您可以利用将红石线以中继器代替的方法来使输入端K越过所碰到的那个方块,然后在另一边用红石线连接K到Q即可。也有足够的空间让您建立纵向的与门以将结果输出到Q的右侧。
注意: 即使没有在页面中标明,设计方案D的所有中继器的延迟都应当被设定在第一格,只有一个除外。从K输入端横向过8格,纵向升2格处,那个中继器需要被设置为最长的延迟第四格。而且,所有的逻辑门在相同的同步时钟下都会同时完成输出。已经有人证明速度为1.5秒的时钟(一周期有4单位延迟)在多人模式的服务器中是最有效的(虽然在你离开时钟发生器太远时时钟会停止工作)。





T触发器(T Flip-flop)T触发器(在英文中“T”代表“Toggle”,“转换”之意)一般只要T端从假变为真(如果触发器为上升沿触发条件),输出就会取反。在Minecraft中一个比较实用的T触发器应用是连接按钮到输入端,只要按钮被按下一次,输出就会转换(比如一个门就回开启或关闭),而且按钮弹起的时候输出不会变化。(设计方案CD并不具有边沿触发的能力。一旦开始触发,输出就会不断进行反相直到触发电平被撤除)由于T触发器具有“二分频”的能力,即把每两个输入脉冲变为一个,所以它同时也是所有二进制计数器与时钟的核心。
  
T触发器设计方案


设计方案A具有巨大的占地面积,但较容易建造。它(和方案A的压缩版B) 由JK触发器通过移除输入端J与K而成,从而输出只依赖于时钟边沿信号。
设计方案C具有较小的占地面积,而且有反相输出端。但其只能被电平触发。如果输入端保持高电平,输出会不停取反直到红石火把燃尽。例如,如果上面提到的按钮直接与输入相连,输出会在按钮弹起之前切换若干次。甚至一个四刻(0.4s)的时钟信号都不足以把输出的切换次数限制到一次。为了解决这个问题,您可以通过串接一个分离的脉冲生成器以添加边沿触发功能(这样设计方案B看上去就更优秀了),或者采用任何能够在输入端只加短脉冲(2-3刻)的任何方法。
  
纵向的T触发器设计方案的侧视图


设计方案DE比其他方案更高,但宽度只有一格,这种特性使其很适应地面面积有限的情况。方案D与方案C同为电平触发,使得当需要把单个输入脉冲输到到多个触发器时能够节省空间。设计方案E为边沿触发。
边沿触发使得触发器对输入脉冲的电平持续不敏感,这样,就十分容易通过级联多个T触发器建造二进制计数器,或者适用于慢时钟的二分频器。
设计方案DE都是基于把反相输出接回到输入端的纵向门控D锁存器(设计方案C)。
  
T触发器设计方案H和J.


设计方案H采用计时原理;各中继器与火把严格对应。本方案的核心由两个火把构成的环状结构来起到记忆单元的功能。一旦接受输入,输入暂时传入到仅有一个红石火把(即非门)的环状结构中,这样会使输入翻转。输入信号必须经历一个由高电平到底电平的下降沿。最合适的电路方案仅仅只有一个火把和一个设置到4刻延迟的中继器。如果没有中继器的话,电路会陷入快速振荡最终使火把燃尽,所以请在建构环路之前保持输入在高电平。除了保持小占地面积之外,本方案反应速度也很快——输出几乎在检测到输入下降沿的同时取反。似乎如果把输入端的边沿检测器取出的话,本设计的占地是最小的(边沿检测器体积为3x4x1)。值得注意的是红石线上方需要三个方块来防止临近线的干扰,在图示中这些方块用灰色正方形代替。出于对称性的考虑,如果愿意的话你也可以在中继器上加上第四个方块。这些方块并不会增加本方案总体的高度,而且他们都处在第二层。
设计方案I并不使用中继器。输入为最下方的方块,输出可以为左上角的火把。
切换时输出会闪烁。设计方案I的俯视图
设计方案J是在本页面中最小的T触发器设计。它是设计方案H的未精简边沿感应的压缩版。由游戏模式(多人或单人),朝向与游戏版本,中继器的延迟应被设置到足够消除输出的不稳定因素。在某些情况下,本方案直到所有中继器的延迟都被正确设置之前都无法正常工作。在玩家们的体验中标明,在特定的环境中,中继器需要被设置为2-1-4刻,甚至4-2-4刻。
设计方案J的演示版本可以在这里下载[1]。其为Minecraft Server的beta 1.6.6地图的ZIP压缩格式。
  
T触发器设计方案L


设计方案L是方案J的一个简化版。为了与被边沿触发调节的脉冲长度相适应,环路周期被提高到3刻。似乎本方案能够解决方案J的稳定性问题。
  
T触发器设计方案Z1,Z2与Z3


在Beta 1.7.3的更新中粘性活塞被改进。如果一个粘性活塞被单脉冲激活,它会推/拉一个方块,但不会再把方块推/拉回来。粘性活塞的这个特性使得其非常适合建造压缩的T触发器。设计方案Z1具有最小的占地面积(粘性活塞与可移动方块在火把之上两层);设计方案Z2是高度最矮的——只有一格高;设计方案Z3为纵向设计。所有Z方案都包括必要的边沿触发功能,但一定要记住现在还不清楚粘性活塞的这个特性是否是BUG;设计方案Z4是设计方案Z1的压缩版,体积为3x3x2(独立)或3x2x2(半埋藏)。
在正式版1.0发布后一个被单独放置的红石粉,由从前的能够输出能量到四个横向方向(十字形)到不能输出任何能量到横向方向(点状)。(注:这种表述并非完全准确。虽然形状改变了,但对于某些机构来说仍有可操作性。详见点状红石线控制活塞。然而这种特性会改变红石线连接中继器的方式,从而给设计方案Z1与Z2带来问题)。也就是说在设计方案Z1与Z2中本来作为边沿触发功能应当接收两个互反输入的方块只能接收反相输入。
设计方案Z1中的问题已经被修复——只要您在中继器的输出端上加一个方块,然后再那个方块与相邻方块上方放置红石线。
  
设计方案Z1在版本1.0中的问题修复


  
版本1.1中的设计方案Z4


这个问题可以在设计方案Z2中被避免——只要您在需要接受电能的那个方块上放置红石线(图片最上方的方块)。而且您应当在从红石火把引出的红石线的上方放置方块以隔离导线。这样会使从火把引出的导线进入方块,而从中继器引出的导线会到方块的上方。采用与设计方案Z1同样的解决方法后,方块上方的红石粉会在红石火把熄灭时激活粘性活塞——也就是说粘性活塞总是会处于伸出状态。
注:右边某些绘制出的T触发器并不包括Q输出端。如果您想使用Q,在Q输出加一个反相器即可。
注:如果采用方案E您可能需要在边沿触发端与触发器之间加入一个延迟器以使时钟保持足够长的高电平让触发器翻转状态。
设计方案 A B C D E F G H I J Z1 Z2 Z3
尺寸 7x9x2 7x8x2 5x6x3 1x7x6 1x12x7 6x8x2 6x5x2 3x7x2 6x5x2 3x7x2 (3x4x2) (3x7x1) (1x6x4)
红石火把数量 10 10 8 7 12 5 5 4 5 5 (3) (3) (3)
红石粉数量 28 29 22 9 14 26 14 12 18 10 (4) 5 (4)
红石中继器数量 0 0 0 0 1 3 2 2 0 3 1 2 2
粘性活塞数量 0 0 0 0 0 0 0 0 0 0 1 1 1
是否有Q输出?
触发方式 边沿 边沿 电平 电平 边沿 电平 电平   电平 电平 边沿 边沿 边沿 边沿