除法运算过程
流程:
被除数和馀数:将馀数和被除数视为一个,共享寄存器,初始值作为被除数
除数:持续向右移动,被认为是从被除数中减去的
商:可视为各位依次生成,不断左移
除法器工作流程
需要注意的是,与手工计算相比,电路实现总是对馀数进行减数,因此如果差值小于0,则执行回滚操作。
怎么退? 实际上,没有实际的回退方法。 因为之前正在执行减法,所以后退只要加上就可以了。
除法器的电路实现
作业步骤:
初始化:在“馀数寄存器”中放置8-bit被除数,在“馀数寄存器”的前4位放置4-bit除数,使4-bit商寄存器归零
执行减法:将馀数-除数、结果放入“馀数寄存器”
检查剩馀寄存器的最高有效位(判断正负)。 如果值小于0,则回滚,商向左移动,新的最右边位设置为0; 如果值大于或等于0,则商向左移动,新的最右边位设置为1。
除数寄存器向右移位1位
检查是否为最后一个倒圆角(本例中为第五个倒圆角) ) )。
32-bit除法器也同样可以得到
除法器的面积优化
对上面的32-bit除法器进行面积分析:
“除数寄存器”实际上只使用了一半
“商寄存器”最初是空的,从左到右依次填满
“剩余寄存器”最初已满,实际有意义的位在每个周期从左向右依次减少
相应地,我们可以得到对上述问题的方案。
“除数寄存器”缩小为32位,无需支持移位
取消“商寄存器”,商从右端向“馀数寄存器”逐一移位
64位Alu缩小到32位
"剩馀寄存器"只有前32位参与加减运算
“剩馀寄存器”需要对应左移和右移
运算结束后,商占“剩馀寄存器”的后32位
其中有两点需要注意:
将优化的除法器向右移动。 优化后的除法器运算步骤首先相减,然后左移。 例如0000,0111/0010。 每次左移、减法时,最后一步得出00110001,在最后一个循环中,减法后左移。 真正的商品是: 0011,所以余数是000001。最终,应该先取后4位的商品,然后把前4位的余数向右移动。
和乘法器一样,馀数寄存器实际上应该是65位,以防止加法器进位丢失。
转自: https://www.cn blogs.com/lfri/p/10047038.html