锁存器(Latch)与触发器(Flip-flop)是相当有效的一位(1bit)存储单元。与一般的单个或多个逻辑门在输出信号时会随着输入信号而实时改变不同,锁存器与触发器允许存储输入数据,并在可控的一段时间后输出。我们可以利用这些组件搭建函数,即使输入不变时,也会得到输出的结果,这样的电路可以被称为“时序逻辑”。这样使得仅仅通过逻辑门的依次级联无法建成的计数器、长周期时钟与大规模的复杂存储装置成为可能。
“锁存器”与“触发器”是两种不同的装置。但“锁存器”可以被制作成“触发器”,它们的其中一些区别与联系在于:
- “锁存器”指对输入信号的某个状态产生反应的电路,一般用于数据存储或隔离,基本上为电平触发-输入改变输出直接改变,是无时序元件,作用只是维持一个端口的电平,“锁存”住信号;
- “触发器”指对输入信号的变化产生反应的电路。一般用于在触发条件满足之后对输出进行特定操作,以边沿触发居多-有时钟端,由时钟触发,根据输入端状态改变输出端状态;
每个红石锁存器或触发器的核心为RS或非锁存器。由于其在触发器与锁存器内的基础地位,所以在一些教科书内也会称之为“RS基本触发器”。RS或非锁存器由两个输入与输出彼此接成环的或非门组成(见下)。RS或非锁存器的对称性带来了对归根究底哪一种状态代表“设定(Set)”一个任意结果的选择问题(除非其他的逻辑结构被接入以建立复杂结构)。锁存器通常有两个输入,一个叫做“设定(Set)”输入,另一个叫做“复位(Reset)”输入。这两个输入端被用以控制存储数据。触发器的原理是在RS锁存器周围环绕逻辑门以实现特定功能。
RS或非锁存器与输入稳定器[]
RS或非锁存器(RS NOR Latch)(又与RS或非锁存器统称为RS基本触发器,或SR基本触发器)的S端收到信号真后,Q端信号将为真且永久保持,直到R端收到信号真,Q端才为假。
RS或非锁存器的最常见应用是把控制脉冲转化为稳定红石信号——就像拉杆一样。这样,只需要将两个按钮、压力板、绊线钩之类的方块连接到锁存器的两个输入端,就可以分别实现开/关的动作。
这个也许是Minecraft里可以制作的最小的存储器装置。 须知 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,来重置整个锁存器电路。这个方法比传统的红石电路设计要简单,不过需要占据更多的空间。在Minecraft 1.0之后你可以制作更压缩的RS或非锁存器:当活塞在水平面放置时电路尺寸为2x5x2,当活塞纵向放置时电路尺寸为2x3x4
S | R | Q | Q |
---|---|---|---|
1 | 1 | 无定义 | 无定义 |
1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 0 | 保持状态 | 保持状态 |
设计 | A | B | C | D | F | H | I | J | K |
---|---|---|---|---|---|---|---|---|---|
尺寸 | 3x3x1 | 2x3x2 | 3x3x3 | 4x2x2 | 4x2x1 | 1x3x3 | 2x1x3 | 5x1x3 | 4x1x3 |
红石火把数量 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 0 |
红石粉数量 | 4 | 4 | 8 | 6 | 4 | 4 | 0 | 7 | 4 |
输入独立? | 是 | 否 | 是 | 否 | 是 | 否 | 是 | 是 | 否 |
输出独立? | 是 | 是 | 否 | 否 | 是 | 否 | 是 | 是 | 否 |
两输入端朝向 | 相对 | 相对 | 相邻 | 相对 | 相对 | 相对 | 相对 | 垂直 | 垂直 |
启用/禁用RS或非锁存器[]
启用/禁用RS或非锁存器可以由在锁存器的两个输入端(S 和 R)均放上一个与门来实现。两个与门的输入端连到第三个输入端 E 上。如果 E 为真,则锁存器正常运行。否则,锁存器将不会改变输出状态。这又被称为门控RS锁存器。
输入稳定器单元[]
这个装置可以稳定输入信号,一旦收到输入信号就能一直保持它(即使输入信号源已经关闭)。本质上,它就是一个中继器自供电的无R端的RS或非锁存器。比如用该装置可以将按钮或者压力板所产生的一次性短促信号变为永久信号。
这个装置可以改装为RS或非锁存器。一个方法是在图示的顶行,放置两个串联的非门(红石火把)。当第二个非门被激活后(也就是非门输出为假),装置的状态回到假。除此之外,也可以用活塞来实现这个改装。 本装置对于压力板触发的陷阱较为有用,因为被困住的玩家即使破坏压力板也无法重置陷阱。
如果你需要重置这种电路,你可以直接改用RS或非锁存器,将R端隐藏到某个控制室即可。
RS与非锁存器[]
由于非门和与非门都是通用逻辑门,设计一个RS与非锁存器(RS NAND Latch)其实就是设计一个在输入和输出端都反相的RS或非锁存器。RS与非锁存器在相同的输入情况下,逻辑上与RS或非锁存器的输出是相同的。由于在Minecraft中一个红石火把就是一个非门,所以RS与非锁存器的设计在游戏中没有实用意义。
当 S 和 R 同时为假(也就是 S 和 R 同时为真)时, Q 和 Q 同时为真。 当 S 为真, 不过 R 为假, Q 会输出真。 当 R 为真, 但是 S 为假, Q 会输出真。 当 S 和 R 同时为真,Q 和 Q 将不做改变,会保持条件前的状态。
S | R | Q | Q |
---|---|---|---|
1 | 1 | 保持状态 | 保持状态 |
1 | 0 | 0 | 1 |
0 | 1 | 1 | 0 |
0 | 0 | 无定义 | 无定义 |
设计版本 | A | B |
---|---|---|
尺寸 | 6x3x3 | 6x2x3 |
红石火把数量 | 6 | 6 |
红石粉数量 | 10 | 8 |
输入端方向 | 邻近 | 相对 |
D触发器与门控D锁存器[]
D触发器(D Flip-flop)(英文中“D”代表“Data”,“数据”之意),是对输入时钟脉冲边沿信号敏感的装置。只有在检测到边沿信号,才设置输出信号与输入端D相同。比如时钟的信号由假变为真(上边沿信号),或时钟的信号由真变为假(下边沿信号)。一个触发器一般被称为是边沿触发装置,锁存器被称为电平触发装置(在时钟信号真或假时一直触发)。一个基础的电平触发装置是门控D锁存器(Gated D Latch)(设计版本A),它只在时钟信号为假时设置输出信号,在时钟信号为真时忽略输入端信号 D 的改变,保持输出端信号 Q 不变。
将一个D锁存器转换成D触发器只需要加入一个边沿触发器。设计版本B里就带有一个上边沿信号触发器,它只会在时钟信号由假变为真的时候,根据输入端信号 D ,设置输出端信号。
在这些设计方案中,它们的输出端信号都是非隔离的。这就允许异步R和S端输入(会覆写时钟信号并且强制设定输出状态)。如果要使输出端隔离,可以不使用输出端 Q, 取而代之的是使用 Q 端且加一个非门。
设计方案C就是比设计版本A宽一格,并且用了正相时钟的设计版本。它会在时钟信号为真时持续的设置输出信号。我们可以设计多个这样的触发器,并且并行放置在最小的空间里。一个时钟信号可以分配给所有这些触发器,这样就允许多个触发器共用一个时钟边沿信号。输出端 Q 在反方向上和输入端一道比较容易连接。
设计方案E就是一个更紧凑版的设计版本A,同时仍具有相同的高度需求。设计方案E'允许边沿触发器在高电平输入时被触发。设计版本F在时钟信号为真时保持状态,时钟信号变为假时输出D的状态。注意图中有一个用于断路的在红石线之上的方块,用黄色斜线表示。中继器在此用来同步信号,为此它必须处于激活状态。
设计方案G采用了在1.4正式版中新加入的红石中继器锁存特性,在时钟信号为高电平时维持状态。且比起其他之前的D触发器设计方案而言压缩程度大大提高。设计方案H相当于两部分G方案的组合,一个为高电平触发,一个为低电平触发,这样组合起来就是上升沿触发。如果将方块与红石火把对调,得到的就是下降沿触发。
设计方案 | A | B | C | D | E | E' | F | G | H |
---|---|---|---|---|---|---|---|---|---|
尺寸 | 7x2x3 | 7x2x7 | 6x5x1 | 2x4x5 | 3x2x5 | 3x2x5 | 6x2x3 | 2x1x1 | 3x2x1 |
红石火把数量 | 4 | 8 | 5 | 6 | 4 | 5 | 4 | 0 | 1 |
红石粉数量 | 11 | 18 | 5 | 6 | 10 | 9 | 7 | 0 | 0 |
中继器数量 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 4 |
触发方式 | 电平 | 边沿 | 电平 | 电平 | 电平 | 电平 | 电平 | 电平 | 边沿 |
输出独立? | 否 | 否 | 否 | 否 | 否 | 否 | 是 | 是 | 是 |
输入独立? | 是 | 是 | 只有C端 | 是 | 是 | 是 | 否 | 是 | 是 |
BUD型D触发器[]
有玩家[1]利用活塞BUD的原理制作了规模极小的D触发器,可以大规模的应用于集成红石电路中,但应用时应当注意除了D触发器本身之外,活塞周围的方块不能作为电路组件使用,否则会干扰该触发器的正常运作。
图中拉杆作为D输入端的例子,中间伸出的红石线为时钟触发信号输入(双边沿触发),左侧的红石线为输出端。中间的活板门只是作为BUD触发的辅助物,在Java版1.5失效,应换成活塞、动力铁轨、激活铁轨、音符盒或钟。
C
|
D
| |
右图是上升沿触发的版本。
JK触发器与锁存器[]
JK触发器(JK Flip-flop)可以作为另一种形式的记忆单元。其功能为:只有当时钟信号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 | C | D | E |
---|---|---|---|---|
尺寸 | 9x2x11 | 7x4x5 | 5x2x7 | 14x10x1 |
火把数量 | 12 | 11 | 8 | 10 |
红石粉数量 | 30 | 23 | 16 | 24 |
中继器数量 | 0 | 0 | 6 | 6 |
存在Q输出? | 否 | 是 | 是 | 否 |
触发方式 | 边沿 | 电平 | 边沿 | 边沿 |
设计方案E是基于设计方案A的一个纵向的JK触发器设计。整个电路可以成组地建造在一起——只要你遵循一定的建造方向,电路与电路之间有一方格之隔便可。如果将K端与Q端一起输入一个与门,与门输出端接到下一级触发器的J与K端,你可以得到一个二进制计数器。如果要追求占地面积的压缩,你可以利用将红石线以中继器代替的方法来使输入端K越过所碰到的那个方块,然后在另一边用红石线连接K到Q即可。也有足够的空间让你建立纵向的与门以将结果输出到Q的右侧。
T触发器[]
T触发器(T Flip-flop)(在英文中“T”代表“Toggle”,“转换”之意)一般只要T端从假变为真(如果触发器为上升沿触发条件),输出就会取反。在Minecraft中一个比较实用的T触发器应用是连接按钮到输入端,只要按钮被按下一次,输出就会转换(比如一个门就会开启或关闭),而且按钮弹起的时候输出不会变化。(设计方案D并不具有边沿触发的能力。一旦开始触发,输出就会不断进行反相直到触发电平被撤除)由于T触发器具有“二分频”的能力,即把每两个输入脉冲变为一个,所以它同时也是所有二进制计数器与时钟的核心。
设计方案B不太适用于长脉冲。
在Java版中,黏性活塞具有一个十分有用的特性:如果一个黏性活塞被宽度只有1刻的脉冲激活,它会一次性地推/拉一个方块,但不会再把方块拉/推回来。黏性活塞的这个特性使得其非常适合建造压缩的T触发器。设计方案Z1具有最小的占地面积(黏性活塞与可移动方块在位于第一层的火把之上的第二层)Z1的教程;设计方案Z2是高度最矮的——只有一格高;设计方案Z3为纵向设计;设计方案Z4由于其半埋藏的特点成为占地面积最小的方案(3x2x2)。Z4的教程如果你想使用按钮或者压力板连接设计方案Z4,第一个中继器与其右侧的方块可以被省略——只要你在那方块右侧的方块(第二层)上附着按钮或者压力板即可。
设计方案L2、L3、L4与L5均依赖于1.4正式版加入的红石中继器锁存特性。L3比起L2规模小,但反应慢。L4最小,但需要活塞,而且在下降沿触发。L5与L3占地面积相同,上升沿触发,反应速度同L2,但高度为2格。
铁轨型T触发器[]
铁轨型T触发器是使用铁轨与红石构造T触发器的方法。铁轨型T触发器比传统的T触发器慢,但在某些情况下可能更加适应地形。
在铁轨拐角处的木质方块为压力板,他们是用来切换底部RS或非锁存器的状态的。
发射器型T触发器[]
1.3正式版之后,发射器可以射出/吸回水源方块了。可以利用这一点与方块更新感应器制作简单的T触发器。但这种设计的原料耗费无疑比传统的纯活塞T触发器要大。现在水还可以换成熔岩或细雪。
不如用红石比较器输出。
中继器型T触发器[]
红石中继器在同一游戏刻先解锁再收到下降沿从而创建切换状态的计划刻,执行计划刻后再锁定。
时钟运行半周期[]
双稳态BUD[]
铜灯[]
官方压缩的T触发器,用比较器导出信号
参见[]
参考[]
语言