关于如何尝试使用数电构建计算器

物理
关于如何尝试使用数电构建计算器

用户头像
不稳定U233 更新于2026-4-5 18:56:06

不讲我的世界和图灵完备!游戏仅为演示载体!!!

更新日期:2026.4.6

有问题可以在评论区提问,我看到了会回答的。

本贴是该贴的续集,由于本人的pad论坛被删,只能通过出续集改到O-box区。

警告:阅读本贴需要一定数电基础,建议先学习该贴再尝试理解本贴!

(我布线不是特别好,别杠,谢谢!)


Node02:输入

     在基础计算单元完成的前提下,我们需要考虑将我们的数据输入计算器。


2.1:映射法

      将每一个数字(左边的4个按键,这里以0~3,即使用分别表示1和2的两条信号线,下1上2适配上贴的加法器做范例)映射到每一条信号线上,随后锁存,防呆防傻,在计算完成后可以通过复位按钮(最右边按钮)取消锁存。(最左边的对应0的按钮只是占位,实际上并不接入电路)

image.png

全局俯视图


2.1.1:映射部分

      很明显很简单,最上层是锁存信号线无需在意,俯视图中靠上的部分才是映射的核心,按下按钮时解锁放置于信号线(中间横穿的两根线)上方的红石火把向下激活信号线。

image.png

映射部分俯视图

image.png

映射部分前视图不想再隔离一层了,其实前面隔一格再加一个墙,按钮位置不变,中间用中继器链接就可以了)


2.1.2:锁存区

该区域比较复杂,请量力而行,仅作科普,如无必要,请勿过多占用学习时间。

      俯视图左上角连接映射区的上层信号线,高电平意味着需要激活锁存。

      左上角的两个红石中继器负责锁存锁存信号(套娃),左下的活塞(灰色和黄色的)和标靶(红白相间的)负责复位,活塞失去信号后拉开标靶,断开锁存锁存信号的信号(说明这其实是正反馈系统),上方深灰色方块下方的锁存模块(两组浅灰色红石中继器)失去锁存信号,停止锁存,信号归零;正中间的两个中继器中右边那个将左右两个信号线输出时间对齐,左边中继器传输锁存信号到显示器,灯亮代表正在锁存,灯灭代表未在锁存/复位已完成

image.png

锁存处理区俯视图

image.png

复位部分前视图(中间的是锁存指示灯)


2.2 拨号法

      显然,上文的映射法无法满足4位十进制的“大数”的计算,这时我们就要考虑新的方法——存储法!

      本区域只是看起来复杂,实际上受限于游戏空间单位大小才显得复杂,实际上就是将

1    2    3

4    5    6

7    8    9

      0

映射到

0 1 2 3 4 5 6 7 8 9

的数据线上即可。


image.png

拨号盘正面

image.png

拨号盘区域俯视图


Node03:计算(此部分后线路复杂,改用图灵完备演示)

      考虑一个计算器,上面是不是有一个显示屏(即缓存区)?本方法与它相同,通过输入十进制数字后将其转换为bcd码再转换为bin码计算(bcd就是每一个十进制的数字对应一个4位2进制的码,例如358对应0011 0101 1000。bin码就是二进制码)。

小贴士:S=1位开关         OR=或门                 AND=与门         MUX=选通器

            SHL=将输入左移n位      N=1位取反    ON=输出高电平  SWC=8/16/32/64位开关

            模块左边有一个端口,右边有多个端口且有多个白色向右三角形的是分线器,

            模块左边有多个端口,右边有一个端口且仅有一个白色向右三角形的是合线器

            ADD=全加器      NEG=求其相反数      MUL=乘法器      DIV=除法器


3.1:10进制数字线转bcd

image.png

如图。简单的映射关系。

思考:1,2,3,4,5,6,7,8,9分别会连接到哪条信号线上


3.2:bcd转bin(16->64线给我搞疯了)image.png

      获得了bcd码之后,我们要把它转换为bin码以便乘除法的计算,所以我们可以选择简单粗暴的a=a*10+b的方法,寄存器保存了a,在输入一个新数之后将a*10(即将a左移1位和3位后相加)和b(新数)相加,得到新的a,这个a就是当前输入的数的bin码了。

思考:为什么作为bcd码的b可以直接加到bin码的a上?


3.3:计算引擎image.png

布线有点史(没精力再拆自己堆的屎山了,反正认真学的人应该看得懂线的走向吧)

      本区域可以分为左右两块区域。

      左半边是两个数的存储区域,(最左有一个红标一入一出元件是延迟线,与本区域无关;最上面还有一个两入一出的元件,那个是1bit存储器)但我们没必要存储两个数,事实上一个就够了,所以我们通过一个1bit存储器标记现在导入的是第几个数,存储了0则说明是第1个数,需要被存放于1bit存储器下方的那个32bit存储器;反之则意味着计算条件齐备,可以开始计算,于是输入值被导入下信号总线,同时上方寄存器读取,值导入上信号总线。

      右边则是通过左下引来的四根信号线选择正确的计算模块进行运算,除法模块前面的选通器是为了防止不开启时输入0做除数报错,现实可以删除。

思考:真的需要4根线来选择正确的计算模块吗?最少需要多少?(警告:在同一周期内,可以单独导入一个值,但也可以在导入一个值后计算)


3.4:bin->bcd(尚未完成)

收起
38
30
共2条回复
时间正序
用户头像
Wanderful Answer
2月前

不是不让用蓝牙传文件了吗,怎么做到的


1条评论
用户头像
幸福健康
2月前

这是网页版账号

再说,这是o box,把你评论删一下谢谢

好厉害,这是中间有点没看懂,是半加算器吗
1条评论
用户头像
不稳定U233
1月前

半加器请到最上面的链接去看上一个帖子,这个帖子不是这些内容