码迷,mamicode.com
首页 > 其他好文 > 详细

串行除法与并行除法

时间:2014-05-07 04:48:29      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:or1200 openrisc 软核处理   or1200 软核处理器   处理器   开源   软核   

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


串行除法与并行除法

8.2.1 串行除法

      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描述。


bubuko.com,布布扣

图8.4 试商法的运算过程


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


bubuko.com,布布扣

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

并行除法

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


or1200_mult_mac.v
always @(`OR1200_RST_EVENT rst or posedge clk) begin     
    if (rst == `OR1200_RST_VALUE) begin
	     div_quot_r <=  32‘d0;	   
	     div_quot_generic <= 32‘d0;	   
    end
    else begin
	 if (alu_op_udiv & !(|y)) // unsigned divide by 0 - force to MAX
	   div_quot_generic[31:0] <= 32‘hffff_ffff;	   
	 else if (alu_op_div)
	   div_quot_generic[31:0] <= x / y;                       //直接使用除法运算符进行除法运算
      end
      div_quot_r[31:0] <= div_quot_generic;
   end     

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


bubuko.com,布布扣

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


bubuko.com,布布扣

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




串行除法与并行除法,布布扣,bubuko.com

串行除法与并行除法

标签:or1200 openrisc 软核处理   or1200 软核处理器   处理器   开源   软核   

原文地址:http://blog.csdn.net/leishangwen/article/details/25042357

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!