总结:

从下面的Timing summary来看,流水线的频率最高、并行加法器次之,串行进位加法器再次,超前进位加法器最慢。

按理论,超前进位加法器应该比串行进位加法器快,此处为何出现这种情况,原因未知。

并行加法器因为使用加法符号实现的,从RTL图上也可以看到,具体是用加法器实现的,这个加法器是经过优化的,因此速度比较快。

流水线因为减小了组合逻辑的延时,因此可以达到较高的运行频率(注意运行速度与响应速度是不同的概念)。具体是通过缓存中间结果,从而分割组合逻辑实现流水线的。

相应地,串行进位加法器组合逻辑时延较大,因此速度较慢。

资源占用因为涉及到不同类型资源的比较,不较复杂,此处不再分析。

注意几点:

  1. 有符号数的加法,要进行符号位扩展;
  2. 对流水线加法,注意最后一级是符号扩展,前几级是0扩展;

代码以及综合结果如下。

8bit级联(即串行进位)加法器:

  1 module adder_serial(rst_n,
  2                             clk,
  3                             a,
  4                             b,
  5                             cin,
  6                             sum
  7                                  );
  8
  9 parameter     DATA_SIZE = 8;
 10
 11 input rst_n;
 12 input clk;
 13 input [DATA_SIZE - 1 : 0] a;
 14 input [DATA_SIZE - 1 : 0] b;
 15 input cin;
 16
 17 output [DATA_SIZE : 0] sum;
 18
 19 reg [DATA_SIZE - 1 : 0] a_r;
 20 reg [DATA_SIZE - 1 : 0] b_r;
 21 reg cin_r;
 22
 23 wire [DATA_SIZE : 0] sum_tmp;
 24 wire     [DATA_SIZE - 1 : 0] cout_tmp;
 25
 26 reg [DATA_SIZE : 0] sum;
 27
 28 always@(posedge clk)
 29     if(!rst_n)
 30         begin
 31             a_r <= 8'd0;
 32             b_r <= 8'd0;
 33             cin_r <= 1'b0;
 34         end
 35     else
 36         begin
 37             a_r <= a;
 38             b_r <= b;
 39             cin_r <= cin;
 40         end
 41 //级联加法器,本级的进位输出作为下一级的进位输入
 42 full_adder_1bit u0_full_adder_1bit (
 43     .a(a_r[0]),
 44     .b(b_r[0]),
 45     .cin(cin),
 46     .sum(sum_tmp[0]),
 47     .cout(cout_tmp[0])
 48     );
 49
 50 full_adder_1bit u1_full_adder_1bit (
 51     .a(a_r[1]),
 52     .b(b_r[1]),
 53     .cin(cout_tmp[0]),
 54     .sum(sum_tmp[1]),
 55     .cout(cout_tmp[1])
 56     );
 57
 58 full_adder_1bit u2_full_adder_1bit (
 59     .a(a_r[2]),
 60     .b(b_r[2]),
 61     .cin(cout_tmp[1]),
 62     .sum(sum_tmp[2]),
 63     .cout(cout_tmp[2])
 64     );
 65
 66 full_adder_1bit u3_full_adder_1bit (
 67     .a(a_r[3]),
 68     .b(b_r[3]),
 69     .cin(cout_tmp[2]),
 70     .sum(sum_tmp[3]),
 71     .cout(cout_tmp[3])
 72     );
 73
 74 full_adder_1bit u4_full_adder_1bit (
 75     .a(a_r[4]),
 76     .b(b_r[4]),
 77     .cin(cout_tmp[3]),
 78     .sum(sum_tmp[4]),
 79     .cout(cout_tmp[4])
 80     );
 81
 82 full_adder_1bit u5_full_adder_1bit (
 83     .a(a_r[5]),
 84     .b(b_r[5]),
 85     .cin(cout_tmp[4]),
 86     .sum(sum_tmp[5]),
 87     .cout(cout_tmp[5])
 88     );
 89
 90 full_adder_1bit u6_full_adder_1bit (
 91     .a(a_r[6]),
 92     .b(b_r[6]),
 93     .cin(cout_tmp[5]),
 94     .sum(sum_tmp[6]),
 95     .cout(cout_tmp[6])
 96     );
 97
 98 full_adder_1bit u7_full_adder_1bit (
 99     .a(a_r[7]),
100     .b(b_r[7]),
101     .cin(cout_tmp[6]),
102     .sum(sum_tmp[7]),
103     .cout(cout_tmp[7])
104     );
105
106 full_adder_1bit u8_full_adder_1bit (  //为计算有符号数的加法,加上符号扩展
107     .a(a_r[7]),
108     .b(b_r[7]),
109     .cin(cout_tmp[7]),
110     .sum(sum_tmp[8]),
111     .cout()
112     );
113
114 always@(posedge clk)
115     if(!rst_n)
116         begin
117             sum <= 9'd0;
118         end
119     else
120         begin
121             //sum <= {cout_tmp[7],sum_tmp};    //无符号相加时的结果
122             sum <= sum_tmp;        //有符号相加时的结果
123         end
124
125 endmodule

testbench:

module adder_serial_tb;// Inputsreg rst_n;reg clk;reg [7:0] a;reg [7:0] b;reg cin;// Outputswire [8:0] sum;// Instantiate the Unit Under Test (UUT)
    adder_serial uut (.rst_n(rst_n), .clk(clk),.cin(cin),        .a(a), .b(b), .sum(sum));parameter CLK_PERIOD = 10;initial beginrst_n = 0;clk = 1;cin = 0;#100;rst_n = 1;endalways #(CLK_PERIOD/2) clk =~clk;always@(posedge clk)if(!rst_n)begina = 0;b = 0;endelsebegina = a + 1;b = b - 2;end    endmodule

仿真结果:

观察负数、正数相加结果:

可以看到,结果正确。

器件与仿真工具:

Target Device:

xc5vsx95t-1ff1136

Product Version:

ISE 13.1

综合与静态时序报告分析

RTL电路:

资源占用:

Device Utilization Summary

[-]

Slice Logic Utilization

Used

Available

Utilization

Note(s)

Number of Slice Registers

25

58,880

1%

Number used as Flip Flops

25

Number of Slice LUTs

17

58,880

1%

Number used as logic

17

58,880

1%

Number using O6 output only

17

Number of occupied Slices

8

14,720

1%

Number of LUT Flip Flop pairs used

30

Number with an unused Flip Flop

5

30

16%

Number with an unused LUT

13

30

43%

Number of fully used LUT-FF pairs

12

30

40%

Number of unique control sets

1

Number of slice register sites lost
        to control set restrictions

3

58,880

1%

Number of bonded IOBs

28

640

4%

Number of BUFG/BUFGCTRLs

1

32

3%

Number used as BUFGs

1

Average Fanout of Non-Clock Nets

2.54

最快频率:

Timing summary:

 --------------- 
 Timing errors: 0  Score: 0  (Setup/Max: 0, Hold: 0) 
 Constraints cover 112 paths, 0 nets, and 87 connections 
Design statistics: 
    Minimum period:   2.431ns{1}   (Maximum frequency: 411.353MHz) 

并行加法器思路 :直接用加法运算符“+”实现。代码:
 1 module adder_parrel(rst_n,
 2                             clk,
 3                             a,
 4                             b,
 5                             cin,
 6                             sum
 7                                  );
 8
 9 parameter     DATA_SIZE = 8;
10
11 input rst_n;
12 input clk;
13 input [DATA_SIZE - 1 : 0] a;
14 input [DATA_SIZE - 1 : 0] b;
15 input cin;
16
17 output [DATA_SIZE : 0] sum;
18
19 reg [DATA_SIZE - 1 : 0] a_r;
20 reg [DATA_SIZE - 1 : 0] b_r;
21 reg cin_r;
22
23
24 wire [DATA_SIZE : 0] sum_tmp;
25 reg [DATA_SIZE : 0] sum;
26
27 always@(posedge clk)
28     if(!rst_n)
29         begin
30             a_r <= 8'd0;
31             b_r <= 8'd0;
32         end
33     else
34         begin
35             a_r <= a;
36             b_r <= b;
37         end
38
39 //assign sum_tmp = a_r + b_r;
40 assign sum_tmp = {a_r[7],a_r} + {b_r[7],b_r};
41
42 always@(posedge clk)
43     if(!rst_n)
44         begin
45             sum <= 9'd0;
46         end
47     else
48         begin
49             sum <= sum_tmp;
50         end
51
52 endmodule

综合后RTL级电路:

仿真结果与级联加法器一致。

adder_serial Project Status (06/08/2013 - 16:09:02)

Project File:

adder_multiplier_fir_2013_06_06.xise

Parser Errors:

No Errors

Module Name:

adder_parrel

Implementation State:

Placed and Routed

Target Device:

xc5vsx95t-1ff1136

  • Errors:

No Errors

Product Version:

ISE 13.1

  • Warnings:

2 Warnings (2 new)

Design Goal:

Balanced

  • Routing Results:

All Signals Completely Routed

Design Strategy:

Xilinx Default (unlocked)

  • Timing Constraints:

All Constraints Met

Environment:

System Settings

  • Final Timing Score:

0  (Timing Report)

Device Utilization Summary

[-]

Slice Logic Utilization

Used

Available

Utilization

Note(s)

Number of Slice Registers

25

58,880

1%

Number used as Flip Flops

25

Number of Slice LUTs

9

58,880

1%

Number used as logic

9

58,880

1%

Number using O6 output only

9

Number of occupied Slices

7

14,720

1%

Number of LUT Flip Flop pairs used

25

Number with an unused Flip Flop

0

25

0%

Number with an unused LUT

16

25

64%

Number of fully used LUT-FF pairs

9

25

36%

Number of unique control sets

1

Number of slice register sites lost
        to control set restrictions

3

58,880

1%

Number of bonded IOBs

27

640

4%

Number of BUFG/BUFGCTRLs

1

32

3%

Number used as BUFGs

1

Average Fanout of Non-Clock Nets

1.76

Timing summary: 
 --------------- 
 Timing errors: 0  Score: 0  (Setup/Max: 0, Hold: 0) 
 Constraints cover 126 paths, 0 nets, and 36 connections 
Design statistics: 
    Minimum period:   2.261ns{1}   (Maximum frequency: 442.282MHz) 

超前进位加法器:

代码:

  1 module adder_carry_ahead(rst_n,
  2                                 clk,
  3                                 a,
  4                                 b,
  5                                 cin,
  6                                 sum
  7                                      );
  8
  9 parameter     DATA_SIZE = 8;
 10
 11 input rst_n;
 12 input clk;
 13 input [DATA_SIZE - 1 : 0] a;
 14 input [DATA_SIZE - 1 : 0] b;
 15 input cin;
 16
 17 output [DATA_SIZE : 0] sum;
 18
 19 reg [DATA_SIZE - 1 : 0] a_r;
 20 reg [DATA_SIZE - 1 : 0] b_r;
 21 reg cin_r;
 22
 23 wire [DATA_SIZE - 1 : 0] G;
 24 wire [DATA_SIZE - 1 : 0] P;
 25
 26 wire [DATA_SIZE: 0] sum_tmp;
 27 wire     [DATA_SIZE - 1 : 0] cout_tmp;
 28
 29 reg [DATA_SIZE : 0] sum;
 30
 31 always@(posedge clk)
 32     if(!rst_n)
 33         begin
 34             a_r <= 8'd0;
 35             b_r <= 8'd0;
 36             cin_r <= 1'b0;
 37         end
 38     else
 39         begin
 40             a_r <= a;
 41             b_r <= b;
 42             cin_r <= cin;
 43         end
 44
 45 always@(posedge clk)
 46     if(!rst_n)
 47         begin
 48             sum <= 9'd0;
 49         end
 50     else
 51         begin
 52             //sum <= {cout_tmp[7],sum_tmp};    //无符号相加时的结果
 53             sum <= sum_tmp;        //有符号相加时的结果
 54         end
 55 /*
 56 assign G[0] =  a_r[0] & b_r[0];        //第0bit加法
 57 assign P[0] =  a_r[0] + b_r[0];
 58 assign sum_tmp[0] = a_r[0] ^ b_r[0] ^ cin_r;
 59 assign cout_tmp[0] =  G[0] + P[0] & cin_r;
 60
 61 assign G[1] =  a_r[1] & b_r[1];        //第1bit加法
 62 assign P[1] =  a_r[1] + b_r[1];
 63 assign sum_tmp[1] = a_r[1] ^ b_r[1] ^ cout_tmp[0];
 64 assign cout_tmp[1] =  G[1] + P[1] & cout_tmp[0];
 65
 66
 67 assign G[2] =  a_r[2] & b_r[2];        //第2bit加法
 68 assign P[2] =  a_r[2] + b_r[2];
 69 assign sum_tmp[2] = a_r[2] ^ b_r[2] ^ cout_tmp[1];
 70 assign cout_tmp[2] =  G[2] + P[2] & cout_tmp[1];
 71
 72 assign G[3] =  a_r[3] & b_r[3];        //第3bit加法
 73 assign P[3] =  a_r[3] + b_r[3];
 74 assign sum_tmp[3] = a_r[3] ^ b_r[3] ^ cout_tmp[2];
 75 assign cout_tmp[3] =  G[3] + P[3] & cout_tmp[2];
 76
 77 assign G[4] =  a_r[4] & b_r[4];        //第4bit加法
 78 assign P[4] =  a_r[4] + b_r[4];
 79 assign sum_tmp[4] = a_r[4] ^ b_r[4] ^ cout_tmp[3];
 80 assign cout_tmp[4] =  G[4] + P[4] & cout_tmp[3];
 81
 82 assign G[5] =  a_r[5] & b_r[5];        //第5bit加法
 83 assign P[5] =  a_r[5] + b_r[5];
 84 assign sum_tmp[5] = a_r[5] ^ b_r[5] ^ cout_tmp[4];
 85 assign cout_tmp[5] =  G[5] + P[5] & cout_tmp[4];
 86
 87 assign G[6] =  a_r[6] & b_r[6];        //第6bit加法
 88 assign P[6] =  a_r[6] + b_r[6];
 89 assign sum_tmp[6] = a_r[6] ^ b_r[6] ^ cout_tmp[5];
 90 assign cout_tmp[6] =  G[6] + P[6] & cout_tmp[5];
 91
 92 assign G[7] =  a_r[7] & b_r[7];        //第7bit加法
 93 assign P[7] =  a_r[7] + b_r[7];
 94 assign sum_tmp[7] = a_r[7] ^ b_r[7] ^ cout_tmp[6];
 95 assign cout_tmp[7] =  G[7] + P[7] & cout_tmp[6];
 96
 97 assign sum_tmp[8] = a_r[7] ^ b_r[7] ^ cout_tmp[7];
 98 */
 99
100 //+与|的功能是等价的,但是若按照上面的方式
101 //仿真结果错误
102 assign G[0] =  a_r[0] & b_r[0];        //第0bit加法
103 assign P[0] =  a_r[0] | b_r[0];
104 assign sum_tmp[0] = a_r[0] ^ b_r[0] ^ cin_r;
105 assign cout_tmp[0] =  G[0] | P[0] & cin_r;
106
107 assign G[1] =  a_r[1] & b_r[1];        //第1bit加法
108 assign P[1] =  a_r[1] | b_r[1];
109 assign sum_tmp[1] = a_r[1] ^ b_r[1] ^ cout_tmp[0];
110 assign cout_tmp[1] =  G[1] | P[1] & cout_tmp[0];
111
112 assign G[2] =  a_r[2] & b_r[2];        //第2bit加法
113 assign P[2] =  a_r[2] | b_r[2];
114 assign sum_tmp[2] = a_r[2] ^ b_r[2] ^ cout_tmp[1];
115 assign cout_tmp[2] =  G[2] | P[2] & cout_tmp[1];
116
117 assign G[3] =  a_r[3] & b_r[3];        //第3bit加法
118 assign P[3] =  a_r[3] | b_r[3];
119 assign sum_tmp[3] = a_r[3] ^ b_r[3] ^ cout_tmp[2];
120 assign cout_tmp[3] =  G[3] | P[3] & cout_tmp[2];
121
122 assign G[4] =  a_r[4] & b_r[4];        //第4bit加法
123 assign P[4] =  a_r[4] | b_r[4];
124 assign sum_tmp[4] = a_r[4] ^ b_r[4] ^ cout_tmp[3];
125 assign cout_tmp[4] =  G[4] | P[4] & cout_tmp[3];
126
127 assign G[5] =  a_r[5] & b_r[5];        //第5bit加法
128 assign P[5] =  a_r[5] | b_r[5];
129 assign sum_tmp[5] = a_r[5] ^ b_r[5] ^ cout_tmp[4];
130 assign cout_tmp[5] =  G[5] | P[5] & cout_tmp[4];
131
132 assign G[6] =  a_r[6] & b_r[6];        //第6bit加法
133 assign P[6] =  a_r[6] | b_r[6];
134 assign sum_tmp[6] = a_r[6] ^ b_r[6] ^ cout_tmp[5];
135 assign cout_tmp[6] =  G[6] | P[6] & cout_tmp[5];
136
137 assign G[7] =  a_r[7] & b_r[7];        //第7bit加法
138 assign P[7] =  a_r[7] | b_r[7];
139 assign sum_tmp[7] = a_r[7] ^ b_r[7] ^ cout_tmp[6];
140 assign cout_tmp[7] =  G[7] | P[7] & cout_tmp[6];
141
142 //为了计算有符号数的加法,加上符号扩展
143 assign sum_tmp[8] = a_r[7] ^ b_r[7] ^ cout_tmp[7];
144
145 endmodule

仿真结果前两种加法器。

RTL级电路:

资源占用:

adder_carry_ahead Project Status

Project File:

adder_multiplier_fir_2013_06_06.xise

Parser Errors:

No Errors

Module Name:

adder_carry_ahead

Implementation State:

Placed and Routed

Target Device:

xc5vsx95t-1ff1136

  • Errors:

No Errors

Product Version:

ISE 13.1

  • Warnings:

1 Warning (0 new)

Design Goal:

Balanced

  • Routing Results:

All Signals Completely Routed

Design Strategy:

Xilinx Default (unlocked)

  • Timing Constraints:

All Constraints Met

Environment:

System Settings

  • Final Timing Score:

0  (Timing Report)

Device Utilization Summary

[-]

Slice Logic Utilization

Used

Available

Utilization

Note(s)

Number of Slice Registers

26

58,880

1%

Number used as Flip Flops

26

Number of Slice LUTs

17

58,880

1%

Number used as logic

17

58,880

1%

Number using O6 output only

17

Number of occupied Slices

10

14,720

1%

Number of LUT Flip Flop pairs used

32

Number with an unused Flip Flop

6

32

18%

Number with an unused LUT

15

32

46%

Number of fully used LUT-FF pairs

11

32

34%

Number of unique control sets

1

Number of slice register sites lost
        to control set restrictions

2

58,880

1%

Number of bonded IOBs

28

640

4%

Number of BUFG/BUFGCTRLs

1

32

3%

Number used as BUFGs

1

Average Fanout of Non-Clock Nets

2.53

Timing summary:

 --------------- 
 Timing errors: 0  Score: 0  (Setup/Max: 0, Hold: 0) 
 Constraints cover 121 paths, 0 nets, and 90 connections 
Design statistics: 
    Minimum period:   3.309ns{1}   (Maximum frequency: 302.206MHz) 
流水线加法器:
  1 module adder_pipeline(rst_n,
  2                                 clk,
  3                                 a,
  4                                 b,
  5                                 cin,
  6                                 sum
  7                                      );
  8
  9 parameter     DATA_SIZE = 8;
 10
 11 input rst_n;
 12 input clk;
 13 input [DATA_SIZE - 1 : 0] a;
 14 input [DATA_SIZE - 1 : 0] b;
 15 input cin;
 16
 17 output [DATA_SIZE : 0] sum;
 18
 19 reg [DATA_SIZE - 1 : 0] a_r;
 20 reg [DATA_SIZE - 1 : 0] b_r;
 21 reg cin_r;
 22
 23 reg [DATA_SIZE : 0] sum;
 24
 25 reg [1:0] stage0_sum;
 26 reg stage0_cout;
 27 reg [DATA_SIZE - 1 : 0] stage0_a_r;
 28 reg [DATA_SIZE - 1 : 0] stage0_b_r;
 29
 30 //reg [4:0] stage1_sum;
 31 reg [3:0] stage1_sum;
 32 reg stage1_cout;
 33 reg [DATA_SIZE - 1 : 0] stage1_a_r;
 34 reg [DATA_SIZE - 1 : 0] stage1_b_r;
 35
 36 //reg [6:0] stage2_sum;
 37 reg [5:0] stage2_sum;
 38 reg stage2_cout;
 39 reg [DATA_SIZE - 1 : 0] stage2_a_r;
 40 reg [DATA_SIZE - 1 : 0] stage2_b_r;
 41
 42 //reg [8:0] stage3_sum;
 43 reg [7:0] stage3_sum;
 44 reg stage3_cout;
 45
 46 always@(posedge clk)
 47     if(!rst_n)
 48         begin
 49             a_r <= 8'd0;
 50             b_r <= 8'd0;
 51             cin_r <= 1'b0;
 52         end
 53     else
 54         begin
 55             a_r <= a;
 56             b_r <= b;
 57             cin_r <= cin;
 58         end
 59
 60 always@(posedge clk)
 61     if(!rst_n)
 62         begin
 63             {stage0_cout,stage0_sum} <= 3'd0;
 64             stage0_a_r <= 8'd0;
 65             stage0_b_r <= 8'd0;
 66         end
 67     else
 68         begin
 69             //{stage0_cout,stage0_sum} <= a_r[1:0] + b_r[1:0] + cin_r;
 70             {stage0_cout,stage0_sum} <= {1'b0,a_r[1:0]} + {1'b0,b_r[1:0]} + cin_r;
 71             stage0_a_r <= a_r;
 72             stage0_b_r <= b_r;
 73         end
 74
 75 always@(posedge clk)
 76     if(!rst_n)
 77         begin
 78             {stage1_cout,stage1_sum} <= 5'd0;
 79             stage1_a_r <= 8'd0;
 80             stage1_b_r <= 8'd0;
 81         end
 82     else
 83         begin
 84             //{stage1_cout,stage1_sum} <= { {a_r[3:2] + b_r[3:2] + stage0_cout},{stage0_sum} };
 85             //{stage1_cout,stage1_sum} <= { {{1'b0,a_r[3:2]} + {1'b0,b_r[3:2]} + stage0_cout},{stage0_sum} };
 86             //{stage1_cout,stage1_sum} <= { {1'b0,a_r[3:2]} + {1'b0,b_r[3:2]} + stage0_cout,stage0_sum };
 87             //{stage1_cout,stage1_sum} = { {a_r[3],a_r[3:2]} + {b_r[3],b_r[3:2]} + stage0_cout,stage0_sum };
 88             {stage1_cout,stage1_sum} <= { {1'b0,stage0_a_r[3:2]} + {1'b0,stage0_b_r[3:2]} + stage0_cout,stage0_sum };
 89             stage1_a_r <= stage0_a_r;
 90             stage1_b_r <= stage0_b_r;
 91         end
 92
 93 always@(posedge clk)
 94     if(!rst_n)
 95         begin
 96             {stage2_cout,stage2_sum} <= 7'd0;
 97             stage2_a_r <= 8'd0;
 98             stage2_b_r <= 8'd0;
 99         end
100     else
101         begin
102             {stage2_cout,stage2_sum} <= { {1'b0,stage1_a_r[5:4]} + {1'b0,stage1_b_r[5:4]} + stage1_cout,stage1_sum };
103             stage2_a_r <= stage1_a_r;
104             stage2_b_r <= stage1_b_r;
105         end
106
107 always@(posedge clk)
108     if(!rst_n)
109         begin
110             {stage3_cout,stage3_sum} <= 9'd0;
111         end
112     else
113         begin
114             {stage3_cout,stage3_sum} <= { {stage2_a_r[7],stage2_a_r[7:6]} + {stage2_b_r[7],stage2_b_r[7:6]} + stage2_cout,stage2_sum };
115         end
116
117 always@(posedge clk)
118     if(!rst_n)
119         begin
120             sum <= 9'd0;
121         end
122     else
123         begin
124             sum <= {stage3_cout,stage3_sum};
125         end
126
127 endmodule

仿真结果与前三种加法器一致。RTL级电路图:

资源占用:

adder_pipeline Project Status

Project File:

adder_multiplier_fir_2013_06_06.xise

Parser Errors:

No Errors

Module Name:

adder_pipeline

Implementation State:

Placed and Routed

Target Device:

xc5vsx95t-1ff1136

  • Errors:

No Errors

Product Version:

ISE 13.1

  • Warnings:

50 Warnings (50 new)

Design Goal:

Balanced

  • Routing Results:

All Signals Completely Routed

Design Strategy:

Xilinx Default (unlocked)

  • Timing Constraints:

All Constraints Met

Environment:

System Settings

  • Final Timing Score:

0  (Timing Report)

Device Utilization Summary

[-]

Slice Logic Utilization

Used

Available

Utilization

Note(s)

Number of Slice Registers

65

58,880

1%

Number used as Flip Flops

65

Number of Slice LUTs

24

58,880

1%

Number used as logic

18

58,880

1%

Number using O6 output only

18

Number used as Memory

6

24,320

1%

Number used as Shift Register

6

Number using O6 output only

6

Number of occupied Slices

22

14,720

1%

Number of LUT Flip Flop pairs used

65

Number with an unused Flip Flop

0

65

0%

Number with an unused LUT

41

65

63%

Number of fully used LUT-FF pairs

24

65

36%

Number of unique control sets

3

Number of slice register sites lost
        to control set restrictions

5

58,880

1%

Number of bonded IOBs

28

640

4%

Number of BUFG/BUFGCTRLs

1

32

3%

Number used as BUFGs

1

Average Fanout of Non-Clock Nets

2.13

Timing summary:

 --------------- 
 Timing errors: 0  Score: 0  (Setup/Max: 0, Hold: 0) 
 Constraints cover 93 paths, 0 nets, and 116 connections 
Design statistics: 
    Minimum period:   2.221ns{1}   (Maximum frequency: 450.248MHz) 

转载于:https://www.cnblogs.com/youngforever/archive/2013/06/08/3127204.html

加法器的verilog实现(串行进位、并联、超前进位、流水线)相关推荐

  1. AD9910高速集成DDS芯片(verilog篇-串行模式篇-22个寄存器SPI通信周期控制)

    文章目录 0.引言 1.verilog思路 2.modelsim调试 3.总结 0.引言 经过对疫情期间某天下午写的代码进行,多次调试后,终于输出了波形,下面我们逐步跟着思路,对22个寄存器不同长度的 ...

  2. 行进位,超前进位 ,行波进位 ,并行进位有什么区别

    行波进位即串行进位,较高位和的产生依赖于低位的进位.而先行进位.超前进位.并行进位是同一种进位方式,较高位和的产生不依赖于低位的进位.

  3. Verilog中的加法器(半加器,全加器,串行、超前进位加法器)

    加法器为半加器和全加器: 半加器:不考虑低位向高位的进位.2输入,2输出. 全加器:考虑低位向高位的进位.3输入(多了进位输入C),2输出. Verilog代码如下: module half_add( ...

  4. 串行进位加法器与超前进位加法器 verilog

    文章目录 串行进位加法器 半加器 全加器 任意位数串行进位加法器 tb 4bit超前进位加法器 Reference 串行进位加法器 半加器 module half_adder (input in1,i ...

  5. Verilog实现超前进位加法器

    在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小.下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S=A⊕B⊕C ...

  6. FPGA之道(35)Verilog中的并行与串行语句

    文章目录 前言 Verilog的并行语句 Verilog连续赋值语句 普通连续赋值语句 条件连续赋值语句 Verilog程序块语句 沿事件 纯组合always 纯时序always 具有同步复位的alw ...

  7. verilog 4位16位任意位超前进位加法器

    众所周知,1+1=2,对于较小位数的加法,大家都可以在瞬间报出结果,但是如果比较大呢? 13242345609745021+24234123421=?我们就需要一些运算时间来计算出结果.当然如果您是最 ...

  8. 超前进位加法器(附Verilog代码)

    超前进位加法器: 普通全加器(行波进位加法器)是单比特全加器的级联,高位需要低位的进位位,故位宽增大时,加法的组合逻辑不断增大,超前进位加法器解决了这一问题. 优点:不需要等待低位的进位.直接计算就可 ...

  9. 4位先行进位加法器_行波进位/超前进位加法器详解

    行波进位加法器是串行执行的,其高位的运算要依赖低位的进位,所以当输入数据的位数较多时,会形成很大的延迟并可能成为芯片的关键路径. 采用超前进位加法器(也叫先行进位加法器)可以有效减小这种延迟.下面介绍 ...

  10. 32位进位选择加法器_超前进位加法器amp;行波进位加法器

    超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...

最新文章

  1. linux驱动之i2c学习
  2. angular 兼容ie7 bootstrap2兼容ie6
  3. JDBC常见面试题集锦(二)
  4. Spring Boot中配置文件application.properties使用
  5. eclipse tomcat新建一个_Javaweb07-Eclipse自动创建动态web项目
  6. 冬日暖阳!网易大数据应用与分析实践分享沙龙【北京站 12.16】
  7. 大数据平台搭建技术底座 四行业迎来新机遇
  8. 大班音乐机器人反思_幼儿园大班音乐游戏教案活动《机器人》含反思
  9. 网络文件共享服务主流----FTP文件传输协议
  10. 网页 游戏服务器连接超时,连接游戏服务器超时怎么解决
  11. Python 面向对象解决跳马问题
  12. ios 内购 服务器二次验证元宝处理
  13. 我国影视行业的痛点——影视链的目标
  14. Unity3D iPhone开发入门 (转)iPhoneSettings.
  15. php生成免签转账码,(转)支付宝免签二维收款码生成
  16. 从有道云笔记迁移到另一个有道云笔记账号
  17. 微信小程序新手留言板
  18. 程序员和工程师有什么不一样?
  19. 讯搜 配置mysql_迅搜使用指南
  20. R语言入门 Chapter05 | 因子

热门文章

  1. SDNU 1171.合并果子(区间dp)
  2. HDU - 6641 TDL(数学)
  3. 1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
  4. IIC原理及简单流程
  5. Caliburn笔记-Action简写(wpf框架)
  6. kong 使用jwt RSA256证书
  7. spring cloud: 使用consul来替换config server,config key/value 具体的配置详解
  8. centos7搭建时间服务器
  9. Working with Multiple Environments(使用多个环境)
  10. angular 自定义指令参数详解