找回密码
 注册
关于网站域名变更的通知
查看: 290|回复: 1
打印 上一主题 下一主题

转——【FPGA代码学习】乘法器 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-11 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——【FPGA代码学习】乘法器
9 M5 [# Y( J: L# T8 C三位数相乘数学乘法表达式
& Q  I/ @  k5 e                                        A1       A2       A3
2 F/ Q7 Z' U' w2 |' ~                                  *    B1       B2       B35 l! d/ d1 y, D1 I8 E
      -------------------------------------------7 J; u( d, v. V/ n% o! G2 q4 u
       +                           B3A1     B3A2    B3A31 b/ G8 t% j7 ]& _( k; S
       +               B2A1    B2A2     B2A3
( T" r- y% i; {# a8 h) _       +  B1A1    B1A2    B1A3            
. O+ [( E% L5 l! g+ \. ?      --------------------------------------------
0 t- ], O4 E2 z; K" `4 B8 j           5列      4列        3列         2列     1列              
% A. w% u2 C+ Z& e/ W( ~! D' N7 m0 \

& Q6 o: H  V8 b串行乘法器:
' \! _0 C$ U, k7 }5 R7 k! E
  • module multi_CX(clk, x, y, result);
  •    
  •     input clk;
  •     input [7:0] x, y;
  •     output [15:0] result;
  •     reg [15:0] result;
  •     parameter s0 = 0, s1 = 1, s2 = 2;
  •     reg [2:0] count = 0;
  •     reg [1:0] state = 0;
  •     reg [15:0] P, T;
  •     reg [7:0] y_reg;
  •     always @(posedge clk) begin
  •         case (state)
  •             s0: begin
  •                 count <= 0;
  •                 P <= 0;
  •                 y_reg <= y;
  •                 T <= {{8{1'b0}}, x};
  •                 state <= s1;
  •             end
  •             s1: begin
  •                 if(count == 3'b111)
  •                     state <= s2;
  •                 else begin
  •                     if(y_reg[0] == 1'b1)
  •                         P <= P + T;
  •                     else
  •                         P <= P;
  •                     y_reg <= y_reg >> 1;
  •                     T <= T << 1;
  •                     count <= count + 1;
  •                     state <= s1;
  •                 end
  •             end
  •             s2: begin
  •                 result <= P;
  •                 state <= s0;
  •             end
  •             default: ;
  •         endcase
  •     end
  • endmodule
    ( d! t4 @: @* v* C* F# P2 q' m1 A

' Z: R$ S/ W! C% A) I3 j8 O# I  Z3 o& N
1 ?- O" R! P) ]6 \1 T5 @9 d
5 D" P0 |- f9 h6 U# T5 |! x
7 G' S; ^/ N; X3 O
    流水线乘法器1 j- y6 A4 V: S$ p
5 r+ y7 b/ p$ }1 J2 e7 s  x- @
  • module multi_4bits_pipelining(mul_a, mul_b, clk, rst_n, mul_out);
  •    
  •     input [3:0] mul_a, mul_b;
  •     input       clk;
  •     input       rst_n;
  •     output [7:0] mul_out;
  •     reg [7:0] mul_out;
  •     reg [7:0] stored0;
  •     reg [7:0] stored1;
  •     reg [7:0] stored2;
  •     reg [7:0] stored3;
  •     reg [7:0] add01;
  •     reg [7:0] add23;
  •     always @(posedge clk or negedge rst_n) begin
  •         if(!rst_n) begin
  •             mul_out <= 0;
  •             stored0 <= 0;
  •             stored1 <= 0;
  •             stored2 <= 0;
  •             stored3 <= 0;
  •             add01 <= 0;
  •             add23 <= 0;
  •         end
  •         else begin
  •             stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0;
  •             stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;
  •             stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
  •             stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
  •             add01 <= stored1 + stored0;
  •             add23 <= stored3 + stored2;
  •             mul_out <= add01 + add23;
  •         end
  •     end
  • endmodule
    * f  H6 p0 S: O/ L2 i( }& |

' P" u" l% P( ^6 Z. x# ~* M/ G
5 N& N& S+ r: |, f1 }6 r  [* p

' G) w% o2 A$ A4 ^& c
7 I* ^# A+ A* c& U1 n# M$ L

该用户从未签到

2#
发表于 2019-4-11 15:59 | 只看该作者
找到一个不错的小玩意儿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 23:03 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表