上代码:
module parallel_adder(a,b,cin,s,cout);
parameter N=4;
input wire [N-1:0]a;
input wire [N-1:0]b;
input wire cin;
output wire [N-1:0]s;
output wire cout;
wire [9:0]d;
wire [2:0]c;
wire [3:0]p;
wire [3:0]g;
xor(p[0],a[0],b[0]);
and(g[0],a[0],b[0]);
xor(s[0],p[0],cin);
and(d[0],p[0],cin);
or(c[0],g[0],d[0]);
xor(p[1],a[1],b[1]);
and(g[1],a[1],b[1]);
xor(s[1],p[1],c[0]);
and(d[1],p[1],p[0],cin);
and(d[2],p[1],g[0]);
or(c[1],g[1],d[1],d[2]);
xor(p[2],a[2],b[2]);
and(g[2],a[2],b[2]);
xor(s[2],p[2],c[1]);
and(d[3],p[2],p[1],cin);
and(d[4],p[2],p[1],g[0]);
and(d[5],p[2],g[1]);
or(c[2],g[2],d[3],d[4],d[5]);
xor(p[3],a[3],b[3]);
and(g[3],a[3],b[3]);
xor(s[3],p[3],c[2]);
and(d[6],p[3],p[2],p[1],p[0],cin);
and(d[7],p[3],p[2],p[1],g[0]);
and(d[8],p[3],p[2],g[1]);
and(d[9],p[3],g[2]);
or(cout,g[3],d[6],d[7],d[8],d[9]);
endmodule
测试代码:
`timescale 1ns/100ps
module test_adder();
reg clk_1Hz;
reg [3:0]a,b;
reg cin;
wire [3:0]s;
wire cout;
parallel_adder u0(a,b,cin,s,cout);
always #10 clk_1Hz = ~clk_1Hz;
initial
begin
clk_1Hz=0;
#20;
a=4'b1110;b=4'b1011;cin=1'b0;
#20;
a=4'b1110;b=4'b1011;cin=1'b1;
#20;
a=4'b0111;b=4'b0111;cin=1'b0;
#20;
a=4'b0101;b=4'b0101;cin=1'b1;
#20;
a=4'b0101;b=4'b0111;cin=1'b0;
end
endmodule
仿真波形: