You are on page 1of 2

module pipeline(x,y,clk,rst,out);

input [3:0]x;
input [3:0]y;
input clk;
input rst;
output [4:0]out;
wire Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21;
wire cin1,cout1,cout2,cout3,cout4;
assign cin1=0;

add a1(x[0],y[0],sum1,cin1,cout1);
DFF d1(sum1,clk,rst,Q1);
DFF d2(Q1,clk,rst,Q2);
DFF d3(Q2,clk,rst,Q3);

DFF d4(cout1,clk,rst,Q4);
DFF d5(x[1],clk,rst,Q5);
DFF d6(y[1],clk,rst,Q6);
add a2(Q5,Q6,sum2,Q4,cout2);
DFF d7(sum2,clk,rst,Q7);
DFF d8(Q7,clk,rst,Q8);

DFF d9(cout2,clk,rst,Q9);
DFF d10(x[2],clk,rst,Q10);
DFF d11(y[2],clk,rst,Q11);
DFF d12(Q10,clk,rst,Q12);
DFF d13(Q11,clk,rst,Q13);
add a3(Q10,Q11,sum3,Q9,cout3);
DFF d14(sum3,clk,rst,Q14);

DFF d15(cout3,clk,rst,Q15);
DFF d16(x[3],clk,rst,Q16);
DFF d17(y[3],clk,rst,Q17);
DFF d18(Q16,clk,rst,Q18);
DFF d19(Q17,clk,rst,Q19);
DFF d20(Q18,clk,rst,Q20);
DFF d21(Q19,clk,rst,Q21);
add a4(Q20,Q21,sum4,Q15,cout4);

assign out[0]=Q3;
assign out[1]=Q8;
assign out[2]=Q14;
assign out[3]=sum4;
assign out[4]=cout4;

endmodule

module DFF(D,clk,rst,Q);
input D;
input clk;
input rst;
output reg Q;

always@(posedge clk or negedge rst)


begin
if(~rst)
Q=1'b0;
else
Q=D;
end
endmodule

module add(a, b, sum,cin,cout);


input a;
input b;
input cin;
output sum;
output cout;
wire c1;

assign sum=a^b^cin;
assign c1 = (a&b)|(a^b)&cin;
assign cout=c1;

endmodule

You might also like