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

Subversion Repositories pairing

[/] [pairing/] [trunk/] [rtl/] [f3.v] - Blame information for rev 30

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 homer.xing
/*
2
    Copyright 2011, City University of Hong Kong
3
    Author is Homer (Dongsheng) Xing.
4
 
5
    This file is part of Tate Bilinear Pairing Core.
6
 
7
    Tate Bilinear Pairing Core is free software: you can redistribute it and/or modify
8
    it under the terms of the GNU Lesser General Public License as published by
9
    the Free Software Foundation, either version 3 of the License, or
10
    (at your option) any later version.
11
 
12
    Tate Bilinear Pairing Core is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU Lesser General Public License for more details.
16
 
17
    You should have received a copy of the GNU General Public License
18 30 homer.xing
    along with Tate Bilinear Pairing Core.  If not, see http://www.gnu.org/licenses/lgpl.txt
19 24 homer.xing
*/
20
 
21 2 homer.xing
// f3_add: C == A+B (mod 3)
22
module f3_add(A, B, C);
23
    input [1:0] A, B;
24
    output [1:0] C;
25
    wire a0, a1, b0, b1, c0, c1;
26
    assign {a1, a0} = A;
27
    assign {b1, b0} = B;
28
    assign C = {c1, c0};
29 8 homer.xing
    assign c0 = ( a0 & ~a1 & ~b0 & ~b1) |
30
                (~a0 & ~a1 &  b0 & ~b1) |
31
                (~a0 &  a1 & ~b0 &  b1) ;
32
    assign c1 = (~a0 &  a1 & ~b0 & ~b1) |
33
                ( a0 & ~a1 &  b0 & ~b1) |
34
                (~a0 & ~a1 & ~b0 &  b1) ;
35 2 homer.xing
endmodule
36
 
37
// f3_sub: C == A-B (mod 3)
38
module f3_sub(A, B, C);
39
    input [1:0] A, B;
40
    output [1:0] C;
41
    f3_add m1(A, {B[0], B[1]}, C);
42
endmodule
43
 
44
// f3_mult: C = A*B (mod 3)
45
module f3_mult(A, B, C);
46 22 homer.xing
    input [1:0] A;
47
    input [1:0] B;
48
    output [1:0] C;
49
    wire a0, a1, b0, b1;
50
    assign {a1, a0} = A;
51
    assign {b1, b0} = B;
52
    assign C[0] = (~a1 & a0 & ~b1 & b0) | (a1 & ~a0 & b1 & ~b0);
53
    assign C[1] = (~a1 & a0 & b1 & ~b0) | (a1 & ~a0 & ~b1 & b0);
54 2 homer.xing
endmodule
55
 
56 8 homer.xing
// c == a+1 (mod 3)
57
module f3_add1(a, c);
58
    input [1:0] a;
59
    output [1:0] c;
60
    assign c[0] = (~a[0]) & (~a[1]);
61
    assign c[1] = a[0] & (~a[1]);
62
endmodule
63
 
64
// c == a-1 (mod 3)
65
module f3_sub1(a, c);
66
    input [1:0] a;
67
    output [1:0] c;
68
    assign c[0] = (~a[0]) & a[1];
69
    assign c[1] = (~a[0]) & (~a[1]);
70
endmodule

powered by: WebSVN 2.1.0

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