天天看点

串行除法与并行除法

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书

      or1200中使用的串行除法算法是“试商法”。设被除数是m,除数是n,商保存在s中,被除数的位数是k,其计算步骤如下(为了便于说明,在此处所有数据的最低位称之为第1位,而不称为第0位):

      (1)取出被除数的最高位m[k],使用被除数的最高位减去除数n,如果结果大于等于0,则商的s[k]为1,反之为0。

      (2)如果上一步得出的结果是0,表示当前的被减数小于除数,则取出被除数m[k-1],与当前被减数组合为下一轮的被减数;如果上一步得出的结果是1,表示当前的被减数大于除数,则利用第2步中减法的结果与被除数剩下的值的最高位m[k-1]组合为下一轮的被减数。k等于k-1。

      (3)新的被减数减去除数,如果结果大于等于0,则商的s[k]为1,否则s[k]为0,后面的步骤重复2-3,直到k等于1。

       上述步骤可以使用图8.4描述。

串行除法与并行除法

图8.4 试商法的运算过程

      以1101除以0010为例, 采用试商法时的计算步骤如表8.2所示。

串行除法与并行除法

      试商法进行除法运算需要的时间与操作数的位数有关,对于32位的or1200处理器而言,如果采用试商法进行除法运算,那么至少需要32个时钟周期才能得到除法结果。

      试商法需要的时间太长,在or1200中还可以配置采用并行除法,直接使用除法运算符进行除法运算,所有的工作交给综合工具完成,其代码很简单,如下:

      使用并行除法虽然提高了除法运算速度,但速度的提高是以资源的消耗为代价的,图8.5、8.6分别给出了并行除法、串行除法两种实现方式在altera器件上资源占用的比较,可见串行除法比并行除法要少用很多fpga资源。用户需要根据自己的情况选择合适的除法算法。

串行除法与并行除法

图8.5 使用并行除法时or1200在altera器件上占用的资源

串行除法与并行除法

图8.6 使用串行除法时or1200在altera器件上占用的资源

继续阅读