OpenCores
URL https://opencores.org/ocsvn/tiny_tate_bilinear_pairing/tiny_tate_bilinear_pairing/trunk

Subversion Repositories tiny_tate_bilinear_pairing

[/] [tiny_tate_bilinear_pairing/] [trunk/] [group_size_is_151_bits/] [rtl/] [cubic.v] - Rev 15

Compare with Previous | Blame | View Log

/*
 * Copyright 2012, Homer Hsing <homer.hsing@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
/* v0(a)+v1(a)+v2(a) == a^3 in GF(3^m) */
 
/* c == v0(a) */
module v0(a, c);
    input [193:0] a;
    output [193:0] c;
    assign c[1:0] = a[1:0];
    assign c[3:2] = a[131:130];
    assign c[5:4] = a[67:66];
    assign c[7:6] = a[3:2];
    assign c[9:8] = a[133:132];
    assign c[11:10] = a[69:68];
    assign c[13:12] = a[5:4];
    assign c[15:14] = a[135:134];
    assign c[17:16] = a[71:70];
    assign c[19:18] = a[193:192];
    assign c[21:20] = {a[128], a[129]};
    assign c[23:22] = a[73:72];
    assign c[25:24] = {a[178], a[179]};
    assign c[27:26] = a[131:130];
    assign c[29:28] = {a[66], a[67]};
    assign c[31:30] = {a[180], a[181]};
    assign c[33:32] = a[133:132];
    assign c[35:34] = {a[68], a[69]};
    assign c[37:36] = {a[182], a[183]};
    assign c[39:38] = a[127:126];
    assign c[41:40] = {a[70], a[71]};
    assign c[43:42] = {a[184], a[185]};
    assign c[45:44] = a[145:144];
    assign c[47:46] = a[81:80];
    assign c[49:48] = a[17:16];
    assign c[51:50] = a[147:146];
    assign c[53:52] = a[83:82];
    assign c[55:54] = a[19:18];
    assign c[57:56] = a[149:148];
    assign c[59:58] = a[85:84];
    assign c[61:60] = a[21:20];
    assign c[63:62] = a[135:134];
    assign c[65:64] = a[87:86];
    assign c[67:66] = {a[192], a[193]};
    assign c[69:68] = a[145:144];
    assign c[71:70] = {a[80], a[81]};
    assign c[73:72] = a[25:24];
    assign c[75:74] = a[147:146];
    assign c[77:76] = {a[82], a[83]};
    assign c[79:78] = a[27:26];
    assign c[81:80] = a[149:148];
    assign c[83:82] = {a[84], a[85]};
    assign c[85:84] = a[29:28];
    assign c[87:86] = a[143:142];
    assign c[89:88] = {a[86], a[87]};
    assign c[91:90] = a[31:30];
    assign c[93:92] = a[161:160];
    assign c[95:94] = a[97:96];
    assign c[97:96] = a[33:32];
    assign c[99:98] = a[163:162];
    assign c[101:100] = a[99:98];
    assign c[103:102] = a[35:34];
    assign c[105:104] = a[165:164];
    assign c[107:106] = a[101:100];
    assign c[109:108] = a[37:36];
    assign c[111:110] = a[151:150];
    assign c[113:112] = a[103:102];
    assign c[115:114] = a[39:38];
    assign c[117:116] = a[161:160];
    assign c[119:118] = {a[96], a[97]};
    assign c[121:120] = a[41:40];
    assign c[123:122] = a[163:162];
    assign c[125:124] = {a[98], a[99]};
    assign c[127:126] = a[43:42];
    assign c[129:128] = a[165:164];
    assign c[131:130] = {a[100], a[101]};
    assign c[133:132] = a[45:44];
    assign c[135:134] = a[159:158];
    assign c[137:136] = {a[102], a[103]};
    assign c[139:138] = a[47:46];
    assign c[141:140] = a[177:176];
    assign c[143:142] = a[113:112];
    assign c[145:144] = a[49:48];
    assign c[147:146] = a[179:178];
    assign c[149:148] = a[115:114];
    assign c[151:150] = a[51:50];
    assign c[153:152] = a[181:180];
    assign c[155:154] = a[117:116];
    assign c[157:156] = a[53:52];
    assign c[159:158] = a[167:166];
    assign c[161:160] = a[119:118];
    assign c[163:162] = a[55:54];
    assign c[165:164] = a[177:176];
    assign c[167:166] = {a[112], a[113]};
    assign c[169:168] = a[57:56];
    assign c[171:170] = a[179:178];
    assign c[173:172] = {a[114], a[115]};
    assign c[175:174] = a[59:58];
    assign c[177:176] = a[181:180];
    assign c[179:178] = {a[116], a[117]};
    assign c[181:180] = a[61:60];
    assign c[183:182] = a[175:174];
    assign c[185:184] = {a[118], a[119]};
    assign c[187:186] = a[63:62];
    assign c[189:188] = a[193:192];
    assign c[191:190] = a[129:128];
    assign c[193:192] = a[65:64];
endmodule
/* c == v1(a) */
module v1(a, c);
    input [193:0] a;
    output [193:0] c;
    assign c[1:0] = a[179:178];
    assign c[3:2] = {a[122], a[123]};
    assign c[5:4] = 0;
    assign c[7:6] = a[181:180];
    assign c[9:8] = {a[124], a[125]};
    assign c[11:10] = 0;
    assign c[13:12] = a[183:182];
    assign c[15:14] = {a[126], a[127]};
    assign c[17:16] = 0;
    assign c[19:18] = a[7:6];
    assign c[21:20] = a[137:136];
    assign c[23:22] = 0;
    assign c[25:24] = a[9:8];
    assign c[27:26] = a[139:138];
    assign c[29:28] = a[75:74];
    assign c[31:30] = a[11:10];
    assign c[33:32] = a[125:124];
    assign c[35:34] = a[77:76];
    assign c[37:36] = a[13:12];
    assign c[39:38] = a[135:134];
    assign c[41:40] = a[79:78];
    assign c[43:42] = a[15:14];
    assign c[45:44] = a[129:128];
    assign c[47:46] = {a[72], a[73]};
    assign c[49:48] = {a[186], a[187]};
    assign c[51:50] = a[139:138];
    assign c[53:52] = {a[74], a[75]};
    assign c[55:54] = {a[188], a[189]};
    assign c[57:56] = a[133:132];
    assign c[59:58] = {a[76], a[77]};
    assign c[61:60] = {a[190], a[191]};
    assign c[63:62] = a[151:150];
    assign c[65:64] = {a[78], a[79]};
    assign c[67:66] = a[23:22];
    assign c[69:68] = a[137:136];
    assign c[71:70] = a[89:88];
    assign c[73:72] = 0;
    assign c[75:74] = a[155:154];
    assign c[77:76] = a[91:90];
    assign c[79:78] = 0;
    assign c[81:80] = a[141:140];
    assign c[83:82] = a[93:92];
    assign c[85:84] = 0;
    assign c[87:86] = a[151:150];
    assign c[89:88] = a[95:94];
    assign c[91:90] = 0;
    assign c[93:92] = a[145:144];
    assign c[95:94] = {a[88], a[89]};
    assign c[97:96] = 0;
    assign c[99:98] = a[155:154];
    assign c[101:100] = {a[90], a[91]};
    assign c[103:102] = 0;
    assign c[105:104] = a[149:148];
    assign c[107:106] = {a[92], a[93]};
    assign c[109:108] = 0;
    assign c[111:110] = a[167:166];
    assign c[113:112] = {a[94], a[95]};
    assign c[115:114] = 0;
    assign c[117:116] = a[153:152];
    assign c[119:118] = a[105:104];
    assign c[121:120] = 0;
    assign c[123:122] = a[171:170];
    assign c[125:124] = a[107:106];
    assign c[127:126] = 0;
    assign c[129:128] = a[157:156];
    assign c[131:130] = a[109:108];
    assign c[133:132] = 0;
    assign c[135:134] = a[167:166];
    assign c[137:136] = a[111:110];
    assign c[139:138] = 0;
    assign c[141:140] = a[161:160];
    assign c[143:142] = {a[104], a[105]};
    assign c[145:144] = 0;
    assign c[147:146] = a[171:170];
    assign c[149:148] = {a[106], a[107]};
    assign c[151:150] = 0;
    assign c[153:152] = a[165:164];
    assign c[155:154] = {a[108], a[109]};
    assign c[157:156] = 0;
    assign c[159:158] = a[183:182];
    assign c[161:160] = {a[110], a[111]};
    assign c[163:162] = 0;
    assign c[165:164] = a[169:168];
    assign c[167:166] = a[121:120];
    assign c[169:168] = 0;
    assign c[171:170] = a[187:186];
    assign c[173:172] = a[123:122];
    assign c[175:174] = 0;
    assign c[177:176] = a[173:172];
    assign c[179:178] = a[125:124];
    assign c[181:180] = 0;
    assign c[183:182] = a[183:182];
    assign c[185:184] = a[127:126];
    assign c[187:186] = 0;
    assign c[189:188] = a[177:176];
    assign c[191:190] = {a[120], a[121]};
    assign c[193:192] = 0;
endmodule
/* c == v2(a) */
module v2(a, c);
    input [193:0] a;
    output [193:0] c;
    assign c[1:0] = a[187:186];
    assign c[3:2] = 0;
    assign c[5:4] = 0;
    assign c[7:6] = a[189:188];
    assign c[9:8] = 0;
    assign c[11:10] = 0;
    assign c[13:12] = a[191:190];
    assign c[15:14] = 0;
    assign c[17:16] = 0;
    assign c[19:18] = a[185:184];
    assign c[21:20] = 0;
    assign c[23:22] = 0;
    assign c[25:24] = 0;
    assign c[27:26] = a[123:122];
    assign c[29:28] = 0;
    assign c[31:30] = 0;
    assign c[33:32] = a[141:140];
    assign c[35:34] = 0;
    assign c[37:36] = 0;
    assign c[39:38] = a[143:142];
    assign c[41:40] = 0;
    assign c[43:42] = 0;
    assign c[45:44] = a[137:136];
    assign c[47:46] = 0;
    assign c[49:48] = 0;
    assign c[51:50] = a[131:130];
    assign c[53:52] = 0;
    assign c[55:54] = 0;
    assign c[57:56] = a[141:140];
    assign c[59:58] = 0;
    assign c[61:60] = 0;
    assign c[63:62] = a[143:142];
    assign c[65:64] = 0;
    assign c[67:66] = 0;
    assign c[69:68] = a[153:152];
    assign c[71:70] = 0;
    assign c[73:72] = 0;
    assign c[75:74] = a[139:138];
    assign c[77:76] = 0;
    assign c[79:78] = 0;
    assign c[81:80] = a[157:156];
    assign c[83:82] = 0;
    assign c[85:84] = 0;
    assign c[87:86] = a[159:158];
    assign c[89:88] = 0;
    assign c[91:90] = 0;
    assign c[93:92] = a[153:152];
    assign c[95:94] = 0;
    assign c[97:96] = 0;
    assign c[99:98] = a[147:146];
    assign c[101:100] = 0;
    assign c[103:102] = 0;
    assign c[105:104] = a[157:156];
    assign c[107:106] = 0;
    assign c[109:108] = 0;
    assign c[111:110] = a[159:158];
    assign c[113:112] = 0;
    assign c[115:114] = 0;
    assign c[117:116] = a[169:168];
    assign c[119:118] = 0;
    assign c[121:120] = 0;
    assign c[123:122] = a[155:154];
    assign c[125:124] = 0;
    assign c[127:126] = 0;
    assign c[129:128] = a[173:172];
    assign c[131:130] = 0;
    assign c[133:132] = 0;
    assign c[135:134] = a[175:174];
    assign c[137:136] = 0;
    assign c[139:138] = 0;
    assign c[141:140] = a[169:168];
    assign c[143:142] = 0;
    assign c[145:144] = 0;
    assign c[147:146] = a[163:162];
    assign c[149:148] = 0;
    assign c[151:150] = 0;
    assign c[153:152] = a[173:172];
    assign c[155:154] = 0;
    assign c[157:156] = 0;
    assign c[159:158] = a[175:174];
    assign c[161:160] = 0;
    assign c[163:162] = 0;
    assign c[165:164] = a[185:184];
    assign c[167:166] = 0;
    assign c[169:168] = 0;
    assign c[171:170] = a[171:170];
    assign c[173:172] = 0;
    assign c[175:174] = 0;
    assign c[177:176] = a[189:188];
    assign c[179:178] = 0;
    assign c[181:180] = 0;
    assign c[183:182] = a[191:190];
    assign c[185:184] = 0;
    assign c[187:186] = 0;
    assign c[189:188] = a[185:184];
    assign c[191:190] = 0;
    assign c[193:192] = 0;
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.