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