Python Forum
16-bit Adder made from logic gates
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
16-bit Adder made from logic gates
#1
def nandgate(a, b):
	if a == 0 and b == 0:
		return 1
	if a == 1 and b == 0:
		return 1
	if a == 0 and b == 1:
		return 1
	if a == 1 and b == 1:
		return 0

def invert(x):
	return nandgate(x, x)

def andgate(a, b):
	return invert(nandgate(a, b))

def orgate(a, b):
	return invert(andgate(invert(a), invert(b)))

def xorgate(a, b):
	return invert(orgate(invert(orgate(a, b)), andgate(a, b)))

def addtwo(a, b):
	return andgate(a, b), xorgate(a, b)

def addthree(a, b, c):
	return orgate(addtwo(a, b)[0], andgate(addtwo(a, b)[1], c)), xorgate(addtwo(a, b)[1], c)

def multiadder(aFifteen, aFourteen, aThirteen, aTwelve, aEleven, aTen, aNine, aEight, aSeven, aSix, aFive, aFour, aThree, aTwo, aOne, aZero, bFifteen, bFourteen, bThirteen, bTwelve, bEleven, bTen, bNine, bEight, bSeven, bSix, bFive, bFour, bThree, bTwo, bOne, bZero, c):
        return addthree(aFifteen, bFifteen, addthree(aFourteen, bFourteen, addthree(aThirteen, bThirteen, addthree(aTwelve, bTwelve, addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0], addthree(aFifteen, bFifteen, addthree(aFourteen, bFourteen, addthree(aThirteen, bThirteen, addthree(aTwelve, bTwelve, addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aFourteen, bFourteen, addthree(aThirteen, bThirteen, addthree(aTwelve, bTwelve, addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aThirteen, bThirteen, addthree(aTwelve, bTwelve, addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aTwelve, bTwelve, addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aEleven, bEleven, addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aTen, bTen, addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aNine, bNine, addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aEight, bEight, addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[0])[1], addthree(aSeven, bSeven, addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[0])[1], addthree(aSix, bSix, addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[0])[1], addthree(aFive, bFive, addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[0])[1], addthree(aFour, bFour, addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[0])[1], addthree(aThree, bThree, addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[0])[1], addthree(aTwo, bTwo, addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[0])[1], addthree(aOne, bOne, addthree(aZero, bZero, c)[0])[1], addthree(aZero, bZero, c)[1]

print("Enter two 2 Base-10 numbers to add. Result will be in binary ")

a = int(input("Enter A "))
a = bin(a)[2:].zfill(16)

b = int(input("Enter B "))
b = bin(b)[2:].zfill(16)

aFifteen = int(a[0])
aFourteen = int(a[1])
aThirteen = int(a[2])
aTwelve = int(a[3])
aEleven = int(a[4])
aTen = int(a[5])
aNine = int(a[6])
aEight = int(a[7])
aSeven = int(a[8])
aSix = int(a[9])
aFive = int(a[10])
aFour = int(a[11])
aThree = int(a[12])
aTwo = int(a[13])
aOne = int(a[14])
aZero = int(a[15])
            
bFifteen = int(b[0])
bFourteen = int(b[1])
bThirteen = int(b[2])
bTwelve = int(b[3])
bEleven = int(b[4])
bTen = int(b[5])
bNine = int(b[6])
bEight = int(b[7])
bSeven = int(b[8])
bSix = int(b[9])
bFive = int(b[10])
bFour = int(b[11])
bThree = int(b[12])
bTwo = int(b[13])
bOne = int(b[14])
bZero = int(b[15])
            
c = 0

print(multiadder(aFifteen, aFourteen, aThirteen, aTwelve, aEleven, aTen, aNine, aEight, aSeven, aSix, aFive, aFour, aThree, aTwo, aOne, aZero, bFifteen, bFourteen, bThirteen, bTwelve, bEleven, bTen, bNine, bEight, bSeven, bSix, bFive, bFour, bThree, bTwo, bOne, bZero, c))

exit = input("")
Reply
#2
This is neat, does it work the way that you expect it too?
Have you heard of a look ahead carry circuit?
Reply
#3
you should check out Nand to Tetris here: https://www.nand2tetris.org/
I took this free course and had so much fun with it.
You build a complete 16 bit computer from nothing but nand gates, then build an assembler, operating system, compiler, and finally a fully functional tetris game on the computer that you built.
Highly, highly recommended!
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020