Booth algorithm is a multiplication operation that multiplies two numbers in two complement notation
The Booth multiplier has been widely used for high performance signed multiplication by encoding and thereby reducing the number of partial products
May I know how to modify my Verilog coding as below because get the error message:
Port size (12 or 12) does not match connection size (6)
module alu(out, in1, in2);
input [5:0] in1;
input [5:0] in2;
output [11:0] out;
assign out = in1 + in2;
endmodule
module booth(out, in1, in2, clk, start);
parameter width = 6;
input clk, start;
input [5:0] in1; //multiplicand
input [5:0] in2; //multiplier
output [11:0] out; //product
reg [5:0] A, Q, M;
reg Q_1;
reg count;
wire[5:0] sum, difference;
always @(posedge clk)
begin
if (start) begin
A <= 6'b0;
M <= in1;
Q <= in2;
Q_1 <= 1'b0;
count <= 2'b0;
end
else begin
case ({Q[0], Q_1})
2'b0_1: {A, Q, Q_1} <= {sum[5], sum, Q};
2'b1_0: {A, Q, Q_1} <= {difference[5], difference, Q};
default: {A, Q, Q_1} <= {A[5], A, Q};
endcase
count <= count + 1'b1;
end
end
alu adder (sum, A, M);
alu subtracter (difference, A, ~M);
assign out = {A, Q};
endmodule
`timescale 1ns / 10ps
`define CYCLE 30
module booth_tb;
parameter width = 6;
wire [2*width-1:0] out;
reg [width-1:0] in1;
reg [width-1:0] in2;
reg clk, start;
integer num = 1;
integer i;
integer j;
integer ans;
integer err = 0;
booth booth(.out(out), .in1(in1), .in2(in2), .clk, .start);
initial begin
for(i = (-(1<<width-1)+1); i < (1<<width-1); i = i+1) begin
for(j = (-(1<<width-1)); j < (1<<width-1); j = j+1) begin
in1 = i[width-1:0];
in2 = j[width-1:0];
#`CYCLE;
ans = i * j;
if(out == ans[2*width-1:0])
$display("%d data is correct", num);
else begin
$display("%d data is error %b, correct is %b", num, out, ans[2*width-1:0]);
err = err + 1;
end
num = num + 1;
end
end
if(err == 0) begin
$display("-------------------PASS-------------------");
$display("All data have been generated successfully!");
end else begin
$display("-------------------ERROR-------------------");
$display("There are %d errors!", err);
end
#10 $finish;
end
endmodule