Description
For this assignment you will implement a carry lookahead adder asdescribedincla.pdf. This adder improves upon the partial adder that you implemented in Lab 7.
In that lab you constructed a 4-bit ripple carry adder. Now you must build a 64-bit carry lookahead adder. This can be achieved by building a “hierarchy” of progressively larger groups, sections, etc. See the PDF for more information.
Additional details may be found starting on page B-38 in your textbook. Your CLA must also support the subtraction operation. This is discussed on page B-29 of your textbook.
To summarize, recall that in order to negate a number in two’s complement we have to invert all of the bits and then add 1. This can be achieved by setting the initial carry-in to 1 instead of 0. Your program must support hexadecimal (base 16) input. C natively supports hexadecimal; see the documentation for the %x specifier for printf()/scanf().
You should also be using the bitwise operations C exposes as mentioned in Lab 7. I recommend that you start with a simple ripple carry adder so you can check your answers. It will also be helpful to quickly enable debugging output to check that your generates and propagates (see the PDF) are what you expect.
Sample output below. bash-3.2$ ./cla Enter A (hex): 1 Enter B (hex): 2 Add (0) or subtract (1): 1
A is 0000000000000001 or 1 B is 0000000000000002 or 2 Inverting 2 B (bin) : 1111111111111111111111111111111111111111111111111111111111111101
Calculate sum, S:
A (bin) : 0000000000000000000000000000000000000000000000000000000000000001 B (bin) : 1111111111111111111111111111111111111111111111111111111111111101 S (bin) : 1111111111111111111111111111111111111111111111111111111111111111
S is ffffffffffffffff or -1
bash-3.2$ ./cla Enter A (hex):
1
1 Enter B (hex): 1 Add (0) or subtract (1): 0
A is 0000000000000001 or 1 B is 0000000000000001 or 1
Calculate sum, S:
A (bin) : 0000000000000000000000000000000000000000000000000000000000000001 B (bin) : 0000000000000000000000000000000000000000000000000000000000000001 S (bin) : 0000000000000000000000000000000000000000000000000000000000000010
S is 0000000000000002 or 2
bash-3.2$ ./cla Enter A (hex): 1 Enter B (hex): 1 Add (0) or subtract (1): 1
A is 0000000000000001 or 1 B is 0000000000000001 or 1 Inverting 1 B (bin) : 1111111111111111111111111111111111111111111111111111111111111110
Calculate sum, S:
A (bin) : 0000000000000000000000000000000000000000000000000000000000000001 B (bin) : 1111111111111111111111111111111111111111111111111111111111111110 S (bin) : 0000000000000000000000000000000000000000000000000000000000000000
S is 0000000000000000 or 0
bash-3.2$ ./cla Enter A (hex): 15 Enter B (hex): 3 Add (0) or subtract (1): 0
A is 0000000000000015 or 21 B is 0000000000000003 or 3
Calculate sum, S:
A (bin) : 0000000000000000000000000000000000000000000000000000000000010101 B (bin) : 0000000000000000000000000000000000000000000000000000000000000011 S (bin) : 0000000000000000000000000000000000000000000000000000000000011000
2
S is 0000000000000018 or 24
bash-3.2$ ./cla Enter A (hex): 15 Enter B (hex): 3 Add (0) or subtract (1): 1
A is 0000000000000015 or 21 B is 0000000000000003 or 3 Inverting 3 B (bin) : 1111111111111111111111111111111111111111111111111111111111111100
Calculate sum, S:
A (bin) : 0000000000000000000000000000000000000000000000000000000000010101 B (bin) : 1111111111111111111111111111111111111111111111111111111111111100 S (bin) : 0000000000000000000000000000000000000000000000000000000000010010
S is 0000000000000012 or 18
bash-3.2$ ./cla Enter A (hex): deadbeef Enter B (hex): 123abc Add (0) or subtract (1): 0
A is 00000000deadbeef or 3735928559 B is 0000000000123abc or 1194684
Calculate sum, S:
A (bin) : 0000000000000000000000000000000011011110101011011011111011101111 B (bin) : 0000000000000000000000000000000000000000000100100011101010111100 S (bin) : 0000000000000000000000000000000011011110101111111111100110101011
S is 00000000debff9ab or 3737123243
bash-3.2$ ./cla Enter A (hex): deadbeef Enter B (hex): 123abc Add (0) or subtract (1): 1
A is 00000000deadbeef or 3735928559 B is 0000000000123abc or 1194684 Inverting 1194684
3
B (bin) : 1111111111111111111111111111111111111111111011011100010101000011
Calculate sum, S:
A (bin) : 0000000000000000000000000000000011011110101011011011111011101111 B (bin) : 1111111111111111111111111111111111111111111011011100010101000011 S (bin) : 0000000000000000000000000000000011011110100110111000010000110011
S is 00000000de9b8433 or 3734733875
bash-3.2$ ./cla Enter A (hex): de1ec7ab1ebeef Enter B (hex): 5ca1ded Add (0) or subtract (1): 0
A is 00de1ec7ab1ebeef or 62521287748009711 B is 0000000005ca1ded or 97132013
Calculate sum, S:
A (bin) : 0000000011011110000111101100011110101011000111101011111011101111 B (bin) : 0000000000000000000000000000000000000101110010100001110111101101 S (bin) : 0000000011011110000111101100011110110000111010001101110011011100
S is 00de1ec7b0e8dcdc or 62521287845141724
bash-3.2$ ./cla Enter A (hex): de1ec7ab1ebeef Enter B (hex): 5ca1ded Add (0) or subtract (1): 1
A is 00de1ec7ab1ebeef or 62521287748009711 B is 0000000005ca1ded or 97132013 Inverting 97132013 B (bin) : 1111111111111111111111111111111111111010001101011110001000010010
Calculate sum, S:
A (bin) : 0000000011011110000111101100011110101011000111101011111011101111 B (bin) : 1111111111111111111111111111111111111010001101011110001000010010 S (bin) : 0000000011011110000111101100011110100101010101001010000100000010
S is 00de1ec7a554a102 or 62521287650877698