计算机组成的一些总结(15)乘法器的实现及优化
乘法器的实现及优化
实现一个四位的乘法器,首先需要一个寄存器保存被乘数,被乘数寄存器是一个八位的寄存器,而且带有左移的功能,它有一个左移的控制信号输入,当外部的控制逻辑将这个信号置为有效时,在下一个时钟上升沿到来的时候,被乘数寄存器当中的内容就会向左移动一位。第二个寄存器是乘积寄存器(存放所需的运算结果),这也是八位的寄存器,用来保存运算的结果,被乘数寄存器当中的内容和乘积寄存器当中的内容需要进行加法运算,还需要一个八位的加法器,它会将被乘数寄存器当中的内容和乘积寄存器当中的内容进行相加,并将结果送到乘积寄存器当中。还需要一个四位寄存器来保存乘数,乘数寄存器的最低位被连接到了控制逻辑,就是控制逻辑可以观察当前乘数寄存器的最低位,并据此生成相关的控制信号,这些控制信号包括是否要让加法器进行加法运算,以及是否要让乘积寄存器保存当前的运算结果。乘数寄存器需要有向右移位的功能,同样也是由控制逻辑发出的信号来进行控制的。
乘法器的工作过程,首先要初始化,先把被乘数放到被乘数寄存器当中(高四位置0),乘数放到乘数寄存器,乘积寄存器当前为0,初始化工作完成。运算过程,(1)首先检查乘数寄存器的最低位,如果是1,就需要将被乘数寄存器当中的内容和当前乘积寄存器当中的内容进行相加,控制逻辑会控制加法器,将被乘数寄存器的内容和乘积寄存器当中的内容进行加法运算,然后将加法器的运算结果送入乘积寄存器,在下一个时钟上升沿来临的时候,因为乘积寄存器的写入信号是有效的,所以乘积寄存器就会采样输入端的数据,并保存到乘积寄存器当中;如果是0,直接执行第二步。(2)然后控制逻辑会给出左移的信号,在下一个时钟上升沿来临的时候,被乘数寄存器就会完成一次左移,最左端的0被丢弃了,在最右端补入一个0。(3)控制逻辑给出右移的控制信号,当下一个时钟上升沿来临的时候,乘数寄存器就会向右移动一位,这样只是方便对乘数的对应位进行判断。(4)由控制逻辑进行判断,现在是否已经完成了运算。
对这个四位的乘法器来说,一共要产生四个中间结果并将它们进行相加,控制逻辑可以判断出当前是否是第四次循环。
乘法器的优化
优化当第一步检查“乘数寄存器”的最低位,如果最低位是1,则相加、左移、右移将同时进行,如果最低位是0,则同时执行左移和右移。
减少不必要的硬件资源,(1)“被乘数”寄存器缩减为4位,而且取消左移功能
(2)取消“乘数寄存器”,乘数初始置于“乘积寄存器”低4位
(3)“乘积寄存器”增加右移功能,乘积初始值置于其中高4位,随着运算过程不断右移
(4)“加法器”缩减为4位宽,“乘积寄存器”只有高4位参与运算
现在需要把乘积寄存器的最低位连接到控制逻辑,就是当前所需要观察的乘数的对应位,如果为1,控制逻辑需要向加法器发出执行加法运算的控制信号,并向乘积寄存器发出写入的控制信号,这个写入只发生在乘积寄存器的高4位,每个周期发出右移的控制信号,随着乘积寄存器的右移,放在低四位的乘数就逐渐的被移出,而原先只在高4位的乘积则逐渐占满了乘积寄存器。