D触发器 D-Flip-flop
锁存器属于电平敏感,意思就是只要当Enable端为打开状态的时候,输出就可以被改变。
而触发器则是边沿敏感,意思就是当时钟信号改变的时候,输出状态改变(在时钟输入的上升沿和下降沿,取决于类型)。这对于制作状态机、计数器和寄存器非常有用。
为了让大家不被大片的专有名词给吓着了,我来解释一下:数字电路中把低电平定义为0,高电平定义为1,从0到1的过程被称为上升沿,反之被称为下降沿。具体来说,一个按钮从未激活到激活的过程,就叫上升沿,反之叫下降沿。
如下所示的触发器就是一个下降沿触发的D触发器。当Clock端(时钟信号)从开变为关的时候,输出状态将会改变。这大概是最简单的触发器了,只需要两个锁存器和一个非门。注意clock端连接着两个点。
下一个例子里面我们将会用到这个触发器。
在这个例子用的是开关,效果是,当且仅当clock端的开关由开状态变为关状态时,输出端状态才会改变,并且只会变成和D端相同的状态。
这里有个衍生:如果你把开关换成2个压力板,会发现结果变得直观而且很有意思!当从右往左走经过2个压力板的时候,输出保持为开,然后再从从左往右返回的时候,输出变为关。一个实用的应用就是,进门自动开门/灯,出门自动关门/灯。如果要改变顺序的话,只要简单把两个压力板的连接反一下就行。
用按钮操纵的开关 Pushbutton Toggle
虽然Impervium控制台(Impervium consoles)好棒好棒的,不过有时候你会因为某些原因而想要用按钮来开关某样东西,但是按钮发射的是一个脉冲信号,那我们怎么用按钮来制作一个开关装置呢?
有一个办法就是使用我们刚才介绍过的触发器,不同的是还要加入一个我们之前在振荡器中用过的非门。
这样就创建了一个状态机,其输出状态与它之前的状态相反:
Q[n] = NOT( Q[n-1] )
按钮就是这个状态机的时钟信号,每按一下按钮就会引入一个脉冲信号,用来更新状态。
如果我们使用一个锁存器,在有按钮脉冲的时候,输出状态会改变好几次。由于触发器是边沿敏感,只有在每次脉冲的时候才会更新,所以我们需要的是一个触发器,而不是一个锁存器。
交易室 Trading Room
用按钮开关做一个交易室。Starbound目前还没有用于交易机制,所以我想,制作一个不依赖于信誉系统的交易方式会很有意思。下面是它的工作原理:
1. 两个玩家从各自的一边进入房间,然后关上他们身后的门。门只能从内侧来控制。
2. 左边的玩家在上面,而右边的玩家在下面,两个人都各自在两扇门之间扔下一个物品。当另一个玩家也已经扔下他的物品的时候,你需要站到压力板上,表示你已经做好准备来完成交易了。
3. 两个玩家都需要站在各自的压力板上,以便让站在上方的玩家按一下那个按钮,这会切换所有门的状态(使用了2个切换状态机)。这样就可以防止你接触到你所扔下的物品,同时让你可以去捡起对方玩家扔下的物品。两个玩家交换了位置,从另一个玩家的那扇门出去。
