`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 11:57:31 07/22/2018 // Design Name: // Module Name: Brent_kung_tree // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module Brent_kung_tree(a,b,s,cout,cin); input [7:0] a,b; output [7:0] s; output cout; input cin; wire c1,c2,c3,c4,c5,c6,c7; wire p0,p1,p2,p3,p4,p5,p6,p7,g0,g1,g2,g3,g4,g5,g6,g7; wire p10,p20,p30,p40,p50,p60,p70,g10,g20,g30,g40,g50,g60,g70; wire p32,p54,p76,p74,g32,g54,g76,g74; node1 n1(a[0],b[0],g0,p0); node1 n2(a[1],b[1],g1,p1); node1 n3(a[2],b[2],g2,p2); node1 n4(a[3],b[3],g3,p3); node1 n5(a[4],b[4],g4,p4); node1 n6(a[5],b[5],g5,p5); node1 n7(a[6],b[6],g6,p6); node1 n8(a[7],b[7],g7,p7); node2 n9(p0,p1,g0,g1,p10,g10); node2 n10(p2,p3,g2,g3,p32,g32); node2 n11(p4,p5,g4,g5,p54,g54); node2 n12(p6,p7,g6,g7,p76,g76); node2 n13(p10,p32,g10,g32,p30,g30); node2 n14(p54,p76,g54,g76,p74,g74); node2 n15(p30,p74,g30,g74,p70,g70); node2 n16(p10,p2,g10,g2,p20,g20); node2 n17(p30,p4,g30,g4,p40,g40); node2 n18(p30,p54,g30,g54,p50,g50); node2 n19(p50,p6,g50,g6,p60,g60); node3 n20(p0,g0,cin,c1,s[0]); node3 n21(p1,g10,c1,c2,s[1]); node3 n22(p2,g20,c2,c3,s[2]); node3 n23(p3,g30,c3,c4,s[3]); node3 n24(p4,g40,c4,c5,s[4]); node3 n25(p5,g50,c5,c6,s[5]); node3 n26(p6,g60,c6,c7,s[6]); node3 n27(p7,g70,c7,cout,s[7]); endmodule module node1( input a,b, output g,p ); assign p = a^b; assign g = a&b; endmodule module node2(p0,p1,g0,g1,p10,g10 ); input p1,p0,g0,g1; output p10,g10; assign p10 = p1 & p0; assign g10 = g1 | (p1 & g0); endmodule module node3(p,g,cin,cout,sum ); input p,g,cin; output cout,sum; assign cout = g | (g & cin); assign sum = p ^ cin; endmodule