qinzongqing的个人空间 https://blog.eetop.cn/930914 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

除法器原理分析

已有 3910 次阅读| 2013-5-5 10:50

被除数8位;除数6位;可以看出,商最多8位,余数最多6位;

怎么来让FPGA做除法呢?有一种方法就是模拟手工计算。先分析一下代码的思路吧。
1. 第一步就假设商q(8位)是0,余数r(扩展到14位)是被除数,这是除数比被除数d大的情况的结果;
2. 第二步被除数左移7位,为什么这么做呢?写一个1110_1010 除以1的例子就清楚了,最多要移7位。所以不管除数是几位,都扩展到14位,然后移位吧。
3. 第三步 执行r-d;如果是负数,把r还原,q左移1位;如果是正的,q左移1位并+1,这时候r已经变小了;
    上面判断完成后,都要执行d右移;右移的原因,也是因为仿手工计算,手工计算时,商是从最高位逐步往下确定的;
4. 什么时候结束,输出结果呢?进行了8次比较后;

module div_res(clk, n_in, d_in, r_out, q_out);

  input         clk;
  input  [7:0] n_in;
  input  [5:0] d_in;
  output [5:0] r_out;
  reg    [5:0] r_out;
  output [7:0] q_out;
  reg    [7:0] q_out;
  parameter s0=0, s1=1, s2=2, s3=3;

  always @(posedge clk)
  begin : States
    reg [3:0] count;
    reg [1:0] state;
    reg  [13:0] r, d;      //扩充位数
    reg  [7:0] q;
    state <= s0;
    case (state) 
      s0 : begin         
        state <= s1;
        count = 0;
        q <= 0;          
        d <= d_in << 7; 
        r <= {6'B0, n_in}; 
      end                                           
      s1 : begin      
        r <= r - d;     
        state <= s2;
      end
      s2 : begin          
        if (r[13] == 1) begin  
          r <= r + d;     
          q <= q << 1;    
          end
        else begin
q <= (q << 1) + 1; 
      end
        count = count + 1;
        d <= d >> 1;

        if (count == 8)   // Division ready ?
          state <= s3;
        else             
          state <= s1;
      end
      s3 : begin       // Output of result
        q_out <= q[7:0]; 
        r_out <= r[5:0]; 
        state <= s0;   // Start next division
      end
    endcase  
  end

endmodule


点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 3

    评论
  • 193

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-29 00:17 , Processed in 0.024639 second(s), 13 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部