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_911_bits/] [testbench/] [test_pairing.v] - Blame information for rev 15

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

Line No. Rev Author Line
1 15 homer.hsin
/*
2
 * 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
 
17 11 homer.hsin
`timescale 1ns / 1ps
18
`define P 20 // clock period 
19
`define M     593         // M is the degree of the irreducible polynomial
20
`define WIDTH (2*`M-1)    // width for a GF(3^M) element
21
`define WIDTH_D0 1187
22
 
23
module test_pairing;
24
 
25
        // Inputs
26
        reg clk;
27
        reg reset;
28
        reg sel;
29
        reg [5:0] addr;
30
        reg w;
31
    reg update;
32
    reg ready;
33
    reg i;
34
 
35
        // Outputs
36
        wire done;
37
    wire o;
38
 
39
    // Buffers
40
        reg [`WIDTH_D0:0] out;
41
 
42
        // Instantiate the Unit Under Test (UUT)
43
        pairing uut (
44
        .clk(clk),
45
        .reset(reset),
46
        .sel(sel),
47
        .addr(addr),
48
        .w(w),
49
        .update(update),
50
        .ready(ready),
51
        .i(i),
52
        .o(o),
53
        .done(done)
54
        );
55
 
56
        initial begin
57
                // Initialize Inputs
58
                clk = 0;
59
                reset = 0;
60
                sel = 0;
61
                addr = 0;
62
                w = 0;
63
        update = 0;
64
        ready = 0;
65
        i = 0;
66
        out = 0;
67
 
68
                // Wait 100 ns for global reset to finish
69
                #100;
70
 
71
                // Add stimulus here
72
        /* keep FSM silent */
73
        reset = 1;
74
            /* init xp, yp, xq, yq */
75
            write(3, 1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a496);
76
            write(5, 1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
77
            write(6, 1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a496);
78
            write(7, 1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
79
            /* read back. uncomment me if error happens */
80
            /* read(3);
81
            $display("xp = %h", out);
82
            read(5);
83
            $display("yp = %h", out);
84
            read(6);
85
            $display("xq = %h", out);
86
            read(7);
87
            $display("yq = %h", out);*/
88
        reset = 0;
89
 
90
        sel = 0; w = 0;
91
        @(posedge done);
92
        @(negedge clk);
93
            read(3);
94
            check(1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a494);
95
            read(5);
96
            check(1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
97
            read(6);
98
            check(1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a494);
99
            read(7);
100
            check(1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
101
            read(9);
102
            check(1186'h20115a6958895a08585a412698a58250900a651a859448a4848125164545598a426119a09885802424154a08855a0042a168516099228606222540582026aa0a6029a88805a1888628856a2a64504120aa290491925284508921140a24a0a8641548a521512698985a610861a401208644612a4a52625119000006004518844899810191a056aaa680889958996508954685a0920);
103
            read(10);
104
            check(1186'h228a9556506501a0258028a8856851a5466a205a2544849a12a10a018a40aaa461959859a4408245094969a44565a160a98229805169491120568121008a04918050a9022854868440662591221116889a9668a82aa84182a59025424469164015a56698a95989555601618402286696055608a82508125aaa5882000aaa96114998660a684582889a5a5190058a0411426145250);
105
            read(11);
106
            check(1186'h001224a468a9154205488585aaa9a0a9882056194952001a88424522191052a96a21102915181a845a5509844985196696160900a0515956a2a10a100a12566408a14450049a586951896442400a8620148582958a8a51869990a161412406860012a61a66214a4461a86895640a48284528201852615921952aaaaa40802586168a929582128a985929990826a9110186891489a);
107
            read(12);
108
            check(1186'h019618a9624a522a280a06a0654418906998059625a892054996a0560a941a842589189984190884426125114000aa60a0a568285221026662226a626a8600605095054405486561a95059449282969a5a10819101a620902609052a1294182962a020512196945a2aa42598a41842096596551544969262a12a86685214a952494a956166a199682a649249a990088296422051a);
109
            read(13);
110
            check(1186'h1a6999a0105054aaa2145298116480601695482119a0619155a4414a8a82840918a512a5680a8000889a4905016868480211289860a8a5699a250245161a042846096a9866025094a189860a9829465281646040866a26959a61a18621848689101a9a95685016a9581224968461a0a108958a91205a0220a18865105928298299a642a906900289a95095845649aa41591069866);
111
            read(14);
112
            check(1186'h15a4208a19a0405005900212505098a881a49445242619a12a12491844110169529a422046a684668819599891a411954196961160591865590a699a04908a6196928965a1686a664210420908115a5816919169662656a855099464680902514586265602510840a566a94a506961a615420a908aa91959610a1a0899589600902a10962460a664104126056a82551462459169a);
113
            $display("Good");
114
        $finish;
115
        end
116
 
117
    initial #100 forever #(`P/2) clk = ~clk;
118
 
119
    task write;
120
        input [5:0] adr;
121
        input [`WIDTH_D0:0] dat;
122
        integer j;
123
        begin
124
            sel = 1;
125
            w = 0;
126
            addr = adr;
127
            update = 1;
128
            #`P;
129
            update = 0;
130
            ready = 1;
131
            for(j=0;j<`WIDTH_D0+1;j=j+1)
132
               begin
133
               i = dat[j];
134
               #`P;
135
               end
136
            ready = 0;
137
            w = 1; #`P; w = 0;
138
        end
139
    endtask
140
 
141
    task read;
142
        input [5:0] adr;
143
        integer j;
144
        begin
145
            sel = 1;
146
            w = 0;
147
            addr = adr;
148
            #`P;
149
            update = 1;
150
            #`P;
151
            update = 0;
152
            out = 0;
153
            ready = 1;
154
            for(j=0;j<`WIDTH_D0+1;j=j+1)
155
               begin
156
               out = {o, out[`WIDTH_D0:1]};
157
               #`P;
158
               end
159
        end
160
    endtask
161
 
162
    task check;
163
        input [`WIDTH_D0:0] wish;
164
        begin
165
            if (out !== wish)
166
                begin $display("Error!"); $finish; end
167
        end
168
    endtask
169
endmodule
170
 

powered by: WebSVN 2.1.0

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