主要内容:

  1. 4位流水线乘法器

  2. 8位流水线乘法器

  3. 16位流水线乘法器

  

 1 module multi_4bits_pipelining(mul_a, mul_b, clk, rst_n, mul_out);
 2     
 3     input [3:0] mul_a, mul_b;
 4     input       clk;
 5     input       rst_n;
 6     output [7:0] mul_out;
 7 
 8     reg [7:0] mul_out;
 9 
10     reg [7:0] stored0;//stored0,...stored3用来存逐位相乘的中间结果  
11     reg [7:0] stored1;
12     reg [7:0] stored2;
13     reg [7:0] stored3;
14 
15     reg [7:0] add01;//中间结果变量  
16     reg [7:0] add23;
17 
18     always @(posedge clk or negedge rst_n) begin
19         if(!rst_n) begin
20             mul_out <= 0;
21             stored0 <= 0;
22             stored1 <= 0;
23             stored2 <= 0;
24             stored3 <= 0;
25             add01 <= 0;
26             add23 <= 0;
27         end
28         else begin
29             stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0;//如果被乘数倒数第一位不为零,则与乘数相乘结果为{4'b0,mul_a}  
30             stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;
31             stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
32             stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
33 
34             add01 <= stored1 + stored0;
35             add23 <= stored3 + stored2;
36 
37             mul_out <= add01 + add23;//最终结果  
38         end
39     end
40 
41 endmodule

 1.1 4位流水线乘法器案例

Verilog流水线乘法器

2. 8位流水线乘法器

 1 module multiplier_8(clk,rst_n,mul_a,mul_b,result
 2     );
 3 input clk;
 4 input rst_n;
 5 input[7:0] mul_a;
 6 input[7:0] mul_b;
 7 output[15:0] result;
 8 reg[15:0] result;
 9 reg[15:0] store7;
10 reg[15:0] store6;
11 reg[15:0] store5;
12 reg[15:0] store4;
13 reg[15:0] store3;
14 reg[15:0] store2;
15 reg[15:0] store1;
16 reg[15:0] store0;
17 reg[15:0] add01;
18 reg[15:0] add23;
19 reg[15:0] add45;
20 reg[15:0] add67;
21 reg[15:0] add0123;
22 reg[15:0] add4567;
23 always @ (posedge clk or negedge rst_n)
24 
25 begin
26  if(!rst_n)
27  begin
28   store7 <= 16'b0;
29   store6 <= 16'b0;
30   store5 <= 16'b0;
31   store4 <= 16'b0;
32   store6 <= 16'b0;
33   store2 <= 16'b0;
34   store1 <= 16'b0;
35   store0 <= 16'b0;
36   add01  <= 16'b0;
37   add23  <= 16'b0;
38   add45  <= 16'b0;
39   add67  <= 16'b0;
40   add0123  <= 16'b0;
41   add4567  <= 16'b0;
42  end
43  else
44 
45  begin
46   store0 <= mul_b[0] ? {8'b0,mul_a}:16'b0;
47   store1 <= mul_b[1] ? {7'b0,mul_a,1'b0}:16'b0;
48   store2 <= mul_b[2] ? {6'b0,mul_a,2'b0}:16'b0;
49   store3 <= mul_b[3] ? {5'b0,mul_a,3'b0}:16'b0;
50   store4 <= mul_b[4] ? {4'b0,mul_a,4'b0}:16'b0;
51   store5 <= mul_b[5] ? {3'b0,mul_a,5'b0}:16'b0;
52   store6 <= mul_b[6] ? {2'b0,mul_a,6'b0}:16'b0;
53   store7 <= mul_b[7] ? {1'b0,mul_a,7'b0}:16'b0;
54 
55   add67  <= store7+store6;
56   add45  <= store5+store4;
57   add23  <= store3+store2;
58   add01  <= store1+store0;
59   add0123  <= add01 + add23;
60   add4567  <= add45 + add67;
61   result <= add0123 + add4567;
62  end
63 end
64 endmodule
multiplier_8

相关文章:

  • 2021-11-05
  • 2022-12-23
  • 2022-12-23
  • 2021-10-19
  • 2021-09-29
  • 2021-05-04
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-30
  • 2022-12-23
  • 2021-11-06
  • 2022-12-23
  • 2021-10-19
相关资源
相似解决方案