Minecraft中有很多吸引人的地方,其中一个就是红石电路系统。有牛人就用游戏的红石电路制作了8位计算器、数字显示器等等。
前几天看到了LeetCode上面的一道题目,对,就是那道用数字电路解法的题目。看完之后心血来潮,想着用Minecraft的红石电路弄一遍,一定会非常 COOL ~。🆒
好吧,数字电路的内容大多数已经忘记,所以先温习一下吧,对应在Minecraft中的表现形式也一并展示出来。
先从基本的与或非门开始。这三种逻辑电路的真值表如下:
A B | 真 真 | 真 假 | 假 真 | 假 假 |
---|---|---|---|---|
A+B 或 | 真 | 真 | 真 | 假 |
AB 与 | 真 | 假 | 假 | 假 |
~A 非 | 假 | 假 | 真 | 真 |
非门(即“反相器”)的输入与输出相反。输入为1的时候输出为0,输入为0的时候输出为1。在Mincraft中可以使用红石火把的阻断特性来制作。红石火把默认输出信号,当有输入信号(如拉杆)的时候,红石火把会熄灭。由此与非门的特性一致。
或门的任意一个输入为1,输出就会是1。或门有两个输入端,一个输出端。根据红石火把的特性,任意一个输入端为1的时候,输出端都为0,这正好与或门的输出相反。这更像一个或非门,于是,在最后再加上一个非门就变成我们需要的或门了。
与门只有当两个输入都为1的时候,输出才会是1。根据或门的思路,从逻辑公式推演,可能看推演公式看不出什么,但是看电路就会明白了。
触发器是记忆电路相关的内容。上面提到的门电路的输出只与当前的输入有关,但有时候电路还需要“过去的输入”相关,也就是有记忆功能。完成这个功能的电路有锁存器和触发器。在现实生活中的电子学中,锁存器指对输入信号的某个状态产生反应的电路;触发器指对输入信号的变化产生反应的电路。
最基本的是RS触发器,RS触发器有三种模式:置0、置1和保持。
一般常用的是精简的版本。
RS触发器存在禁止条件,R和S不能同时为1。这给使用者带来的不便。简单变化就是D触发器。关于D触发器有好多种实现方法,这里从记忆电路 - Minecraft Wiki上找到了一个D寄存器简化的版本。
图例在这里红石图例。根据图可以构造一个简单的D寄存器。D触发器在CP=1的作用下将D端的输入数据送给触发器,当CP=0时Q(n+1)=Q(n)不变,故常用作锁存器,因此D触发器又称为D锁存器。
请无视入镜的史莱姆同志。。。
需要的内容大概就这些了,下面开始开工。
了解了一些基础内容之后,需要制作我们的三进制加法计算器了。根据LeetCode Q137 Single Number II的数电AC方法中推导的公式:
分析一下,需要两个寄存器存储高位和低位,还需要一个按钮触发+1操作,最后需要一个显示的地方。这里只制作一个简单的 半加器 ,变换的顺序为00->01->10->00。不考虑进位的情况。
制作的步骤是,先放置输入端,然后再放置两个D触发器,最后将与或非门填充进去。最后的效果就是这个样子。
没有电路精简,真是不忍直视呀。在制作的时候遇到了一些问题:
对于第二个问题,没有找到一个好的解决方法,之好将两个触发器输出的延迟调高一些。从10->00的过程中出现的11的情况,最后的效果还是挺满意的吧。😂
就这样吧,一天又过去了。。。