From 2f34961c99ae7f149acbeb75b6eca4bdc7da2350 Mon Sep 17 00:00:00 2001 From: Mohammadreza Judaki Date: Sat, 25 Jan 2025 03:04:33 +0330 Subject: [PATCH 1/4] do Binary Multiplier --- Fixed_Point_Unit.v | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Fixed_Point_Unit.v b/Fixed_Point_Unit.v index c663f5d..faf819d 100644 --- a/Fixed_Point_Unit.v +++ b/Fixed_Point_Unit.v @@ -245,9 +245,15 @@ module Multiplier output reg [15 : 0] product ); - + integer i; always @(*) begin - product <= operand_1 * operand_2; + product = 16'b0; + for (i = 0 ; i < 8 ; i++) begin + if (operand_2[i]) + begin + product = product + (operand_1 << i) + end + end end endmodule \ No newline at end of file From 5849713d07290c49e08f3b9777e8590658706ec4 Mon Sep 17 00:00:00 2001 From: Mohammadreza Judaki Date: Sat, 25 Jan 2025 03:13:17 +0330 Subject: [PATCH 2/4] do Array Multiplier --- Fixed_Point_Unit.v | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Fixed_Point_Unit.v b/Fixed_Point_Unit.v index faf819d..2d98e9e 100644 --- a/Fixed_Point_Unit.v +++ b/Fixed_Point_Unit.v @@ -245,15 +245,17 @@ module Multiplier output reg [15 : 0] product ); + reg [15:0] partial_products[7:0] integer i; + integer d; always @(*) begin - product = 16'b0; for (i = 0 ; i < 8 ; i++) begin - if (operand_2[i]) - begin - product = product + (operand_1 << i) - end + partial_products[i] = operand_2[i] ? (operand_1 << i) : 16'b0; + end + + for (d = 0; d < 8; d++) begin + product = product + partial_products[i] end end endmodule \ No newline at end of file From 037e3dd5d5efe155a363fc31a92c433dcc66eabb Mon Sep 17 00:00:00 2001 From: Mohammadreza Judaki Date: Sat, 25 Jan 2025 03:24:41 +0330 Subject: [PATCH 3/4] ultiplier using Shift-Register + Adder --- Fixed_Point_Unit.v | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Fixed_Point_Unit.v b/Fixed_Point_Unit.v index 2d98e9e..5dc56a9 100644 --- a/Fixed_Point_Unit.v +++ b/Fixed_Point_Unit.v @@ -245,17 +245,25 @@ module Multiplier output reg [15 : 0] product ); - reg [15:0] partial_products[7:0] - integer i; - integer d; + reg [7:0] Multiplicand; + reg [7:0] Multiplier; + reg [15:0] accumulator; + reg [3:0] count; + always @(*) begin - for (i = 0 ; i < 8 ; i++) begin - partial_products[i] = operand_2[i] ? (operand_1 << i) : 16'b0; - end - - for (d = 0; d < 8; d++) begin - product = product + partial_products[i] + Multiplicand = operand_1; + Multiplier = operand_2; + accumulator = 16'b0; + count = 4'b1000; + while (count > 0) begin + if (Multiplier[0]) begin + accumulator = accumulator + Multiplicand; + end + Multiplicand = Multiplicand << 1; + Multiplier = Multiplier >> 1; + count = count - 1; end + product = accumulator; end endmodule \ No newline at end of file From add15c0a7f8390f3aba6d4def2b41aa4666cd539 Mon Sep 17 00:00:00 2001 From: Mohammadreza Judaki Date: Sat, 25 Jan 2025 03:33:48 +0330 Subject: [PATCH 4/4] Booth Multiplier --- Fixed_Point_Unit.v | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Fixed_Point_Unit.v b/Fixed_Point_Unit.v index 5dc56a9..4fc7c4c 100644 --- a/Fixed_Point_Unit.v +++ b/Fixed_Point_Unit.v @@ -245,24 +245,22 @@ module Multiplier output reg [15 : 0] product ); - reg [7:0] Multiplicand; - reg [7:0] Multiplier; reg [15:0] accumulator; - reg [3:0] count; + reg [8:0] Multiplier; + integer i; always @(*) + accumulator = 16'b0; + Multiplier = {operand_2, 1'b0}; begin - Multiplicand = operand_1; - Multiplier = operand_2; - accumulator = 16'b0; - count = 4'b1000; - while (count > 0) begin - if (Multiplier[0]) begin - accumulator = accumulator + Multiplicand; + for (i = 0; i < 8 ; i++) begin + if (Multiplier[1:0] == 2'b01) begin + accumulator = accumulator + (operand_1 << i); + end + if (Multiplier[1:0] == 2'b10) begin + accumulator = accumulator - (operand_1 << i); end - Multiplicand = Multiplicand << 1; Multiplier = Multiplier >> 1; - count = count - 1; end product = accumulator; end