前言:
| 本帖仅为在下的加法计算器的部分教程并非整个计算器 |
| 1.此颜色and字体均为注释 2.【】内的为模块标题,模块内的“1. 2.”为模块序号,各个模块互不相关。 3.每个模块的讲解均带有Logsim版和MC版 4.该颜色字体为特别注意事项 5.该字体颜色为模块关键(详解)部分6.本贴图片较多,打开折叠请做好准备 7.如果您没有一定的红石基础,或许看帖的过程中您会晕头转向。推荐阅读:【sjjklh红石基础教程系列】索引贴 【TRP红石进阶教程系列】索引贴 7.为方便大家阅读,本帖会尽量减少专业语言。 |
教程开始:
part①:
| 【基础单元】 1.半加器: 半加器真值表: ![]() 半加器电路(Logisim): ![]() ①注:A—输入1;B—输入2;S—和(计算结果);C—进位 半加器的组成:首先大家知道在二进制中0+0=0 1+0=1 0+1=1 1+1=10;这就是一个单位加法计算过程,那么我们要怎么样才能用红石来完成这个计算过程呢?仔细想一下就会发现,异或门可以完成大部分的过程,对于缺少了的进位输出我们只需要把a和b的输入连成一个与门即可。 MC版半加器教程:大家看到普通的的异或门 出于体积和方便输入输出的原因,我采用了输入军的半加器,下面我们就来讲解一下(若原帖认为更好理解则推荐阅读原帖)。根据异或门的需要,我们首先需要两个非门接上一个与门![]() ①注:绿色羊毛为非门一,白色羊毛为非门二,红色羊毛为输出。从之前的一个异或门的图中可以看出,还需要在这两个非门之间加一个控制的与门 ,大家可以看到,粉色方块上的火把可以同时为上面的红色线和下面的红石线充能,这样一来就达到了同时控制两个非门的效果;接下来我们只要在这个火把上接上两个与门的输入即可,如图:![]() 这样一来我们就完成了一个异或门,当然这只是一个异或门,要让它变成一个半加器还需要进位部分,如图: 至于为什么要这么做,看了下一个全加器的模块便知。2.全加器 全加器真值表: ![]() 全加器电路(Logisim): ![]() ①注:A为输入1;B为输入2;S为输出(计算结果);C1为进位输入;C2为进位输出 全加器的组成:根据Logisim的电路可得知:全加器就是由两个半加器组成的,那为什么需要两个半加器呢?原因如下:根据半加器的特性,1+1=10对吧,但是根据半加器的电路可得知:当半加器为1+1时,半加器的输入都是1因而如果此时再来一个进位信号就无效了。举个例子:如果光光使用半加器,计算11+11的时候结果就会为100,但是正确答案为110,那是因为半加器进位要直接接入输入端(A/B)此时都为1,因而占用了进位的输入空间,所以我们需要两个半加器。从Logisim的电路可以看出:第一个半加器的输出直接连上了第二个半加器的其中一个输入,这并不影响计算结果,这时我们就可以把第二个半加器的另一个输入留给进位~\(≧▽≦)/~啦啦啦。当然可能还有人会问:为什么两个半加器的输入都要连一个与门还要再连到或门去呢?举个例子你就知道了:11+1=100,如果不把第二个半加器的输入连到一起做一个进位输出的话那么11+1的计算结果就会变成10(听不懂的推荐先看MC版的图文教程),因此我们需要把两个半加器的输入分别做一个与门再用或门连在一起才能保证准确的计算。 MC版教程:首先我们先回去看一下之前的半加器的总览 我们之前已经讲过,全加器需要两个半加器拼在一起,那么我们就来复制粘贴一下(这里值得注意的是,需要在半加器一前再加一格再粘贴,具体如图) 当然我们之前也已经在组成的地方讲过,需要把两个半加器的进位输出连在一起 还要注意一点的是:第二个半加器的接入时这里要用中继器 至于为什么要这样做呢?大家知道,计算阵肯定需要若干个全加器拼在一起,我们把已经做好的半加器复制一下,像这样 粘贴在一起之后我们先把第二个全加器的进位输出拆掉后会发现:之前的进位输出完美的接入了另一个全加器中的第二个半加器的空余的输入端! 此时我们再看看第一个全加器的第二个半加器的进位输出上的方块是中继器 所以这个进位输出只会为空闲的进位输入充能,并且这时两个0间隔的全加器除了进位相接以外,其他的部分互不相干,一样可以进行准确的计算!以此类推,我复制了四个全加器相接 我们来测试一下 ①101+111=1100 正确 ②111+10=1001 正确 测试完毕,完美运算。3.小结:全加器是加法算阵最基础的地方,也是最重要的地方,而半加器又是全加器的重要部分,因此理解透彻半加器,学会运用、制作半加器是非常重要的。下一part会讲到BCD运算的重要部分(什么是BCD码? BCD码,就是用4位一组2进制数来表示10进制数 )总之大家要想真正学会组装一个加法算阵,首先必不可缺的就是全加器和半加器。 |
part②:
| 【进阶组件】 1.BCD全加器 电路(Logisim): ![]() ①注:正方形的方框为1位全加器 ②注:只有左下方的8个输入端为输入,其余输入端均为保证电路正常运行。 BCD全加器功能及组成:如果单单用多位全加器,那么输入和输出的译码部分就会变得很麻烦,因此我们采用自带有BIN-BCD的全加器;当这种全加器的计算结果不为BCD码时,就会自动将其译成BCD码,所以我的整个算阵都是在用BCD码运算。首先,我们举几个例子:1.1001+1=1010我们知道BCD码只有1至9,最大数仅为1001;那么如果我们将其译成BCD码的结果就是0000并向前进1,我们要怎么做呢?LZ发现了一个规律(不知道别人有没有发现过):当计算结果大于1001时,我们只要在计算结果上+110,的出来的结果就是BCD码。回到前面的例子,1010+110就等于1 0000这就满足了结果为0000并向前进1的正确结果。我们再换几个数试试:111+1001=10000,1 0000+110=1 0110也满足了BCD所需要的条件。那么根据这个规律,我们就可以在一个普通的四位全加器上改造一下,根据Logisim电路可得知:图中我用了8个全加器,前四个是一个普通的四位全加器,而这个四位全加器的输出又接上了一个四位全加器;当然改造的地方就是输出电路。我们先列举出大于1001的四位数:1010 1011 1100 1101 1110 1111大家看一下,前两个数字都含有1010,其他的数字都含有1100;由此我们可以得知:只要我们在输出线路的地方做上1010的与门和1100的与门,再接上一个或门输出,那么只要前一个四位全加器计算的结果大于1001,这个或门就会有输出;然后我们再把或门的输出接入110的输入,也就达到了自动译成BCD码的过程。这也就是一个四位BCD全加器。 MC版教程:先是1010和1100的与门 下面的一些图片:![]() 再复制粘贴接上同样的四位全加器 还有一点就是:前一个四位全加器的进位输出还要连上这个补码(+0110) 好了现在我们来测试一下:1001(9)+0001(1)=1010(10)①注:()内为相应的十进制数表达![]() 向十位进1,正确;测试完毕,完美运行。2.多个BCD全加器的组合: MC版教程:(Logisim的就算了,不好理解):我们先把四个四位BCD全加器拼在一起 前一个四位全加器(单个四位BCD全加器的部分) 后一个四位全加器,每个BCD四位全加器都要这样连起来。总览: 接着我们来测试一下:9999+9999(计算器上限) 结果: 十、百、千位均为9,个位为8,正确。 万位为1,正确;测试完毕,完美运行(话说以前为什么再做一次算阵才是原来的1/3.........)3.小结:只要理解透彻、善于运用全加器这些都不算什么难题,所以还是推荐先巩固好基础。 |
part③:
【输入与输出】
| 1.锁存输入: 组成及功能: 从之前的图片我们可以知道,计算阵输入用的是拉杆,因此可知我们需要一个持续的输入;这里用到的也只是RS锁存器,详情看MC版教程。 MC版教程:方便输入和清零,我自己开发了一种RS锁存器![]() 再复制粘贴一下 这样锁存输入就完成了2.译码输出 对于译码输出,我们只需要做几个与门就好了。首先我们先像这样延长输出 我们可以看到,这样并不影响信号传递。以此类推复制一下 直到有4x9 36个突起的方块(怎么觉得怪怪的....)然后我们就在这些突起的方块上插火把做与门 以此类推从小到大按1-9的二进制插火把,插完后的总览(什么叫"插完"......) 然后我们在每一行火把上面做一条条的线(与门) 然后做回清,像这样![]() 每条直线都要这样 复制一下接到十百千位 然后就可以接上7段显示码了 每条直线都来一发你懂得 每位都来一发你懂的 然后插火把译码接上显示屏不用我说了吧(不会的戳我) 最后来个总览 小结:这些都不难,运用的都只是基础的逻辑门和触发器罢了;如果不是很好理解,自己多推敲几次就好了(其实我一直在偷工减料{:10_532:}) |
| 本次教程共用图片61张,13859字节。存档:http://www.mcbbs.net/forum.php?mod=viewthread&tid=159023&extra= 我觉得这些如果从细节去解析的话会很容易学会,祝君早日成为大师~~~~ 接下来是吐槽:去你丫的这坑坑了我两个多星期啊 !!中途把我的存档都搞爆了 !!**实在是太痛苦了 !!不加点分对得起你们的良心么 !!(ps:
|



出于体积和方便输入输出的原因,我采用了输入军的
①注:绿色羊毛为非门一,白色羊毛为非门二,红色羊毛为输出。
,大家可以看到,粉色方块上的火把可以同时为上面的红色线和下面的红石线充能,这样一来就达到了同时控制两个非门的效果;接下来我们只要在这个火把上接上两个与门的输入即可,如图:
这样一来我们就完成了一个异或门,当然这只是一个异或门,要让它变成一个半加器还需要进位部分,如图:
至于为什么要这么做,看了下一个全加器的模块便知。

我们之前已经讲过,全加器需要两个半加器拼在一起,那么我们就来复制粘贴一下(这里值得注意的是,需要在半加器一前再加一格再粘贴,具体如图)
当然我们之前也已经在组成的地方讲过,需要把两个半加器的进位输出连在一起
还要注意一点的是:第二个半加器的接入时这里要用中继器
至于为什么要这样做呢?大家知道,计算阵肯定需要若干个全加器拼在一起,我们把已经做好的半加器复制一下,像这样
粘贴在一起之后我们先把第二个全加器的进位输出拆掉后会发现:之前的进位输出完美的接入了另一个全加器中的第二个半加器的空余的输入端!
此时我们再看看第一个全加器的第二个半加器的进位输出上的方块是中继器
所以这个进位输出只会为空闲的进位输入充能,并且这时两个0间隔的全加器除了进位相接以外,其他的部分互不相干,一样可以进行准确的计算!以此类推,我复制了四个全加器相接
我们来测试一下
①101+111=1100 正确
②111+10=1001 正确 测试完毕,完美运算。
下面的一些图片:
再复制粘贴接上同样的四位全加器
还有一点就是:前一个四位全加器的进位输出还要连上这个补码(+0110)
好了现在我们来测试一下:1001(9)+0001(1)=1010(10)①注:()内为相应的十进制数表达
向十位进1,正确;测试完毕,完美运行。
前一个四位全加器(单个四位BCD全加器的部分)
后一个四位全加器,每个BCD四位全加器都要这样连起来。总览:
接着我们来测试一下:9999+9999(计算器上限)
结果:
十、百、千位均为9,个位为8,正确。
万位为1,正确;测试完毕,完美运行(话说以前为什么再做一次算阵才是原来的1/3.........)
从之前的图片我们可以知道,计算阵输入用的是拉杆,因此可知我们需要一个持续的输入;这里用到的也只是RS锁存器,详情看MC版教程。 MC版教程:方便输入和清零,我自己开发了一种RS锁存器
再复制粘贴一下
这样锁存输入就完成了
我们可以看到,这样并不影响信号传递。以此类推复制一下
直到有4x9 36个突起的方块(怎么觉得怪怪的....)然后我们就在这些突起的方块上插火把做与门
以此类推从小到大按1-9的二进制插火把,插完后的总览(什么叫"插完"......)
然后我们在每一行火把上面做一条条的线(与门)
然后做回清,像这样
每条直线都要这样
复制一下接到十百千位
然后就可以接上7段显示码了
每条直线都来一发你懂得
每位都来一发你懂的
然后插火把译码接上显示屏不用我说了吧(
最后来个总览
小结:这些都不难,运用的都只是基础的逻辑门和触发器罢了;如果不是很好理解,自己多推敲几次就好了(其实我一直在偷工减料{:10_532:})
!!中途把我的存档都搞爆了
不会加法的人他们是怎么通过验证问答的 