Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Verilog by Eugene Saun ( 15 years ago )
`timescale 1ns / 1ns
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    19:11:20 01/14/2011 
// Design Name: 
// Module Name:    BKPPT 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////

module black_cell(g1, p1, g2, p2, g12, p12);

input g1, p1, g2, p2;
output g12, p12;

assign
 g12 = g1|p1&g2;,
 p12 = p1&p2;

endmodule

module gray_cell(g1, p1, g2, g12);

input g1, p1, g2;
output g12;

assign g12 = g1|p1&g2;

endmodule

module BKPPT(cin, a, b, s, cout);

input cin;
input [31:0] a, b;

wire [31:0] p, g;
wire g21, g43, g65, g87, g109, g1211, g1413, g1615, g1817, g2019, g2221, g2423, g2625, g2827, g3029,
  p21, p43, p65, p87, p109, p1211, p1413, p1615, p1817, p2019, p2221, p2423, p2625, p2827, p3029,
  g63, g107, g1411, g1815, g2219, g2623, g3027,
  p63, p107, p1411, p1815, p2219, p2623, p3027,
  g147, g2215, g3023,
  p147, p2215, p3023,
  g3015,
  p3015,
  g0_1, g1_1, g2_1, g3_1, g4_1, g5_1, g6_1, g7_1, g8_1, g9_1, g10_1, g11_1, g12_1, g13_1, g14_1,
  g15_1, g16_1, g17_1, g18_1, g19_1, g20_1, g21_1, g22_1, g23_1, g24_1, g25_1, g26_1, g27_1, g28_1, g30_1;

output [31:0] s;
output cout;
    
assign
 p[0] = a[0] ^ b[0],
 p[1] = a[1] ^ b[1],
 p[2] = a[2] ^ b[2],
 p[3] = a[3] ^ b[3],
 p[4] = a[4] ^ b[4],
 p[5] = a[5] ^ b[5],
 p[6] = a[6] ^ b[6],
 p[7] = a[7] ^ b[7],
 p[8] = a[8] ^ b[8],
 p[9] = a[9] ^ b[9],
 p[10] = a[10] ^ b[10],
 p[11] = a[11] ^ b[11],
 p[12] = a[12] ^ b[12],
 p[13] = a[13] ^ b[13],
 p[14] = a[14] ^ b[14],
 p[15] = a[15] ^ b[15],
 p[16] = a[16] ^ b[16],
 p[17] = a[17] ^ b[17],
 p[18] = a[18] ^ b[18],
 p[19] = a[19] ^ b[19],
 p[20] = a[20] ^ b[20],
 p[21] = a[21] ^ b[21],
 p[22] = a[22] ^ b[22],
 p[23] = a[23] ^ b[23],
 p[24] = a[24] ^ b[24],
 p[25] = a[25] ^ b[25],
 p[26] = a[26] ^ b[26],
 p[27] = a[27] ^ b[27],
 p[28] = a[28] ^ b[28],
 p[29] = a[29] ^ b[29],
 p[30] = a[30] ^ b[30],
 p[31] = a[31] ^ b[31],
 g[0] = a[0] & b[0],
 g[1] = a[1] & b[1],
 g[2] = a[2] & b[2],
 g[3] = a[3] & b[3],
 g[4] = a[4] & b[4],
 g[5] = a[5] & b[5],
 g[6] = a[6] & b[6],
 g[7] = a[7] & b[7],
 g[8] = a[8] & b[8],
 g[9] = a[9] & b[9],
 g[10] = a[10] & b[10],
 g[11] = a[11] & b[11],
 g[12] = a[12] & b[12],
 g[13] = a[13] & b[13],
 g[14] = a[14] & b[14],
 g[15] = a[15] & b[15],
 g[16] = a[16] & b[16],
 g[17] = a[17] & b[17],
 g[18] = a[18] & b[18],
 g[19] = a[19] & b[19],
 g[20] = a[20] & b[20],
 g[21] = a[21] & b[21],
 g[22] = a[22] & b[22],
 g[23] = a[23] & b[23],
 g[24] = a[24] & b[24],
 g[25] = a[25] & b[25],
 g[26] = a[26] & b[26],
 g[27] = a[27] & b[27],
 g[28] = a[28] & b[28],
 g[29] = a[29] & b[29],
 g[30] = a[30] & b[30],
 g[31] = a[31] & b[31];
 
//////////////////////////////////////////////////////////////////////////////////
// L = log_2 (n);
// for (llevel = 1; llevel <= L; llevel = llevel + 1) begin
//  u = 2**llevel;
//  v = 2**(llevel - 1);
//  for (i = u - 2; i < n - 1; i += u) begin
//   GPi:i-u+1 = GPi:i-v+1 o GPi-v:i-u+1;
//  end
// end
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
// llevel = 1;
// u = 2; v = 1;
// GP0:-1 = GP0:0 o GP-1:-1;
// GP2:1 = GP2:2 o GP1:1;
// GP4:3 = GP4:4 o GP3:3;
// GP6:5 = GP6:6 o GP5:5;
// GP8:7 = GP8:8 o GP7:7;
// GP10:9 = GP10:10 o GP9:9;
// GP12:11 = GP12:12 o GP11:11;
// GP14:13 = GP14:14 o GP13:13;
// GP16:15 = GP16:16 o GP15:15;
// GP18:17 = GP18:18 o GP17:17;
// GP20:19 = GP20:20 o GP19:19;
// GP22:21 = GP22:22 o GP21:21;
// GP24:23 = GP24:24 o GP23:23;
// GP26:25 = GP26:26 o GP25:25;
// GP28:27 = GP28:28 o GP27:27;
// GP30:29 = GP30:30 o GP29:29;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell10(g[0],  p[0],  cin,   g0_1);
black_cell cell11(g[2],  p[2],  g[1],  p[1],  g21,   p21);
black_cell cell12(g[4],  p[4],  g[3],  p[3],  g43,   p43);
black_cell cell13(g[6],  p[6],  g[5],  p[5],  g65,   p65);
black_cell cell14(g[8],  p[8],  g[7],  p[7],  g87,   p87);
black_cell cell15(g[10], p[10], g[9],  p[9],  g109,  p109);
black_cell cell16(g[12], p[12], g[11], p[11], g1211, p1211);
black_cell cell17(g[14], p[14], g[13], p[13], g1413, p1413);
black_cell cell18(g[16], p[16], g[15], p[15], g1615, p1615);
black_cell cell19(g[18], p[18], g[17], p[17], g1817, p1817);
black_cell cell1a(g[20], p[20], g[19], p[19], g2019, p2019);
black_cell cell1b(g[22], p[22], g[21], p[21], g2221, p2221);
black_cell cell1c(g[24], p[24], g[23], p[23], g2423, p2423);
black_cell cell1d(g[26], p[26], g[25], p[25], g2625, p2625);
black_cell cell1e(g[28], p[28], g[27], p[27], g2827, p2827);
black_cell cell1f(g[30], p[30], g[29], p[29], g3029, p3029);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 2;
// u = 4; v = 2;
// GP2:-1 = GP2:1 o GP0:-1;
// GP6:3 = GP6:5 o GP4:3;
// GP10:7 = GP10:9 o GP8:7;
// GP14:11 = GP14:13 o GP12:11;
// GP18:15 = GP18:17 o GP16:15;
// GP22:19 = GP22:21 o GP20:19;
// GP26:23 = GP26:25 o GP24:23;
// GP28:25 = GP28:27 o GP26:25;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell20(g21,   p21,   g0_1,  g2_1);
black_cell cell21(g65,   p65,   g43,   p43,   g63,   p63);
black_cell cell22(g109,  p109,  g87,   p87,   g107,  p107);
black_cell cell23(g1413, p1413, g1211, p1211, g1411, p1411);
black_cell cell24(g1817, p1817, g1615, p1615, g1815, p1815);
black_cell cell25(g2221, p2221, g2019, p2019, g2219, p2219);
black_cell cell26(g2625, p2625, g2423, p2423, g2623, p2623);
black_cell cell27(g3029, p3029, g2827, p2827, g3027, p3027);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 3;
// u = 8; v = 4;
// GP6:-1 = GP6:3 o GP2:-1;
// GP14:7 = GP14:11 o GP10:7;
// GP22:15 = GP22:19 o GP18:15;
// GP30:23 = GP30:27 o GP26:23;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell30(g63,   p63,   g2_1,  g6_1);
black_cell cell31(g1411, p1411, g107,  p107,  g147,  p147);
black_cell cell32(g2219, p2219, g1815, p1815, g2215, p2215);
black_cell cell33(g3027, p3027, g2623, p2623, g3023, p3023);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 4;
// u = 16; v = 8;
// GP14:-1 = GP14:7 o GP6:-1;
// GP30:15 = GP30:23 o GP22:15;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell40(g147,  p147,  g6_1,  g14_1);
black_cell cell41(g3023, p3023, g2215, p2215, g3015,  p3015);
 
//////////////////////////////////////////////////////////////////////////////////
// llevel = 5;
// u = 32; v = 16;
// G30:-1 = GP30:15 o GP14:-1;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell50(g3015, p3015, g14_1, g30_1);

//////////////////////////////////////////////////////////////////////////////////
// for (llevel = 4; llevel >= 1; llevel = llevel - 1) begin
//  u = 2**llevel;
//  v = 2**(llevel - 1);
//  for (i = u + v - 2; i < n - 1; i += u) begin
//   GPi:-1 = GPi:i-v+1 o GPi-v:-1;
//  end
// end
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
// llevel = 4;
// u = 16; v = 8;
// GP22:-1 = GP22:15 o GP14:-1;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell60(g2215, p2215, g14_1, g22_1);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 3;
// u = 8; v = 4;
// GP10:-1 = GP10:7 o GP6:-1;
// GP18:-1 = GP18:15 o GP14:-1;
// GP26:-1 = GP26:23 o GP22:-1;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell70(g107,  p107,  g6_1,  g10_1);
gray_cell  cell71(g1815, p1815, g14_1, g18_1);
gray_cell  cell72(g2623, p2623, g22_1, g26_1);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 2;
// u = 4; v = 2;
// GP4:-1 = GP4:3 o GP2:-1;
// GP8:-1 = GP8:7 o GP6:-1;
// GP12:-1 = GP12:11 o GP10:-1;
// GP16:-1 = GP16:15 o GP14:-1;
// GP20:-1 = GP20:19 o GP18:-1;
// GP24:-1 = GP24:23 o GP22:-1;
// GP28:-1 = GP28:27 o GP26:-1;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell80(g43,   p43,   g2_1,  g4_1);
gray_cell  cell81(g87,   p87,   g6_1,  g8_1);
gray_cell  cell82(g1211, p1211, g10_1, g12_1);
gray_cell  cell83(g1615, p1615, g14_1, g16_1);
gray_cell  cell84(g2019, p2019, g18_1, g20_1);
gray_cell  cell85(g2423, p2423, g22_1, g24_1);
gray_cell  cell86(g2827, p2827, g26_1, g28_1);

//////////////////////////////////////////////////////////////////////////////////
// llevel = 1;
// u = 2; v = 1;
// GP1:-1 = GP1:1 o GP0:-1;
// GP3:-1 = GP3:3 o GP2:-1;
// GP5:-1 = GP5:5 o GP4:-1;
// GP7:-1 = GP7:7 o GP6:-1;
// GP9:-1 = GP9:9 o GP8:-1;
// GP11:-1 = GP11:11 o GP10:-1;
// GP13:-1 = GP13:13 o GP12:-1;
// GP15:-1 = GP15:15 o GP14:-1;
// GP17:-1 = GP17:17 o GP16:-1;
// GP19:-1 = GP19:19 o GP18:-1;
// GP21:-1 = GP21:21 o GP20:-1;
// GP23:-1 = GP23:23 o GP22:-1;
// GP25:-1 = GP25:25 o GP24:-1;
// GP27:-1 = GP27:27 o GP26:-1;
// GP29:-1 = GP29:29 o GP28:-1;
//////////////////////////////////////////////////////////////////////////////////

gray_cell  cell90(g[1],  p[1],  g0_1,  g1_1);
gray_cell  cell91(g[3],  p[3],  g2_1,  g3_1);
gray_cell  cell92(g[5],  p[5],  g4_1,  g5_1);
gray_cell  cell93(g[7],  p[7],  g6_1,  g7_1);
gray_cell  cell94(g[9],  p[9],  g8_1,  g9_1);
gray_cell  cell95(g[11], p[11], g10_1, g11_1);
gray_cell  cell96(g[13], p[13], g12_1, g13_1);
gray_cell  cell97(g[15], p[15], g14_1, g15_1);
gray_cell  cell98(g[17], p[17], g16_1, g17_1);
gray_cell  cell99(g[19], p[19], g18_1, g19_1);
gray_cell  cell9a(g[21], p[21], g20_1, g21_1);
gray_cell  cell9b(g[23], p[23], g22_1, g23_1);
gray_cell  cell9c(g[25], p[25], g24_1, g25_1);
gray_cell  cell9d(g[27], p[27], g26_1, g27_1);
gray_cell  cell9e(g[29], p[29], g28_1, g29_1);

assign
 cout = g[31]|p[31]&g30;_1,
 s[31] = p[31]^g30_1,
 s[30] = p[30]^g29_1,
 s[29] = p[29]^g28_1,
 s[28] = p[28]^g27_1,
 s[27] = p[27]^g26_1,
 s[26] = p[26]^g25_1,
 s[25] = p[25]^g24_1,
 s[24] = p[24]^g23_1,
 s[23] = p[23]^g22_1,
 s[22] = p[22]^g21_1,
 s[21] = p[21]^g20_1,
 s[20] = p[20]^g19_1,
 s[19] = p[19]^g18_1,
 s[18] = p[18]^g17_1,
 s[17] = p[17]^g16_1,
 s[16] = p[16]^g15_1,
 s[15] = p[15]^g14_1,
 s[14] = p[14]^g13_1,
 s[13] = p[13]^g12_1,
 s[12] = p[12]^g11_1,
 s[11] = p[11]^g10_1,
 s[10] = p[10]^g9_1,
 s[9] = p[9]^g8_1,
 s[8] = p[8]^g7_1,
 s[7] = p[7]^g6_1,
 s[6] = p[6]^g5_1,
 s[5] = p[5]^g4_1,
 s[4] = p[4]^g3_1,
 s[3] = p[3]^g2_1,
 s[2] = p[2]^g1_1,
 s[1] = p[1]^g0_1,
 s[0] = p[0]^cin;

endmodule

 

Revise this Paste

Your Name: Code Language: