From 53e65de28e1d38c5f2174c519aaab9f7f4195e3b Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Sat, 6 Apr 2024 16:48:27 -0500 Subject: [PATCH] booth and modified booth possibly done --- booth_multiplier.py | 81 ++++++++++++++++++++++++++++++++++++++++++++ input.txt | 37 ++++++++++---------- rubric.pdf | Bin 0 -> 50314 bytes 3 files changed, 101 insertions(+), 17 deletions(-) create mode 100755 booth_multiplier.py create mode 100644 rubric.pdf diff --git a/booth_multiplier.py b/booth_multiplier.py new file mode 100755 index 0000000..606aee5 --- /dev/null +++ b/booth_multiplier.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +with open('input.txt') as f: + input_string = f.read().split('\n') + +def twos_comp(num, length): + if num == 0: + return 0 + num ^= ((1 << length) - 1) + return num + 1 + +def logical_shiftr(num, length, times): + for t in range(times): + num = (num >> 1) | ((1 << length) & num) + return num + +def convert_if_twoscomp(num, length): + if num & (1 << length - 1): + return (-1 * twos_comp(num, length)) + return num & (1 << length) - 1 + +def debug(multiplicand_b, multiplier_b, length): + sign = 0 + multiplicand = convert_if_twoscomp(multiplicand_b, length) + multiplier = convert_if_twoscomp(multiplier_b, length) + + result = multiplicand * multiplier + result_bin = (twos_comp(result, length * 2), result) [result > 0] + + print("expected result:\t{}\t*\t{}\t=\t{}\t=\t{}".format(multiplicand, multiplier, bin(result_bin), multiplicand * multiplier)) + #print("booths result:\t\t{}\t*\t{}\t=\t{}".format(bin(multiplicand), bin(multiplier), bin(result_booth))) + + +def booth(multiplier, multiplicand, length): + multiplicand_twos_comp = twos_comp(multiplicand, length) + result = multiplier << 1 # extended bit + for i in range(length): + op = result & 0b11 + if op == 0b01: + result += multiplicand << (length + 1) + if op == 0b10: + result += multiplicand_twos_comp << (length + 1) + result &= (1 << (length * 2) + 1) - 1 # get rid of any overflows + result = logical_shiftr(result, length * 2, 1) + result = result >> 1 + return result + +def booth_mod(multiplier, multiplicand, length): + multiplicand_twos_comp = twos_comp(multiplicand, length) + result = multiplier << 1 # extended bit + for i in range(int(length / 2)): + match result & 0b111: + case 0b010 | 0b001: # add + result += multiplicand << (length + 1) + case 0b011: # add * 2 + result += multiplicand << (length + 2) # extra shift is multiplying multiplicand by 2 + case 0b100: # sub * 2 + result += multiplicand_twos_comp << (length + 2) + case 0b101 | 0b110: # sub + result += multiplicand_twos_comp << (length + 1) + result &= (1 << (length * 2) + 1) - 1 # get rid of any overflows + result = logical_shiftr(result, length * 2, 2) + result = result >> 1 + return result + + + + +for operation in input_string: + if operation == '' or operation[0] == '#': + continue + length = len(operation.split(" ")[0]) + multiplicand = int(operation.split(" ")[0], 2) + multiplier = int(operation.split(" ")[1], 2) + + + debug(multiplicand, multiplier, length) + result_booth = booth(multiplier, multiplicand, length) + result_mod_booth = booth_mod(multiplier, multiplicand, length) + print("booths:\t\t\t", bin(result_booth)) + print("modified booths:\t", bin(result_mod_booth)) + diff --git a/input.txt b/input.txt index 3e4755c..63c7420 100644 --- a/input.txt +++ b/input.txt @@ -1,17 +1,20 @@ -1110 1111 -0101 0000 -111111 111111 -101110 110111 -111011 100011 -00011111 01010101 -11010111 01010101 -01010101 11010111 -01110111 00110011 -00000000 01110111 -0101010101 0101010101 -1100111011 1001110000 -1001101110 0101111010 -010101010101 010101010101 -001111100111 000000000000 -101010101010 101010101010 -111001110000 000011111111 +#BEFORE TURNING IN. MAKE SURE THESE ARE RIGHT +001011 011001 +#1101101 0000111 +#1110 1111 +#0101 0000 +#111111 111111 +#101110 110111 +#111011 100011 +#00011111 01010101 +#11010111 01010101 +#01010101 11010111 +#01110111 00110011 +#00000000 01110111 +#0101010101 0101010101 +#1100111011 1001110000 +#1001101110 0101111010 +#010101010101 010101010101 +#001111100111 000000000000 +#101010101010 101010101010 +#111001110000 000011111111 diff --git a/rubric.pdf b/rubric.pdf new file mode 100644 index 0000000000000000000000000000000000000000..466181cd6d1217db31be349570c4f96118425063 GIT binary patch literal 50314 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 literal 0 HcmV?d00001