《星界边境》锁存器和触发器实例进阶教程
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个切换状态机)。这样就可以防止你接触到你所扔下的物品,同时让你可以去捡起对方玩家扔下的物品。两个玩家交换了位置,从另一个玩家的那扇门出去。 关于振荡器(亦称时钟)的说明 你可以用不同于之前的锁存器时钟的方法来创建时钟。 一个相当缓慢的时钟就是定时器元件(游戏自带的Timer,译者注),它大约每秒闪烁一次。你可以在输入端输入1来冻结它的状态。 最快的振荡器就是把非门首尾相连。我们可以叫它1-clock[单周期](从Minecraft术语那偷来的),因为每次闪烁之间只有一个非门的延迟。 把奇数个非门串联在一起,就可以创建3-clock[3周期]、5-clock[5周期],以此类推,很明显这些会慢3倍和5倍。使用偶数个则会创建一个稳定的回路,这是没用的。 Kudos to MeMyselfAnDie for how to control odd-numbered clocks. It hadnt occurred to me in the first version of this note.(恕我无能,这句实在不知道什么意思……MeMyselfAnDie似乎是官方论坛上的某个人) 如果你想要偶数周期的时钟,利用与门添加一个使能电路: 如果你想要一个非常非常缓慢而且可控的时钟,最好的办法就是用触发器。把前面的“按钮开关”里的按钮换成计时器(timer),然后把输出端连接到另一个按钮开关的clock端,将可以慢两倍,继续连接直到最后变得足够慢。做出来的这个装置叫做二进制计数器,我已经在这个帖子里贴出了一个4位二进制计数器。 这个方法远比慢时钟更高效,因为随着门数量的增加,缓慢程度会呈几何增长,而不是链式的线性变化。 更多相关资讯请关注:星界边境专题 (编辑:173173游戏网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |