当前位置:   article > 正文

Verilog设计_除法器_verilog除法器

verilog除法器

一个简单的除法器设计。

 

目录

一、除法器概述

二、代码实现


一、除法器概述

除法器即实现除法运算的逻辑电路。相比于乘法器和全加器,除法器的设计要稍微复杂一些。

除法运算过程如下:

(1) 取被除数的高位数据,位宽和除数相同。

(2) 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。
(3) 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。
(4) 重复过程 (3),直到被除数最低位数据也参与计算。

例如29➗5,计算过程:

二、代码实现

上代码:

  1. module divider(
  2. input clk,
  3. input rst_n,
  4. input [15:0] ain,
  5. input [7:0] bin,
  6. output reg [15:0] cout,
  7. output reg [15:0] rem
  8. );
  9. integer i;
  10. reg [15:0] a_reg;
  11. reg [7:0] b_reg;
  12. reg [31:0] tmp_a;
  13. reg [31:0] tmp_b;
  14. always@(*)begin
  15. a_reg = ain;
  16. b_reg = bin;
  17. end
  18. always@(*)begin
  19. tmp_a = {16'h0, a_reg};
  20. tmp_b = {b_reg, 16'h0};
  21. for(i=0;i<16;i=i+1)begin
  22. tmp_a = tmp_a << 1;
  23. if(tmp_a >= tmp_b)begin
  24. tmp_a = tmp_a - tmp_b +1;
  25. end
  26. else begin
  27. tmp_a = tmp_a;
  28. end
  29. end
  30. assign cout = tmp_a[15:0];
  31. assign rem = tmp_a[31:16];
  32. end
  33. endmodule

测试波形:

 为了方便观察结果以十进制显示。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/522330
推荐阅读
相关标签
  

闽ICP备14008679号