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

Subversion Repositories ecg

[/] [ecg/] [trunk/] [rtl/] [f3.v] - Blame information for rev 6

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

Line No. Rev Author Line
1 2 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
    along with Foobar.  If not, see http://www.gnu.org/licenses/lgpl.txt
19
*/
20
 
21
// 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
    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
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
    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
endmodule
55
 
56
// 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.