与门除法器的设计思路如下:
以上是7÷2=3.....1和7÷4=1....3
前言:
由于游戏设计的问题(不能表示小数,并且没有显示器),所以不能解决n÷0报错以及除到小数的问题。所以只能解决被除数÷除数=商....余的形式。同时,因为这个游戏没有时序电路和锁存,所以不能使用串行除法器和串行乘法器,只能使用并行除法器和并行乘法器。
并行除法器的设计原理:
利用减法器连续减,以三位除法器为例。
因为有111÷1的存在(7÷1),所以必须设计到连续减7次。(注意:实际可能不会减到7次,只是最多有可能需要减七次。)
所以在设计三位除法器时,需要连续减七次,也就需要七个减法模块。(这就是为什么有七组三个一组的全加器的原因。)
商的解决方案:
可以利用减法器中大的数减小的数的符号位为1和小的数减大的数的符号位为0,来解决到底减了几次。(就是解决商)(下图中橙色内模块就是连续七次的减法器)
比如110÷010=011....0的计算
可以按照如下过程进行:
110-010=1 100
100-010=1 010
010-010=1 0
共减了三次。
所以它的商是011。
符号位有三个1。
所以将三个1加起来(001+001+001=011),就得到了商011。
但是在实际设计中,由于减法器小数减大数的BUG,可能会让下一次减法运算后得到的符号位为1。
所以需要用与门给第一次减得符号位为0后的全部符号位进行整理,使后面的符号位都变为0,从而修正减法器产生的错误。(与门修正就是下图中浅绿色内的模块)
所以只要将用与门修正过的符号位加在一起(下图中黄色内模块),就能得到正确的商。
这里是7÷2=3...1
余的解决:
观察一下,在上文中与门修正过的符号位是
1 1 1 0 0 0 0
值得注意,在最后一个1(从左往右)的下方的值正好就是余数。
我们希望在余数下方能用1标记,而其它的下方用0标记。
这样就能用与门选择出我们想要的余数。
那么具体要如何操作呢?
有没有想到用异或门?
我们给这些符号位编号。
1 1 1 0 0 0 0
1 2 3 4 5 6 7
给12符号位用异或门处理后,得到0,用以标记余数1(减法器中第一组全加器得到的结果,显然,余数3才是正确的余数。)
给23符号位用异或门处理后,得到0,用以标记余数2
......
给67符号位用....
值得注意,以上操作中只有给34操作才能得到1,而这一步操作标记的是余数3。
这样是不是就满足了我们只想用1标记余数3的想法?(标记出余数3的过程就是图中深绿色内的异或门完成的。)
最后用与门选择出我们想要的余数,再用或门整理线路输出余就行。(图中白色和灰色内的模块)
这样就成功解决了除法器。
有疑问可以在评论区留言,欢迎在评论区一起讨论。
确定不给我精帖吗?
以上就是与门除法器的设计思路相关内容。