6位补码阵列乘法器运算电路设计
在vivado平台上用Verilog HDL语言编程
请问为什么我这个生成不了bit文件啊
module board (
input [5:0] a, // 6-bit multiplier
input [5:0] b, // 6-bit multiplicand
output [11:0] product // 12-bit product
);
// 实例化6位补码阵列乘法器
array_multiplier_6bit multiplier (
.a(a),
.b(b),
.product(product)
);
endmodule
module array_multiplier_6bit (
input [5:0] a, // 6-bit multiplier
input [5:0] b, // 6-bit multiplicand
output reg [11:0] product // 12-bit product
);
wire [11:0] a_ext = { {6{a[5]}}, a }; // 符号扩展的乘数
wire [11:0] b_ext = { {6{b[5]}}, b }; // 符号扩展的被乘数
reg [11:0] partial_products [5:0]; // 部分积
integer i, j;
// 生成部分积
always @* begin
for (i = 0; i < 6; i = i + 1) begin
partial_products[i] = b_ext[i] ? (a_ext << i) : 12'b0;
end
end
// 对部分积求和
reg [11:0] sum;
always @* begin
sum = 12'b0;
for (j = 0; j < 6; j = j + 1) begin
sum = sum + partial_products[j];
end
end
// 输出最终乘积
always @* begin
product = sum;
end
endmodule
`timescale 1ns / 1ps
module testbench;
// 输入
reg [5:0] a;
reg [5:0] b;
// 输出
wire [11:0] product;
// 实例化board模块
board uut (
.a(a),
.b(b),
.product(product)
);
initial begin
// 初始化信号
$monitor("Time = %0d : a = %d, b = %d, product = %d", $time, a, b, product);
// 测试用例1: 2 * 3
a = 6'b000010; // 2
b = 6'b000011; // 3
#10;
// 测试用例2: -2 * 3
a = 6'b111110; // -2
b = 6'b000011; // 3
#10;
// 测试用例3: 4 * -3
a = 6'b000100; // 4
b = 6'b111101; // -3
#10;
// 测试用例4: -4 * -3
a = 6'b111100; // -4
b = 6'b111101; // -3
#10;
// 测试用例5: -1 * -1
a = 6'b111111; // -1
b = 6'b111111; // -1
#10;
// 测试用例6: 1 * 1
a = 6'b000001; // 1
b = 6'b000001; // 1
#10;
// 结束仿真
$stop;
end
endmodule