49 lines
1.1 KiB
Verilog
49 lines
1.1 KiB
Verilog
module Half_Adder( output c, s, input a, b );
|
|
xor xor01 (s, a, b);
|
|
and and01 (c, a, b);
|
|
endmodule // Half_Adder
|
|
|
|
module Full_Adder( output c_out, s, input a, b, c_in );
|
|
|
|
wire s_ha1, c_ha1, c_ha2;
|
|
|
|
Half_Adder ha01( c_ha1, s_ha1, a, b );
|
|
Half_Adder ha02( c_ha2, s, s_ha1, c_in );
|
|
or or01 ( c_out, c_ha1, c_ha2 );
|
|
|
|
endmodule // Full_Adder
|
|
|
|
module Full_Adder4( output [4:0] s, input [3:0] a, b, input c_in );
|
|
|
|
wire [4:0] c;
|
|
|
|
Full_Adder adder00 ( c[1], s[0], a[0], b[0], c_in );
|
|
Full_Adder adder01 ( c[2], s[1], a[1], b[1], c[1] );
|
|
Full_Adder adder02 ( c[3], s[2], a[2], b[2], c[2] );
|
|
Full_Adder adder03 ( c[4], s[3], a[3], b[3], c[3] );
|
|
|
|
assign s[4] = c[4];
|
|
|
|
endmodule // Full_Adder4
|
|
|
|
module test_Full_Adder();
|
|
|
|
reg [3:0] a;
|
|
reg [3:0] b;
|
|
wire [4:0] s;
|
|
|
|
Full_Adder4 FA4 ( s, a, b, 0 );
|
|
|
|
initial begin
|
|
$display( " a + b = s" );
|
|
$monitor( "%4d + %4d = %5d", a, b, s );
|
|
a=4'b0000; b=4'b0000;
|
|
#1 a=4'b0000; b=4'b0001;
|
|
#1 a=4'b0001; b=4'b0001;
|
|
#1 a=4'b0011; b=4'b0001;
|
|
#1 a=4'b0111; b=4'b0001;
|
|
#1 a=4'b1111; b=4'b0001;
|
|
end
|
|
|
|
endmodule // test_Full_Adder
|