1 |
5 |
rudi |
/////////////////////////////////////////////////////////////////////
|
2 |
|
|
//// ////
|
3 |
|
|
//// DES TEST BENCH ////
|
4 |
|
|
//// ////
|
5 |
|
|
//// Author: Rudolf Usselmann ////
|
6 |
|
|
//// rudi@asics.ws ////
|
7 |
|
|
//// ////
|
8 |
|
|
/////////////////////////////////////////////////////////////////////
|
9 |
|
|
//// ////
|
10 |
|
|
//// Copyright (C) 2001 Rudolf Usselmann ////
|
11 |
|
|
//// rudi@asics.ws ////
|
12 |
|
|
//// ////
|
13 |
|
|
//// This source file may be used and distributed without ////
|
14 |
|
|
//// restriction provided that this copyright statement is not ////
|
15 |
|
|
//// removed from the file and that any derivative work contains ////
|
16 |
|
|
//// the original copyright notice and the associated disclaimer.////
|
17 |
|
|
//// ////
|
18 |
|
|
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
|
19 |
|
|
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
|
20 |
|
|
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
|
21 |
|
|
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
|
22 |
|
|
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
|
23 |
|
|
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
|
24 |
|
|
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
|
25 |
|
|
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
|
26 |
|
|
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
|
27 |
|
|
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
|
28 |
|
|
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
|
29 |
|
|
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
|
30 |
|
|
//// POSSIBILITY OF SUCH DAMAGE. ////
|
31 |
|
|
//// ////
|
32 |
|
|
/////////////////////////////////////////////////////////////////////
|
33 |
|
|
|
34 |
|
|
module test;
|
35 |
|
|
|
36 |
|
|
reg clk;
|
37 |
|
|
reg [191:0] x[128:0];
|
38 |
|
|
|
39 |
|
|
reg [191:0] tmp;
|
40 |
|
|
|
41 |
|
|
reg [3:0] cnt;
|
42 |
|
|
integer select;
|
43 |
|
|
integer decrypt;
|
44 |
|
|
wire [63:0] desOut;
|
45 |
|
|
wire [63:0] des_in;
|
46 |
|
|
wire [63:0] exp_out;
|
47 |
|
|
wire [55:0] key;
|
48 |
|
|
|
49 |
|
|
initial
|
50 |
|
|
begin
|
51 |
|
|
$display("\n\n");
|
52 |
|
|
$display("*********************************************************");
|
53 |
|
|
$display("* Area Optimized DES core simulation started ... *");
|
54 |
|
|
$display("*********************************************************");
|
55 |
|
|
$display("\n");
|
56 |
|
|
|
57 |
|
|
`ifdef WAVES
|
58 |
|
|
$shm_open("waves");
|
59 |
|
|
$shm_probe("AS",test,"AS");
|
60 |
|
|
$display("INFO: Signal dump enabled ...\n\n");
|
61 |
|
|
`endif
|
62 |
|
|
|
63 |
|
|
clk=0;
|
64 |
|
|
// Key Test data Out data
|
65 |
|
|
x[00]=192'h8001010101010101_0000000000000000_95A8D72813DAA94D;
|
66 |
|
|
x[01]=192'h4001010101010101_0000000000000000_0EEC1487DD8C26D5;
|
67 |
|
|
x[02]=192'h2001010101010101_0000000000000000_7AD16FFB79C45926;
|
68 |
|
|
x[03]=192'h1001010101010101_0000000000000000_D3746294CA6A6CF3;
|
69 |
|
|
x[04]=192'h0801010101010101_0000000000000000_809F5F873C1FD761;
|
70 |
|
|
x[05]=192'h0401010101010101_0000000000000000_C02FAFFEC989D1FC;
|
71 |
|
|
x[06]=192'h0201010101010101_0000000000000000_4615AA1D33E72F10;
|
72 |
|
|
x[07]=192'h0180010101010101_0000000000000000_2055123350C00858;
|
73 |
|
|
x[08]=192'h0140010101010101_0000000000000000_DF3B99D6577397C8;
|
74 |
|
|
x[09]=192'h0120010101010101_0000000000000000_31FE17369B5288C9;
|
75 |
|
|
x[10]=192'h0110010101010101_0000000000000000_DFDD3CC64DAE1642;
|
76 |
|
|
x[11]=192'h0108010101010101_0000000000000000_178C83CE2B399D94;
|
77 |
|
|
x[12]=192'h0104010101010101_0000000000000000_50F636324A9B7F80;
|
78 |
|
|
x[13]=192'h0102010101010101_0000000000000000_A8468EE3BC18F06D;
|
79 |
|
|
x[14]=192'h0101800101010101_0000000000000000_A2DC9E92FD3CDE92;
|
80 |
|
|
x[15]=192'h0101400101010101_0000000000000000_CAC09F797D031287;
|
81 |
|
|
x[16]=192'h0101200101010101_0000000000000000_90BA680B22AEB525;
|
82 |
|
|
x[17]=192'h0101100101010101_0000000000000000_CE7A24F350E280B6;
|
83 |
|
|
x[18]=192'h0101080101010101_0000000000000000_882BFF0AA01A0B87;
|
84 |
|
|
x[19]=192'h0101040101010101_0000000000000000_25610288924511C2;
|
85 |
|
|
x[20]=192'h0101020101010101_0000000000000000_C71516C29C75D170;
|
86 |
|
|
x[21]=192'h0101018001010101_0000000000000000_5199C29A52C9F059;
|
87 |
|
|
x[22]=192'h0101014001010101_0000000000000000_C22F0A294A71F29F;
|
88 |
|
|
x[23]=192'h0101012001010101_0000000000000000_EE371483714C02EA;
|
89 |
|
|
x[24]=192'h0101011001010101_0000000000000000_A81FBD448F9E522F;
|
90 |
|
|
x[25]=192'h0101010801010101_0000000000000000_4F644C92E192DFED;
|
91 |
|
|
x[26]=192'h0101010401010101_0000000000000000_1AFA9A66A6DF92AE;
|
92 |
|
|
x[27]=192'h0101010201010101_0000000000000000_B3C1CC715CB879D8;
|
93 |
|
|
x[28]=192'h0101010180010101_0000000000000000_19D032E64AB0BD8B;
|
94 |
|
|
x[29]=192'h0101010140010101_0000000000000000_3CFAA7A7DC8720DC;
|
95 |
|
|
x[30]=192'h0101010120010101_0000000000000000_B7265F7F447AC6F3;
|
96 |
|
|
x[31]=192'h0101010110010101_0000000000000000_9DB73B3C0D163F54;
|
97 |
|
|
x[32]=192'h0101010108010101_0000000000000000_8181B65BABF4A975;
|
98 |
|
|
x[33]=192'h0101010104010101_0000000000000000_93C9B64042EAA240;
|
99 |
|
|
x[34]=192'h0101010102010101_0000000000000000_5570530829705592;
|
100 |
|
|
x[35]=192'h0101010101800101_0000000000000000_8638809E878787A0;
|
101 |
|
|
x[36]=192'h0101010101400101_0000000000000000_41B9A79AF79AC208;
|
102 |
|
|
x[37]=192'h0101010101200101_0000000000000000_7A9BE42F2009A892;
|
103 |
|
|
x[38]=192'h0101010101100101_0000000000000000_29038D56BA6D2745;
|
104 |
|
|
x[39]=192'h0101010101080101_0000000000000000_5495C6ABF1E5DF51;
|
105 |
|
|
x[40]=192'h0101010101040101_0000000000000000_AE13DBD561488933;
|
106 |
|
|
x[41]=192'h0101010101020101_0000000000000000_024D1FFA8904E389;
|
107 |
|
|
x[42]=192'h0101010101018001_0000000000000000_D1399712F99BF02E;
|
108 |
|
|
x[43]=192'h0101010101014001_0000000000000000_14C1D7C1CFFEC79E;
|
109 |
|
|
x[44]=192'h0101010101012001_0000000000000000_1DE5279DAE3BED6F;
|
110 |
|
|
x[45]=192'h0101010101011001_0000000000000000_E941A33F85501303;
|
111 |
|
|
x[46]=192'h0101010101010801_0000000000000000_DA99DBBC9A03F379;
|
112 |
|
|
x[47]=192'h0101010101010401_0000000000000000_B7FC92F91D8E92E9;
|
113 |
|
|
x[48]=192'h0101010101010201_0000000000000000_AE8E5CAA3CA04E85;
|
114 |
|
|
x[49]=192'h0101010101010180_0000000000000000_9CC62DF43B6EED74;
|
115 |
|
|
x[50]=192'h0101010101010140_0000000000000000_D863DBB5C59A91A0;
|
116 |
|
|
x[51]=192'h0101010101010120_0000000000000000_A1AB2190545B91D7;
|
117 |
|
|
x[52]=192'h0101010101010110_0000000000000000_0875041E64C570F7;
|
118 |
|
|
x[53]=192'h0101010101010108_0000000000000000_5A594528BEBEF1CC;
|
119 |
|
|
x[54]=192'h0101010101010104_0000000000000000_FCDB3291DE21F0C0;
|
120 |
|
|
x[55]=192'h0101010101010102_0000000000000000_869EFD7F9F265A09;
|
121 |
|
|
x[56]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7;
|
122 |
|
|
x[57]=192'hFFFFFFFFFFFFFFFF_FFFFFFFFFFFFFFFF_7359B2163E4EDC58;
|
123 |
|
|
x[58]=192'h3000000000000000_1000000000000001_958E6E627A05557B;
|
124 |
|
|
x[59]=192'h1111111111111111_1111111111111111_F40379AB9E0EC533;
|
125 |
|
|
x[60]=192'h0123456789ABCDEF_1111111111111111_17668DFC7292532D;
|
126 |
|
|
x[61]=192'h1111111111111111_0123456789ABCDEF_8A5AE1F81AB8F2DD;
|
127 |
|
|
x[62]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7;
|
128 |
|
|
x[63]=192'hFEDCBA9876543210_0123456789ABCDEF_ED39D950FA74BCC4;
|
129 |
|
|
x[64]=192'h7CA110454A1A6E57_01A1D6D039776742_690F5B0D9A26939B;
|
130 |
|
|
x[65]=192'h0131D9619DC1376E_5CD54CA83DEF57DA_7A389D10354BD271;
|
131 |
|
|
x[66]=192'h07A1133E4A0B2686_0248D43806F67172_868EBB51CAB4599A;
|
132 |
|
|
x[67]=192'h3849674C2602319E_51454B582DDF440A_7178876E01F19B2A;
|
133 |
|
|
x[68]=192'h04B915BA43FEB5B6_42FD443059577FA2_AF37FB421F8C4095;
|
134 |
|
|
x[69]=192'h0113B970FD34F2CE_059B5E0851CF143A_86A560F10EC6D85B;
|
135 |
|
|
x[70]=192'h0170F175468FB5E6_0756D8E0774761D2_0CD3DA020021DC09;
|
136 |
|
|
x[71]=192'h43297FAD38E373FE_762514B829BF486A_EA676B2CB7DB2B7A;
|
137 |
|
|
x[72]=192'h07A7137045DA2A16_3BDD119049372802_DFD64A815CAF1A0F;
|
138 |
|
|
x[73]=192'h04689104C2FD3B2F_26955F6835AF609A_5C513C9C4886C088;
|
139 |
|
|
x[74]=192'h37D06BB516CB7546_164D5E404F275232_0A2AEEAE3FF4AB77;
|
140 |
|
|
x[75]=192'h1F08260D1AC2465E_6B056E18759F5CCA_EF1BF03E5DFA575A;
|
141 |
|
|
x[76]=192'h584023641ABA6176_004BD6EF09176062_88BF0DB6D70DEE56;
|
142 |
|
|
x[77]=192'h025816164629B007_480D39006EE762F2_A1F9915541020B56;
|
143 |
|
|
x[78]=192'h49793EBC79B3258F_437540C8698F3CFA_6FBF1CAFCFFD0556;
|
144 |
|
|
x[79]=192'h4FB05E1515AB73A7_072D43A077075292_2F22E49BAB7CA1AC;
|
145 |
|
|
x[80]=192'h49E95D6D4CA229BF_02FE55778117F12A_5A6B612CC26CCE4A;
|
146 |
|
|
x[81]=192'h018310DC409B26D6_1D9D5C5018F728C2_5F4C038ED12B2E41;
|
147 |
|
|
x[82]=192'h1C587F1C13924FEF_305532286D6F295A_63FAC0D034D9F793;
|
148 |
|
|
x[83]=192'h0101010101010101_0123456789ABCDEF_617B3A0CE8F07100;
|
149 |
|
|
x[84]=192'h1F1F1F1F0E0E0E0E_0123456789ABCDEF_DB958605F8C8C606;
|
150 |
|
|
x[85]=192'hE0FEE0FEF1FEF1FE_0123456789ABCDEF_EDBFD1C66C29CCC7;
|
151 |
|
|
x[86]=192'h0000000000000000_FFFFFFFFFFFFFFFF_355550B2150E2451;
|
152 |
|
|
x[87]=192'hFFFFFFFFFFFFFFFF_0000000000000000_CAAAAF4DEAF1DBAE;
|
153 |
|
|
x[88]=192'h0123456789ABCDEF_0000000000000000_D5D44FF720683D0D;
|
154 |
|
|
x[89]=192'hFEDCBA9876543210_FFFFFFFFFFFFFFFF_2A2BB008DF97C2F2;
|
155 |
|
|
|
156 |
|
|
decrypt = 0;
|
157 |
|
|
@(posedge clk);
|
158 |
|
|
|
159 |
|
|
$display("");
|
160 |
|
|
$display("**************************************");
|
161 |
|
|
$display("* Starting DES Test ... *");
|
162 |
|
|
$display("**************************************");
|
163 |
|
|
$display("");
|
164 |
|
|
|
165 |
|
|
for(decrypt=0;decrypt<2;decrypt=decrypt+1)
|
166 |
|
|
begin
|
167 |
|
|
if(decrypt) $display("Running Encrypt test ...\n");
|
168 |
|
|
else $display("Running Decrypt test ...\n");
|
169 |
|
|
|
170 |
|
|
for(select=0;select<90;select=select+1)
|
171 |
|
|
begin
|
172 |
|
|
tmp=x[select];
|
173 |
|
|
for(cnt=0;cnt<15;cnt=cnt+1) @(posedge clk);
|
174 |
|
|
|
175 |
|
|
#10;
|
176 |
|
|
//if(desOut !== exp_out)
|
177 |
|
|
if((exp_out !== desOut) | (^exp_out===1'bx) | (^desOut===1'bx))
|
178 |
|
|
|
179 |
|
|
$display("ERROR: (%0d) Expected %x Got %x", select, exp_out, desOut);
|
180 |
|
|
//else
|
181 |
|
|
// $display("PASS : (%0d) Expected %x Got %x", select, exp_out, desOut);
|
182 |
|
|
|
183 |
|
|
@(posedge clk);
|
184 |
|
|
end
|
185 |
|
|
end
|
186 |
|
|
|
187 |
|
|
$display("");
|
188 |
|
|
$display("**************************************");
|
189 |
|
|
$display("* DES Test done ... *");
|
190 |
|
|
$display("**************************************");
|
191 |
|
|
$display("");
|
192 |
|
|
|
193 |
|
|
$finish;
|
194 |
|
|
end // end of innitial
|
195 |
|
|
|
196 |
|
|
always #100 clk=~clk;
|
197 |
|
|
|
198 |
|
|
assign #1 key = {tmp[191:185],tmp[183:177],tmp[175:169],tmp[167:161],
|
199 |
|
|
tmp[159:153],tmp[151:145],tmp[143:137],tmp[135:129]};
|
200 |
|
|
|
201 |
|
|
assign #1 des_in = decrypt ? tmp[63:0] : tmp[127:64];
|
202 |
|
|
assign exp_out = decrypt ? tmp[127:64] : tmp[63:0];
|
203 |
|
|
|
204 |
|
|
des u0( .clk( clk ),
|
205 |
|
|
.desOut( desOut ),
|
206 |
|
|
.desIn( des_in ),
|
207 |
|
|
.key( key ),
|
208 |
|
|
.roundSel( cnt ),
|
209 |
|
|
.decrypt( decrypt[0] )
|
210 |
|
|
);
|
211 |
|
|
|
212 |
|
|
endmodule
|