How to design a carry save adder circuit?

For discussions about programming, programming questions/advice, and projects that don't really have anything to do with Puppy.
Post Reply
Message
Author
User avatar
mahaju
Posts: 487
Joined: Mon 11 Oct 2010, 07:11
Location: between the keyboard and the chair

How to design a carry save adder circuit?

#1 Post by mahaju »

Code: Select all

Carry-save accumulators

Supposing that we have two bits of storage per digit, we can store the values 0, 1, 2, or 3 in each digit position. It is therefore obvious that one more binary number can be added to our carry-save result without overflowing our storage capacity: but then what?

The key to success is that at the moment of each partial addition we add three bits:

    * 0 or 1, from the number we are adding.
    * 0 if the digit in our store is 0 or 2, or 1 if it is 1 or 3.
    * 0 if the digit to its right is 0 or 1, or 1 if it is 2 or 3.

To put it another way, we are taking a carry digit from the position on our right, and passing a carry digit to the left, just as in conventional addition; but the carry digit we pass to the left is the result of the previous calculation and not the current one. In each clock cycle, carries only have to move one step along, and not n steps as in conventional addition.

Because signals don't have to move as far, the clock can tick much faster.

There is still a need to convert the result to binary at the end of a calculation, which effectively just means letting the carries travel all the way through the number just as in a conventional adder. But if we have done 512 additions in the process of performing a 512-bit multiplication, the cost of that final conversion is effectively split across those 512 additions, so each addition bears 1/512 of the cost of that final "conventional" addition.
This is from the wikipedia entry
CSA Wikipedia http://en.wikipedia.org/w/index.php?tit ... save_adder

what I don't understand is how do I use a carry save adder in practice. Suppose I need to build a 4 bit adder circuit, but using Carry Save adders instead of the conventional propagation type. What should I do?

And about the carry save accumulator paragraph quoted above, is there a detailed step by step tutorial on how to implement that? I don't understand what it means in the 2nd bullet: 0 if the digit in our store is 0 or 2, or 1 if it is 1 or 3

Please help me here.
Thanks

Also, does anyone know a good and active logic circuit discussion forum?

Post Reply