Create a 100-bit binary adder. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out.
译:
创建一个100位二进制加法器。加法器将两个100位的数字和一个进位相加,产生一个100位的和并执行。
个人解法:
module top_module(
input [99:0] a, b,
input cin,
output cout,
output [99:0] sum );
wire [99:0]cout_buf;
genvar i;
generate
add(a[0],b[0],cin,cout_buf[0],sum[0]);
for(i=1;i<100;i++)begin: add_100
add(a[i],b[i],cout_buf[i-1],cout_buf[i],sum[i]);
end:add_100
assign cout = cout_buf[99];
endgenerate
endmodule
module add(input a,input b,input cin,output cout,output sum);
assign {cout,sum}=a+b+cin;
endmodule
官方解法:
module top_module (
input [99:0] a,
input [99:0] b,
input cin,
output cout,
output [99:0] sum
);
// The concatenation {cout, sum} is a 101-bit vector.
assign {cout, sum} = a+b+cin;
endmodule
分析:
脑子没转过来 还是用了之前实例化一百遍;直接计算,简直不要太简单,但是应该仅限于cout 为一位的时候吧,这个以后再分析吧;
运行结果: