1、问题
Verilog实例化实现多个级联的BCD加法器
题目链接:Bcdadd100
对于大量的实例化,使用实例数组或generate语句
2、使用实例数组的方式
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
reg [99:0] cout1;
bcd_fadd inst[99:0](
.a(a[399:0]),
.b(b[399:0]),
.cin({cout1[98:0], cin}),
.cout(cout1[99:0]),
.sum(sum[399:0])
);
assign cout = cout1[99];
endmodule
3、使用generate语句
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
reg [100:0] cin1;
always @(*)begin
cin1[0] = cin;
cout = cin1[100];
end
genvar i;
generate
for (i = 0; i < 100; i = i +1)begin:genblock //注意:需要加一个新的模块名
bcd_fadd inst(
.a(a[i*4+3:i*4]),
.b(b[i*4+3:i*4]),
.cin(cin1[i]),
.cout(cin1[i+1]),
.sum(sum[i*4+3:i*4])
);
end
endgenerate
endmodule