|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——【FPGA代码学习】乘法器
& o" W3 m; T7 t7 q三位数相乘数学乘法表达式. E, \3 h. N" G2 F3 n
A1 A2 A3
8 L W% M+ U; a& K! G * B1 B2 B3
/ h9 O9 l0 L- ^* |2 b% _) \ -------------------------------------------
K E0 k: S% x3 f, y( c + B3A1 B3A2 B3A3
) N; v5 c9 m" U + B2A1 B2A2 B2A3$ t1 b# S$ l) Z0 A6 x1 K
+ B1A1 B1A2 B1A3 - n5 n: n, _+ }7 Z5 o
--------------------------------------------2 Y2 y8 ]# \" X J; s0 x( S' P: n
5列 4列 3列 2列 1列 6 x! ]7 {+ u/ Y* Z+ `8 j5 O
" U2 m4 X; A* l1 p9 f) f, t; s6 {+ `; {
串行乘法器:
# n1 k9 z; S7 y+ B- 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; T6 E! X& [* Z2 g2 {2 o* H
; L6 w7 G& N; y- j$ [
6 t2 h, f7 j0 q" X2 w3 q
, V( `7 C' B' ~9 g5 B& c& E* R; U G5 k, `# d$ ~# W
4 N3 E; K' m2 T" U
流水线乘法器
1 [9 o* O$ Y+ w9 B1 s1 W; ^# `! A* E8 i _& G3 u7 k/ v& I
- 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
7 k4 X7 k0 K: X! Q$ [
$ K9 v6 W# V$ }
6 l. |% Y1 C- L% |# t/ P: q6 C* E& h! h
. I! G2 X9 _; O) x/ E4 J& A3 q; c. ~' J
|
|