当前位置:   article > 正文

verilog基础设计8-小米2022数字ic笔试编程题 16bit数除以8bit数 rtl实现_除法rtl实现

除法rtl实现

目录

1、除法器原理

2、无符号的除法器的实现

3、书写tb

4、仿真结果分析 


题目:除法器的verilog实现,16bit A,8bit B。C = A/B;

 1、除法器原理

          摘自别的博客,这里除法器的原理其实就是模拟人进行除法的过程,如下图以4bit数为例,抓要从以下几个方面考虑:

(1)为什么要扩展呢?

         个人理解,因为后面涉及到左移,会将实际参与运算的位数一位一位移到扩展位上参数运算,然后将每次运算的商通过+1/+0的操作,移到最低的bit位上,这也是后来取结果和余数的时候,为什么是低4位为商,高四位为最终的余数。

(2)a=a-b+1,是什么操作

        a-b其实就是模拟,人每次除法的操作,当a>b,就+1.将商移到LSB位,当a<b.其实就是那个位是0,就将0移到LSB位,每次右移操作,每次运算的商也会随之左移就依次得到0110,的结果。

2、无符号的除法器的实现

  1. module division (
  2. input wire [15:0] A,
  3. input wire [7:0] B,
  4. output wire [15:0] result,
  5. output wire [15:0] odd
  6. );
  7. reg [15:0] a_reg;
  8. reg [7:0] b_reg;
  9. reg [31:0] temp_a;
  10. reg [31:0] temp_b;
  11. integer i;
  12. //
  13. always @(*) begin
  14. a_reg = A;
  15. b_reg = B;
  16. end
  17. always @(*) begin
  18. temp_a ={16'h0,a_reg};
  19. temp_b ={b_reg,16'h0};
  20. for(i =0;i < 16;i=i+1) begin
  21. temp_a = temp_a <<1;
  22. if(temp_a >= temp_b) begin
  23. temp_a = temp_a-temp_b +1;
  24. end
  25. else begin
  26. temp_a = temp_a;
  27. end
  28. end
  29. end
  30. assign odd = temp_a[31:16];
  31. assign result = temp_a[15:0];
  32. endmodule

3、书写tb

  1. `timescale 1ns/1ps
  2. module tb_division;
  3. reg [15:0] A;
  4. reg [7:0] B;
  5. wire [15:0] result;
  6. wire [15:0] odd;
  7. integer i;
  8. initial begin
  9. A=1;
  10. B=1;
  11. #100;
  12. for(i= 0;i <15;i=i+1) begin
  13. #20;
  14. A = {$random}% 65536;
  15. B = {$random}% 256;
  16. end
  17. end
  18. division division_inst (
  19. .A(A),
  20. .B(B),
  21. .result(result),
  22. .odd(odd)
  23. );
  24. endmodule

4、仿真结果分析 

分析一下仿真结果,

第一组: 123604/129=105......59

第二组:54793/99 = 553......46

第三组:........

仿真结果,与实际计算结果一致 

 

 

 

 

 

 

 

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

闽ICP备14008679号