= 创作分享 =
技术讨论
[自制/原版红石-纯数电]一种占用空间小的“竖式”全加器 ...
Huaji_greg

[自制/原版红石-纯数电]一种占用空间小的“竖式”全加器

Huaji_greg 于 2021-7-26 19:59 ( 2年前 ) 发表在 [教程] 分类。 [复制链接] [只看楼主] [打印]
936 3
本帖最后由 滑稽格雷 于 2021-7-27 14:15 编辑

       玩过数电的应该都接触过全加器。全加器是用来进行二进制加法运算的,原理先简单介绍一下(知道的可以跳过)。
       众所周知二进制下用0和1代表数字等信息,满2进1,二进制的“个位”对应十进制的1,“十位”对应十进制的2,“百位”对应4,“千位”对应8,以此类推。比如十进制的13在二进制下是1101,十进制的27在二进制下是11011,等等(当然也有小数啦,不过这里用不上)。二进制加法也很简单,就比如前面提到的13+27=40,在二进制下就是1101+11011=101000。先观察其中的''个位'',如果列竖式,那么如果两个加数的''个位''都是0,结果的''个位''就是0;如果是一个0一个1,结果的''个位''就是1,如果是两个1,结果的''个位''也是0,并在相加后向“十位”进1。可以发现如果两个数字相同结果就是0,不同就是1,区别就是进位不进位,对于“个位”来说就是一个异或操作。再观察“十位”,若“个位”不向十位进位那么情况相同,如果有进位,那么在''十位''的最终结果会反转(加上进来的1相当于原来“十位”两个数字异或后的结果再与1异或,可以发现结果就翻转了),并且如果两个加数的十位中有至少1个是1就会向“百位”进位。那么我们就可以先用简单的异或门来进行不进位的“不完整的加法运算”,然后用与门(两输入均为1才输出1)充当进位,再用一个异或门和一个与门分别计算原位的结果和进位来的数相加得到的最终结果与算上进位来的数是否进位(需要注意同一位不可能进位两次,所以只需要一个进位的输入)。
       大家在网上可能看过一个经典的“横式”全加器设计,上下各一排输入,前面一排输出,每一位占2宽,横向堆叠,体积小。有一个能用的全加器设计就够用了,但是如果要节约空间或者让布线更美观,可能就需要不同的设计。所以我设计了一个“竖式”全加器,竖向堆叠,左右各一列输入,前面一列输出,每一位占2高,体积也很小。虽然是我自己造的,但可能和某位大佬已有的设计极类似(参考“写了一首已经存在的歌”的现象),不过纯属巧合。思考的过程比结果更重要,所以我会详细介绍它的原理。
(可能有错误,欢迎指出ww)
在MC中设计和搭建工厂等大型复杂装置是高强度脑力劳动!
(((
发表于 2021-7-26 19:59:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 3 条回复!
Huaji_greg
本帖最后由 滑稽格雷 于 2021-7-26 21:19 编辑

       进入正题。
一 异或门
       首先我们要找到一种能够竖向堆叠,一层2高且互不干扰的异或门。先看一个极其经典的异或门:

       简单观察,不难发现这个异或门其实是由一个或门(两边在最后并在一起)和一个与门(倒T形部分)组合而成,如果两边拉杆其中一个打开(一个0,一个1),在后面对应的红石火把就会亮起,输出为1(亮起)。但是如果两个拉杆都打开,中间的红石火把就会亮起,使得后边两边的红石火把都灭掉,输出为0(熄灭),就达到了异或的效果。但是这不是我们想要的异或门,因为在第二格高的红石火把会干扰上面的部分。不过不难发现这个经典设计在拉杆附着的两个方块上同时有了两个红石火把,这说明有多余的部分。另外后面两个方块上有红石粉连接,堆叠时上层的方块会阻挡红石粉连接。稍作修改:

       这是堆叠了两层,从红石灯向拉杆方向看。直接把两边的红石火把连到上面,节省了2个红石火把,堆叠也不会干扰了;至于阻断红石粉的问题有两种解决方案,一种是用半砖再往上铺红石粉,还有一种是用标靶把红石粉连接过来,就不用再铺红石粉也不会阻断了。下面使用标靶。





在MC中设计和搭建工厂等大型复杂装置是高强度脑力劳动!
(((
发表于 2021-7-26 20:51:22 | 只看该作者

回复 | 举报

Huaji_greg
二 进位部分
       首先我们在十位第一次异或后的结果后面再接一个异或门,让另一个输入充当进位。

       (图中第一次异或的异或门叠了3层。黄:第一次异或的结果;黄绿:进位的输入;品红:最终输出。注意黄处使用了标靶连接红石粉,如不使用标靶只能延长一格,不能用半砖再引红石粉,因为会和异或门的红石火把形成循环)
       进位需要一个与门来判断。同一位两个输入都是1,自然就进位了。还记得前面说过吗?异或门包括了一个与门。所以我们直接从异或门引出一个进位输入。

       (异或门的一部分外加一个红石火把,可以看到形成了与门)

       (连接到运算进位的异或门,进位部分依然使用黄绿色)
       但是这还没完,因为在与进来的1的运算中也可能进位。比如1+11(二进制),个位为0,向十位进1,再与十位的1相加,还要向百位进1。这里同样可以从异或门引出一个与门接到进位的输入。

       (把进位部分叠了两层)

       (从里面引出一个红石火把,正好形成了与门进位并对高一位输入)

在MC中设计和搭建工厂等大型复杂装置是高强度脑力劳动!
(((
发表于 2021-7-27 10:29:53 | 只看该作者

回复 | 举报

Huaji_greg
三 成品
       前面已经得到了一个可用的方案,只要堆叠到一定位数,整个全加器就完成了。成品图:

       输入3和5,得到8(11+101=1000);输入9和8,得到17(1001+1000=10001)。下面是低位,上面是高位。

       完全可用,并且体积也很小。不算拉杆和红石灯,这样一个四位+四位的全加器只占长宽高4x10x10=400blocks!
在MC中设计和搭建工厂等大型复杂装置是高强度脑力劳动!
(((
发表于 2021-7-27 10:40:21 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表