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_tiny;
|
24 |
|
|
|
25 |
|
|
// Inputs
|
26 |
|
|
reg clk;
|
27 |
|
|
reg reset;
|
28 |
|
|
reg sel;
|
29 |
|
|
reg [5:0] addr;
|
30 |
|
|
reg w;
|
31 |
|
|
reg [`WIDTH_D0:0] data;
|
32 |
|
|
|
33 |
|
|
// Outputs
|
34 |
|
|
wire [`WIDTH_D0:0] out;
|
35 |
|
|
wire done;
|
36 |
|
|
|
37 |
|
|
// Instantiate the Unit Under Test (UUT)
|
38 |
|
|
tiny uut (
|
39 |
|
|
.clk(clk),
|
40 |
|
|
.reset(reset),
|
41 |
|
|
.sel(sel),
|
42 |
|
|
.addr(addr),
|
43 |
|
|
.w(w),
|
44 |
|
|
.data(data),
|
45 |
|
|
.out(out),
|
46 |
|
|
.done(done)
|
47 |
|
|
);
|
48 |
|
|
|
49 |
|
|
initial begin
|
50 |
|
|
// Initialize Inputs
|
51 |
|
|
clk = 0;
|
52 |
|
|
reset = 0;
|
53 |
|
|
sel = 0;
|
54 |
|
|
addr = 0;
|
55 |
|
|
w = 0;
|
56 |
|
|
data = 0;
|
57 |
|
|
|
58 |
|
|
// Wait 100 ns for global reset to finish
|
59 |
|
|
#100;
|
60 |
|
|
|
61 |
|
|
// Add stimulus here
|
62 |
|
|
reset = 1; // keep FSM silent
|
63 |
|
|
// init x, y
|
64 |
|
|
write(3, 1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a496);
|
65 |
|
|
write(5, 1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
|
66 |
|
|
write(6, 1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a496);
|
67 |
|
|
write(7, 1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
|
68 |
|
|
/* read back. uncomment me if error happens */
|
69 |
|
|
/* read(3);
|
70 |
|
|
$display("xp = %h", out);
|
71 |
|
|
read(5);
|
72 |
|
|
$display("yp = %h", out);
|
73 |
|
|
read(6);
|
74 |
|
|
$display("xq = %h", out);
|
75 |
|
|
read(7);
|
76 |
|
|
$display("yq = %h", out);*/
|
77 |
|
|
reset = 0;
|
78 |
|
|
sel = 0; w = 0;
|
79 |
|
|
@(posedge done);
|
80 |
|
|
@(negedge clk);
|
81 |
|
|
read(3);
|
82 |
|
|
check(1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a494);
|
83 |
|
|
read(5);
|
84 |
|
|
check(1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
|
85 |
|
|
read(6);
|
86 |
|
|
check(1186'h088a6aa4a8aa80a9aa922965a92a56510856606aa6400649a6004866466928a20090908210195560a8162a52442029a44a68004a8168496a0a8a8564962a0948118a5599a29450214995828245914a099051991602550105228289686988621a1a9126648644619a66111a026452641169158a4686884aa212199582406600921229a5948802528289a62454a2566a4122586a494);
|
87 |
|
|
read(7);
|
88 |
|
|
check(1186'h05448582294062429a891a6509092496844141090214064988646241904502a0225046a54851a05454020044881088a2092411592909289861049124644a964a6188014aa25869a09890401a924048815a1008421459455411a4a65094410615a524458901026a9108a468650515a5aa50468005881a29055980995a145995146909841aa18890902264628884421894959956195);
|
89 |
|
|
read(9);
|
90 |
|
|
check(1186'h20115a6958895a08585a412698a58250900a651a859448a4848125164545598a426119a09885802424154a08855a0042a168516099228606222540582026aa0a6029a88805a1888628856a2a64504120aa290491925284508921140a24a0a8641548a521512698985a610861a401208644612a4a52625119000006004518844899810191a056aaa680889958996508954685a0920);
|
91 |
|
|
read(10);
|
92 |
|
|
check(1186'h228a9556506501a0258028a8856851a5466a205a2544849a12a10a018a40aaa461959859a4408245094969a44565a160a98229805169491120568121008a04918050a9022854868440662591221116889a9668a82aa84182a59025424469164015a56698a95989555601618402286696055608a82508125aaa5882000aaa96114998660a684582889a5a5190058a0411426145250);
|
93 |
|
|
read(11);
|
94 |
|
|
check(1186'h001224a468a9154205488585aaa9a0a9882056194952001a88424522191052a96a21102915181a845a5509844985196696160900a0515956a2a10a100a12566408a14450049a586951896442400a8620148582958a8a51869990a161412406860012a61a66214a4461a86895640a48284528201852615921952aaaaa40802586168a929582128a985929990826a9110186891489a);
|
95 |
|
|
read(12);
|
96 |
|
|
check(1186'h019618a9624a522a280a06a0654418906998059625a892054996a0560a941a842589189984190884426125114000aa60a0a568285221026662226a626a8600605095054405486561a95059449282969a5a10819101a620902609052a1294182962a020512196945a2aa42598a41842096596551544969262a12a86685214a952494a956166a199682a649249a990088296422051a);
|
97 |
|
|
read(13);
|
98 |
|
|
check(1186'h1a6999a0105054aaa2145298116480601695482119a0619155a4414a8a82840918a512a5680a8000889a4905016868480211289860a8a5699a250245161a042846096a9866025094a189860a9829465281646040866a26959a61a18621848689101a9a95685016a9581224968461a0a108958a91205a0220a18865105928298299a642a906900289a95095845649aa41591069866);
|
99 |
|
|
read(14);
|
100 |
|
|
check(1186'h15a4208a19a0405005900212505098a881a49445242619a12a12491844110169529a422046a684668819599891a411954196961160591865590a699a04908a6196928965a1686a664210420908115a5816919169662656a855099464680902514586265602510840a566a94a506961a615420a908aa91959610a1a0899589600902a10962460a664104126056a82551462459169a);
|
101 |
|
|
$display("Good");
|
102 |
|
|
$finish;
|
103 |
|
|
end
|
104 |
|
|
|
105 |
|
|
initial #100 forever #(`P/2) clk = ~clk;
|
106 |
|
|
|
107 |
|
|
task write;
|
108 |
|
|
input [6:0] adr;
|
109 |
|
|
input [`WIDTH_D0:0] dat;
|
110 |
|
|
begin
|
111 |
|
|
sel = 1;
|
112 |
|
|
w = 1;
|
113 |
|
|
addr = adr;
|
114 |
|
|
data = dat;
|
115 |
|
|
#(`P);
|
116 |
|
|
end
|
117 |
|
|
endtask
|
118 |
|
|
|
119 |
|
|
task read;
|
120 |
|
|
input [6:0] adr;
|
121 |
|
|
begin
|
122 |
|
|
sel = 1;
|
123 |
|
|
w = 0;
|
124 |
|
|
addr = adr;
|
125 |
|
|
#(`P);
|
126 |
|
|
end
|
127 |
12 |
homer.hsin |
endtask
|
128 |
11 |
homer.hsin |
|
129 |
|
|
task check;
|
130 |
|
|
input [`WIDTH_D0:0] wish;
|
131 |
|
|
begin
|
132 |
|
|
if (out !== wish)
|
133 |
|
|
begin $display("Error! %h %h", out, wish); end
|
134 |
|
|
end
|
135 |
|
|
endtask
|
136 |
|
|
endmodule
|
137 |
|
|
|