In this exercise, you will create a circuit with two levels of hierarchy. Your top_module will instantiate two copies of add16
(provided), each of which will instantiate 16 copies of add1 (which
you must write). Thus, you must write two modules: top_module and
add1.**
其实只要你写出,顶层调用add16,和add1的实现就行了,无需写add16的实现,如果自己实现了add16,会报错 module “add16” cannot be declared more than once File
正确代码如下
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);//
wire jin[31:0];
wire jinwei;
add16 uu1(a[15:0],b[15:0],1'b0,sum[15:0],jinwei);
add16 uu2(a[31:16],b[31:16],jinwei,sum[31:16]);
endmodule
module add1 ( input a, input b, input cin, output sum, output cout );
// Full adder module here
assign sum = a^b^cin;
assign cout = a&b | a&cin | b&cin;
endmodule
当时自己按照图实现的add16
module add16(input [15:0] a,input [15:0] b,input cin,output[15:0] sum,output cout);
wire [15:0]jin;
add1 u0(a[0],b[0],chu,sum[0],jin[0]);
add1 u1(a[1],b[1],jin[0],sum[1],jin[1]);
add1 u2(a[2],b[2],jin[1],sum[2],jin[2]);
add1 u3(a[3],b[3],jin[2],sum[3],jin[3]);
add1 u4(a[4],b[4],jin[3],sum[4],jin[4]);
add1 u5(a[5],b[5],jin[4],sum[5],jin[5]);
add1 u6(a[6],b[6],jin[5],sum[6],jin[6]);
add1 u7(a[7],b[7],jin[6],sum[7],jin[7]);
add1 u8(a[8],b[8],jin[7],sum[8],jin[8]);
add1 u9(a[9],b[9],jin[8],sum[9],jin[9]);
add1 u10(a[10],b[10],jin[9],sum[10],jin[10]);
add1 u11(a[11],b[11],jin[10],sum[11],jin[11]);
add1 u12(a[12],b[12],jin[11],sum[12],jin[12]);
add1 u13(a[13],b[13],jin[12],sum[13],jin[13]);
add1 u14(a[14],b[14],jin[13],sum[14],jin[14]);
add1 u15(a[15],b[15],jin[14],sum[15],cout);
endmodule