第四讲 乘法器和除法器(Multiplier and Divider)

内容要点:乘法运算,乘法器的实现,除法运算,除法器的实现

乘法器的实现

  • 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

除法器的实现

  • 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"寄存器

Quiz

  1. 对于第一班乘法器,控制逻辑的作用是:
    • 控制何时将新值写入积寄存器
    • 控制何时对被乘数寄存器进行移位
    • 控制何时对乘数寄存器进行移位
  2. 以4-bit的第一版除法器为例,对于二进制的0111/0010,当第2次循环结束时,商寄存器、除数寄存器和余数寄存器的值是:0000,0000 1000,0000 0111
    • 初始化:将8-bit被除数放入”Remainder“寄存器,将4-bit除数放入”Divisor“寄存器的高4位,将4-bit”Quotient“寄存器置为零

你可能感兴趣的:(第四讲 乘法器和除法器(Multiplier and Divider))