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] - Blame information for rev 15

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 homer.hsin
/*
2 15 homer.hsin
 * Copyright 2012, Homer Hsing <homer.hsing@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 * http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16 2 homer.hsin
 
17
/* v0(a)+v1(a)+v2(a) == a^3 in GF(3^m) */
18
 
19
/* c == v0(a) */
20
module v0(a, c);
21
    input [193:0] a;
22
    output [193:0] c;
23
    assign c[1:0] = a[1:0];
24
    assign c[3:2] = a[131:130];
25
    assign c[5:4] = a[67:66];
26
    assign c[7:6] = a[3:2];
27
    assign c[9:8] = a[133:132];
28
    assign c[11:10] = a[69:68];
29
    assign c[13:12] = a[5:4];
30
    assign c[15:14] = a[135:134];
31
    assign c[17:16] = a[71:70];
32
    assign c[19:18] = a[193:192];
33
    assign c[21:20] = {a[128], a[129]};
34
    assign c[23:22] = a[73:72];
35
    assign c[25:24] = {a[178], a[179]};
36
    assign c[27:26] = a[131:130];
37
    assign c[29:28] = {a[66], a[67]};
38
    assign c[31:30] = {a[180], a[181]};
39
    assign c[33:32] = a[133:132];
40
    assign c[35:34] = {a[68], a[69]};
41
    assign c[37:36] = {a[182], a[183]};
42
    assign c[39:38] = a[127:126];
43
    assign c[41:40] = {a[70], a[71]};
44
    assign c[43:42] = {a[184], a[185]};
45
    assign c[45:44] = a[145:144];
46
    assign c[47:46] = a[81:80];
47
    assign c[49:48] = a[17:16];
48
    assign c[51:50] = a[147:146];
49
    assign c[53:52] = a[83:82];
50
    assign c[55:54] = a[19:18];
51
    assign c[57:56] = a[149:148];
52
    assign c[59:58] = a[85:84];
53
    assign c[61:60] = a[21:20];
54
    assign c[63:62] = a[135:134];
55
    assign c[65:64] = a[87:86];
56
    assign c[67:66] = {a[192], a[193]};
57
    assign c[69:68] = a[145:144];
58
    assign c[71:70] = {a[80], a[81]};
59
    assign c[73:72] = a[25:24];
60
    assign c[75:74] = a[147:146];
61
    assign c[77:76] = {a[82], a[83]};
62
    assign c[79:78] = a[27:26];
63
    assign c[81:80] = a[149:148];
64
    assign c[83:82] = {a[84], a[85]};
65
    assign c[85:84] = a[29:28];
66
    assign c[87:86] = a[143:142];
67
    assign c[89:88] = {a[86], a[87]};
68
    assign c[91:90] = a[31:30];
69
    assign c[93:92] = a[161:160];
70
    assign c[95:94] = a[97:96];
71
    assign c[97:96] = a[33:32];
72
    assign c[99:98] = a[163:162];
73
    assign c[101:100] = a[99:98];
74
    assign c[103:102] = a[35:34];
75
    assign c[105:104] = a[165:164];
76
    assign c[107:106] = a[101:100];
77
    assign c[109:108] = a[37:36];
78
    assign c[111:110] = a[151:150];
79
    assign c[113:112] = a[103:102];
80
    assign c[115:114] = a[39:38];
81
    assign c[117:116] = a[161:160];
82
    assign c[119:118] = {a[96], a[97]};
83
    assign c[121:120] = a[41:40];
84
    assign c[123:122] = a[163:162];
85
    assign c[125:124] = {a[98], a[99]};
86
    assign c[127:126] = a[43:42];
87
    assign c[129:128] = a[165:164];
88
    assign c[131:130] = {a[100], a[101]};
89
    assign c[133:132] = a[45:44];
90
    assign c[135:134] = a[159:158];
91
    assign c[137:136] = {a[102], a[103]};
92
    assign c[139:138] = a[47:46];
93
    assign c[141:140] = a[177:176];
94
    assign c[143:142] = a[113:112];
95
    assign c[145:144] = a[49:48];
96
    assign c[147:146] = a[179:178];
97
    assign c[149:148] = a[115:114];
98
    assign c[151:150] = a[51:50];
99
    assign c[153:152] = a[181:180];
100
    assign c[155:154] = a[117:116];
101
    assign c[157:156] = a[53:52];
102
    assign c[159:158] = a[167:166];
103
    assign c[161:160] = a[119:118];
104
    assign c[163:162] = a[55:54];
105
    assign c[165:164] = a[177:176];
106
    assign c[167:166] = {a[112], a[113]};
107
    assign c[169:168] = a[57:56];
108
    assign c[171:170] = a[179:178];
109
    assign c[173:172] = {a[114], a[115]};
110
    assign c[175:174] = a[59:58];
111
    assign c[177:176] = a[181:180];
112
    assign c[179:178] = {a[116], a[117]};
113
    assign c[181:180] = a[61:60];
114
    assign c[183:182] = a[175:174];
115
    assign c[185:184] = {a[118], a[119]};
116
    assign c[187:186] = a[63:62];
117
    assign c[189:188] = a[193:192];
118
    assign c[191:190] = a[129:128];
119
    assign c[193:192] = a[65:64];
120
endmodule
121
/* c == v1(a) */
122
module v1(a, c);
123
    input [193:0] a;
124
    output [193:0] c;
125
    assign c[1:0] = a[179:178];
126
    assign c[3:2] = {a[122], a[123]};
127
    assign c[5:4] = 0;
128
    assign c[7:6] = a[181:180];
129
    assign c[9:8] = {a[124], a[125]};
130
    assign c[11:10] = 0;
131
    assign c[13:12] = a[183:182];
132
    assign c[15:14] = {a[126], a[127]};
133
    assign c[17:16] = 0;
134
    assign c[19:18] = a[7:6];
135
    assign c[21:20] = a[137:136];
136
    assign c[23:22] = 0;
137
    assign c[25:24] = a[9:8];
138
    assign c[27:26] = a[139:138];
139
    assign c[29:28] = a[75:74];
140
    assign c[31:30] = a[11:10];
141
    assign c[33:32] = a[125:124];
142
    assign c[35:34] = a[77:76];
143
    assign c[37:36] = a[13:12];
144
    assign c[39:38] = a[135:134];
145
    assign c[41:40] = a[79:78];
146
    assign c[43:42] = a[15:14];
147
    assign c[45:44] = a[129:128];
148
    assign c[47:46] = {a[72], a[73]};
149
    assign c[49:48] = {a[186], a[187]};
150
    assign c[51:50] = a[139:138];
151
    assign c[53:52] = {a[74], a[75]};
152
    assign c[55:54] = {a[188], a[189]};
153
    assign c[57:56] = a[133:132];
154
    assign c[59:58] = {a[76], a[77]};
155
    assign c[61:60] = {a[190], a[191]};
156
    assign c[63:62] = a[151:150];
157
    assign c[65:64] = {a[78], a[79]};
158
    assign c[67:66] = a[23:22];
159
    assign c[69:68] = a[137:136];
160
    assign c[71:70] = a[89:88];
161
    assign c[73:72] = 0;
162
    assign c[75:74] = a[155:154];
163
    assign c[77:76] = a[91:90];
164
    assign c[79:78] = 0;
165
    assign c[81:80] = a[141:140];
166
    assign c[83:82] = a[93:92];
167
    assign c[85:84] = 0;
168
    assign c[87:86] = a[151:150];
169
    assign c[89:88] = a[95:94];
170
    assign c[91:90] = 0;
171
    assign c[93:92] = a[145:144];
172
    assign c[95:94] = {a[88], a[89]};
173
    assign c[97:96] = 0;
174
    assign c[99:98] = a[155:154];
175
    assign c[101:100] = {a[90], a[91]};
176
    assign c[103:102] = 0;
177
    assign c[105:104] = a[149:148];
178
    assign c[107:106] = {a[92], a[93]};
179
    assign c[109:108] = 0;
180
    assign c[111:110] = a[167:166];
181
    assign c[113:112] = {a[94], a[95]};
182
    assign c[115:114] = 0;
183
    assign c[117:116] = a[153:152];
184
    assign c[119:118] = a[105:104];
185
    assign c[121:120] = 0;
186
    assign c[123:122] = a[171:170];
187
    assign c[125:124] = a[107:106];
188
    assign c[127:126] = 0;
189
    assign c[129:128] = a[157:156];
190
    assign c[131:130] = a[109:108];
191
    assign c[133:132] = 0;
192
    assign c[135:134] = a[167:166];
193
    assign c[137:136] = a[111:110];
194
    assign c[139:138] = 0;
195
    assign c[141:140] = a[161:160];
196
    assign c[143:142] = {a[104], a[105]};
197
    assign c[145:144] = 0;
198
    assign c[147:146] = a[171:170];
199
    assign c[149:148] = {a[106], a[107]};
200
    assign c[151:150] = 0;
201
    assign c[153:152] = a[165:164];
202
    assign c[155:154] = {a[108], a[109]};
203
    assign c[157:156] = 0;
204
    assign c[159:158] = a[183:182];
205
    assign c[161:160] = {a[110], a[111]};
206
    assign c[163:162] = 0;
207
    assign c[165:164] = a[169:168];
208
    assign c[167:166] = a[121:120];
209
    assign c[169:168] = 0;
210
    assign c[171:170] = a[187:186];
211
    assign c[173:172] = a[123:122];
212
    assign c[175:174] = 0;
213
    assign c[177:176] = a[173:172];
214
    assign c[179:178] = a[125:124];
215
    assign c[181:180] = 0;
216
    assign c[183:182] = a[183:182];
217
    assign c[185:184] = a[127:126];
218
    assign c[187:186] = 0;
219
    assign c[189:188] = a[177:176];
220
    assign c[191:190] = {a[120], a[121]};
221
    assign c[193:192] = 0;
222
endmodule
223
/* c == v2(a) */
224
module v2(a, c);
225
    input [193:0] a;
226
    output [193:0] c;
227
    assign c[1:0] = a[187:186];
228
    assign c[3:2] = 0;
229
    assign c[5:4] = 0;
230
    assign c[7:6] = a[189:188];
231
    assign c[9:8] = 0;
232
    assign c[11:10] = 0;
233
    assign c[13:12] = a[191:190];
234
    assign c[15:14] = 0;
235
    assign c[17:16] = 0;
236
    assign c[19:18] = a[185:184];
237
    assign c[21:20] = 0;
238
    assign c[23:22] = 0;
239
    assign c[25:24] = 0;
240
    assign c[27:26] = a[123:122];
241
    assign c[29:28] = 0;
242
    assign c[31:30] = 0;
243
    assign c[33:32] = a[141:140];
244
    assign c[35:34] = 0;
245
    assign c[37:36] = 0;
246
    assign c[39:38] = a[143:142];
247
    assign c[41:40] = 0;
248
    assign c[43:42] = 0;
249
    assign c[45:44] = a[137:136];
250
    assign c[47:46] = 0;
251
    assign c[49:48] = 0;
252
    assign c[51:50] = a[131:130];
253
    assign c[53:52] = 0;
254
    assign c[55:54] = 0;
255
    assign c[57:56] = a[141:140];
256
    assign c[59:58] = 0;
257
    assign c[61:60] = 0;
258
    assign c[63:62] = a[143:142];
259
    assign c[65:64] = 0;
260
    assign c[67:66] = 0;
261
    assign c[69:68] = a[153:152];
262
    assign c[71:70] = 0;
263
    assign c[73:72] = 0;
264
    assign c[75:74] = a[139:138];
265
    assign c[77:76] = 0;
266
    assign c[79:78] = 0;
267
    assign c[81:80] = a[157:156];
268
    assign c[83:82] = 0;
269
    assign c[85:84] = 0;
270
    assign c[87:86] = a[159:158];
271
    assign c[89:88] = 0;
272
    assign c[91:90] = 0;
273
    assign c[93:92] = a[153:152];
274
    assign c[95:94] = 0;
275
    assign c[97:96] = 0;
276
    assign c[99:98] = a[147:146];
277
    assign c[101:100] = 0;
278
    assign c[103:102] = 0;
279
    assign c[105:104] = a[157:156];
280
    assign c[107:106] = 0;
281
    assign c[109:108] = 0;
282
    assign c[111:110] = a[159:158];
283
    assign c[113:112] = 0;
284
    assign c[115:114] = 0;
285
    assign c[117:116] = a[169:168];
286
    assign c[119:118] = 0;
287
    assign c[121:120] = 0;
288
    assign c[123:122] = a[155:154];
289
    assign c[125:124] = 0;
290
    assign c[127:126] = 0;
291
    assign c[129:128] = a[173:172];
292
    assign c[131:130] = 0;
293
    assign c[133:132] = 0;
294
    assign c[135:134] = a[175:174];
295
    assign c[137:136] = 0;
296
    assign c[139:138] = 0;
297
    assign c[141:140] = a[169:168];
298
    assign c[143:142] = 0;
299
    assign c[145:144] = 0;
300
    assign c[147:146] = a[163:162];
301
    assign c[149:148] = 0;
302
    assign c[151:150] = 0;
303
    assign c[153:152] = a[173:172];
304
    assign c[155:154] = 0;
305
    assign c[157:156] = 0;
306
    assign c[159:158] = a[175:174];
307
    assign c[161:160] = 0;
308
    assign c[163:162] = 0;
309
    assign c[165:164] = a[185:184];
310
    assign c[167:166] = 0;
311
    assign c[169:168] = 0;
312
    assign c[171:170] = a[171:170];
313
    assign c[173:172] = 0;
314
    assign c[175:174] = 0;
315
    assign c[177:176] = a[189:188];
316
    assign c[179:178] = 0;
317
    assign c[181:180] = 0;
318
    assign c[183:182] = a[191:190];
319
    assign c[185:184] = 0;
320
    assign c[187:186] = 0;
321
    assign c[189:188] = a[185:184];
322
    assign c[191:190] = 0;
323
    assign c[193:192] = 0;
324
endmodule

powered by: WebSVN 2.1.0

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