数学建模社区-数学中国

标题: 基4-Booth编码乘法运算 [打印本页]

作者: 大笨象    时间: 2011-7-20 19:49
标题: 基4-Booth编码乘法运算
本帖最后由 大笨象 于 2011-7-20 20:58 编辑
  1. `timescale 1ns / 1ps
  2. module Booth4RadixMultiplier(a,b,c,sclr,clk,rfd
  3.     );
  4. parameter N=8;
  5. input[N-1:0] a,b;
  6. input sclr,clk;
  7. output[2*N-1:0] c;
  8. output rfd;
  9. reg[N:0] y;
  10. reg[N-1:0] x,x_c,z;
  11. reg[1:0] current_state,next_state;
  12. integer index_i;
  13. reg finished;
  14. parameter    Init=2'b00,
  15.                    Acc=2'b01,
  16.                    Done=2'b11;
  17. always@(posedge clk)//状态跳变时钟
  18. if(!sclr)
  19. begin
  20. current_state<=Init;
  21. end
  22. else
  23. begin
  24. current_state<=next_state;
  25. end
  26. always@(current_state or index_i)//状态改变的组合电路
  27. case(current_state)
  28. Init:
  29.      next_state=Acc;
  30. Acc:
  31.      if(index_i==(N>>1)-1)
  32.           next_state=Done;
  33.           else
  34.           next_state=Acc;
  35. Done:
  36.      next_state=Init;
  37. endcase
  38. always@(posedge clk)//实现算法的计算程序
  39. case(current_state)
  40. Init:
  41.        begin
  42.        finished=0;
  43.                  index_i=0;
  44.             x=a[N-1:0];
  45.                  x_c=~a[N-1:0]+1;
  46.                  y={b[N-1:0],1'b0};
  47.                  z=0;
  48.                  end
  49. Acc:
  50.       begin
  51.             case(y[2:0])
  52.                  3'b000,3'b111:
  53.                     {z[N-1:0],y[N:0]}={z[N-1],z[N-1],z[N-1:0],y[N:2]};
  54.                  3'b001,3'b010:
  55.                     begin
  56.                          z=z+x;
  57.                         {z[N-1:0],y[N:0]}={z[N-1],z[N-1],z[N-1:0],y[N:2]};
  58.                          end
  59.                  3'b011:
  60.                     begin
  61.                         z=z+(x<<1);
  62.                        {z[N-1:0],y[N:0]}={z[N-1],z[N-1],z[N-1:0],y[N:2]};                            
  63.                    end
  64.                  3'b100:
  65.                     begin
  66.                        z=z+(x_c<<1);
  67.                       {z[N-1:0],y[N:0]}={z[N-1],z[N-1],z[N-1:0],y[N:2]};                            
  68.                    end      
  69.                  3'b101,3'b110:
  70.                     begin
  71.                       z=z+x_c;
  72.                      {z[N-1:0],y[N:0]}={z[N-1],z[N-1],z[N-1:0],y[N:2]};
  73.                    end
  74.                  default:
  75.                      {z[N-1:0],y[N:0]}=0;
  76.           endcase
  77.           index_i=index_i+1;
  78.      end
  79. Done:
  80.       finished=1;
  81. endcase
  82. assign rfd=finished;
  83. assign c[N*2-1:0]={z[N-1:0],y[N:1]};
  84. endmodule
复制代码

20110720194500.jpg (68.25 KB, 下载次数: 175)

时序仿真图

时序仿真图


作者: jt202010    时间: 2011-7-21 09:39
是什么东西啊
作者: 大笨象    时间: 2011-7-21 15:13
jt202010 发表于 2011-7-21 09:39
是什么东西啊

处理器对长乘法的快速计算。
作者: zspengyou    时间: 2011-7-22 18:31
但愿对大家有用,分享之~
作者: zerodingying    时间: 2012-2-4 19:34
大神辛苦了。。。。
作者: 乐观派报告    时间: 2012-2-4 19:46
膜拜下,因为我真不知道是什么
作者: 空木葬花    时间: 2014-5-4 14:49
非常感谢楼主!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5