内容要点:乘法运算,乘法器的实现,除法运算,除法器的实现
乘法器的实现
Multiplicand (8-bit,Shift left),Product(8-bit,Write),8-bit Adder,Multiplier(4-bit,Shift right),Control test
-
N位乘法器的工作流程图:
st=>start: 开始 op1=>operation: 1a.将”Multiplicand“和”Product“的内容相加,结果放入”Product“ //加法:1*T op2=>operation: 2.将”Multiplicand“左移一位 //左移:1*T op3=>operation: 3.将”Multiplier“右移一位 //右移:1*T cond1=>condition: 1.检查"Multiplier"的最低位是否=1 cond2=>condition: 4.检查是否已到第N次循环/是否循环了n次? e=>end st->cond1(yes)->op1->op2->op3->cond2 cond1(no)->op2 cond2(no)->cond1 cond2(yes)->e
-
乘法器的优化
- 优化一:加法移位并行
- 最低位=1:1a,2,3同时执行
- 最低位=0:2,3同时执行,不执行1a
- 每次循环只需要1*T,性能优化为原来的3倍
- 优化二:减少不必要的硬件资源
- 浪费一:“Multiplicand”8位宽带左移,但其中的有效数字始终只有4位
- 优化:“Multiplicand”缩减为4位,且取消左移功能
- 浪费二:”Multiplier“4位宽带右移,但其中有效数字每周期减少1位
- 优化:取消”Mutiliper“,乘数始终置于”Product“低四位,此时”Control test“将连接在”Product“最低位
- 浪费三:”Product“8位宽但初始时有效数字只有4位,且每周期增加1位
- 优化:”Product“增加右移功能,乘积初始值置于其中高4位,随着运算过程不断右移
- 浪费四:”Adder“8位宽,但参与运算的有效数字实际只有4位
- 优化:”Adder“缩减为4位宽,”Product“只有高4位参与运算
- 推广到N位乘法器:
- Multiplicand (N-bit),Product(2N-bit,Write,Shift right),N-bit Adder,Control test
- 浪费一:“Multiplicand”8位宽带左移,但其中的有效数字始终只有4位
- 优化一:加法移位并行
除法器的实现
Dividend = Quotient * Divisor + Remainder
-
32-bit 除法器的工作流程图
st=>start: 开始 op1=>operation: 1. 余数 = 余数 - 除数 op2a=>operation: 2a. 商左移1位,新的最右位设为1 op2b=>operation: 2b. 回退第一步操作;商左移1位,新的最右位设为0 op3=>operation: 3.除数右移1位 cond1=>condition: 2.检查余数<0? cond2=>condition: 4.第33轮循环/是否重复了33次循环? e=>end st->op1->cond1 cond1(no)->op2a->op3 cond1(yes)->op2b->op3 op3->cond2 cond2(no)->op1 cond2(yes)->e
-
4-bit 除法器的实现示例
- Remainder(8-bit, write), Divisor(8-bit, shift right), Quotient(4-bit, Shift left), ALU(8-bit, support for both addition and substraction), Control tset
-
32-bit 除法器的面积优化
- ”Divisor“缩小为32-bit,无需支持移位
- 原先:一个64-bit的”Divisor“寄存器,带右移功能
- 取消"Quotient"寄存器
- 原先:一个32-bit的”Quotient“寄存器,带左移功能
- ALU缩小为32-bit
- 原先:一个64-bit的ALU,支持加法和减法运算
- ”Remainder“寄存器只有高32-bit参与加减法运算,需支持左移和右移,商从右端逐位移入余数寄存器,运算结束时,商占据”Remainder“的低32-bit
- 原先:一个64位的"Remainder"寄存器
- ”Divisor“缩小为32-bit,无需支持移位
Quiz
- 对于第一班乘法器,控制逻辑的作用是:
- 控制何时将新值写入积寄存器
- 控制何时对被乘数寄存器进行移位
- 控制何时对乘数寄存器进行移位
- 以4-bit的第一版除法器为例,对于二进制的0111/0010,当第2次循环结束时,商寄存器、除数寄存器和余数寄存器的值是:0000,0000 1000,0000 0111
- 初始化:将8-bit被除数放入”Remainder“寄存器,将4-bit除数放入”Divisor“寄存器的高4位,将4-bit”Quotient“寄存器置为零