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

Subversion Repositories or1200_hp

[/] [or1200_hp/] [trunk/] [bench/] [rtl_cm3/] [verilog/] [random_rom_wb_cm3.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tobil
///////////////////////////////////////////////
2
//      Random Instruction Code Generator
3
//      for Hyper Pipelined OR1200 Core
4
//      with CMF = 3
5
///////////////////////////////////////////////
6
 
7
 
8
// synopsys translate_off
9
`include "timescale.v"
10
// synopsys translate_on
11
 
12
module random_rom_wb_cm3 ( dat_o, adr_i, sel_i, cyc_i, stb_i, ack_o, clk_i, cmls, rst_i, core_off );
13
 
14
parameter adr_width = 26;
15
 
16
 
17
///////////////////////////////
18
//      IO signals
19
 
20
output [31:0]            dat_o;  // wishbone signals
21
input [adr_width-1:2]   adr_i;
22
input [3:0]              sel_i;
23
input                   cyc_i;
24
input                   stb_i;
25
output                  ack_o;
26
 
27
input                   clk_i;  // clock
28
input [1:0]                      cmls;           // core multiplier level selector
29
input                   rst_i;  // async reset
30
input   [2:0]                    core_off;       // turn off second core
31
 
32
 
33
///////////////////////////////
34
//      internal signals
35
 
36
integer rand;
37
wire [adr_width-1:2] memBorder [2:0];
38
assign memBorder[0] = 24'h000500; //afe;
39
assign memBorder[1] = 24'h000800; //7fe;
40
assign memBorder[2] = 24'h000b00; //4fe;
41
 
42
///////////////////////////////
43
//      pipelined signals
44
 
45
reg [2:0]        lastSet;                // indicates if flag is set
46
reg [2:0]        ack;
47
reg [31:0]       dat [2:0];
48
 
49
///////////////////////////////
50
//      assign outputs
51
 
52
assign  ack_o = ack[cmls];
53
assign  dat_o = dat[cmls];
54
 
55
///////////////////////////////
56
//      save adr for debugging
57
 
58
reg [adr_width-1:2]     adr [2:0];
59
always @ (posedge clk_i) begin
60
        if (core_off[cmls] == 1)
61
                adr[cmls] <= 24'hXXXXXX; //000000;
62
        else
63
                adr[cmls] <= adr_i;
64
end
65
 
66
///////////////////////////////
67
//      random code generator
68
 
69
always @ (posedge clk_i or posedge rst_i)
70
if (rst_i) begin
71
        dat[0] <= 32'h0;
72
        dat[1] <= 32'h0;
73
        dat[2] <= 32'h0;
74
        lastSet <= 3'b000;
75
        ack <= 3'b000;
76
end else
77
if (!ack_o)
78
begin
79
        if (cyc_i & stb_i) begin
80
                ack[cmls] <= 1'b1;
81
                //////////////////////////////////////////////////////////////
82
                //      branch forward by 0000010
83
                //////////////////////////////////////////////////////////////
84
                if (    (adr_i < memBorder[cmls] - 50)  &
85
                        (lastSet[cmls])                         ) begin
86
                        rand = ($random() * $random()) % 2;
87
                        if (rand < 0)
88
                                rand = rand * -1;
89
                        if (rand == 0) begin
90
                            dat[cmls][31:26] <= 6'h04;
91
                                dat[cmls][25:0] <= 26'h0000020;          //      l.bf
92
                                $display("l.bf @%x ", adr_i);
93
                        end
94
                        else if (rand == 1) begin
95
                            dat[cmls][31:26] <= 6'h03;
96
                                dat[cmls][25:0] <= 26'h0000020;          //      l.bnf
97
                                $display("l.bnf @%x ", adr_i);
98
                        end
99
                        lastSet[cmls] <= 1'b0;
100
                end
101
                //////////////////////////////////////////////////////////////
102
                //      generate random instruction code
103
                //////////////////////////////////////////////////////////////
104
                else begin
105
                        if (adr_i < memBorder[cmls] - 50)
106
                                rand = ($random() * $random()) % 51;
107
                        else
108
                                rand = ($random() * $random()) % 31;
109
                        if (rand < 0)
110
                                rand = rand * -1;
111
                        if (rand == 0) begin
112
                            dat[cmls][31:26] <= 6'h38;
113
                                dat[cmls][25:11] <= $random();
114
                                dat[cmls][10:0] <= 11'h000;              //      l.add           =0x38h ..0.. 0
115
                                $display("l.add @%x ", adr_i);
116
                        end
117
                        else if (rand == 1) begin
118
                            dat[cmls][31:26] <= 6'h38;
119
                                dat[cmls][25:11] <= $random();
120
                                dat[cmls][10:0] <= 11'h001;              //      l.addc  =0x38h ..0.. 1
121
                                $display("l.addc @%x ", adr_i);
122
                        end
123
                        else if (rand == 2) begin
124
                            dat[cmls][31:26] <= 6'h27;          //      l.addi  =0x27h
125
                                dat[cmls][25:0] <= $random();
126
                                $display("l.addi @%x ", adr_i);
127
                        end
128
                        else if (rand == 3) begin
129
                            dat[cmls][31:26] <= 6'h28;          //      l.addic =0x28h
130
                                dat[cmls][25:0] <= $random();
131
                                $display("l.addic @%x ", adr_i);
132
                        end
133
                        else if (rand == 4) begin
134
                            dat[cmls][31:26] <= 6'h38;
135
                                dat[cmls][25:11] <= $random();
136
                                dat[cmls][10:0] <= 11'h003;              //      l.and           =0x38h ..0.. 3
137
                                $display("l.and @%x ", adr_i);
138
                        end
139
                        else if (rand == 5) begin
140
                            dat[cmls][31:26] <= 6'h29;          //      l.andi  =0x29h
141
                                dat[cmls][25:0] <= $random();
142
                                $display("l.andi @%x ", adr_i);
143
                        end
144
                                                                                //      l.bf
145
                                                                                //      l.buf
146
                        else if (rand == 6) begin
147
                            dat[cmls][31:26] <= 6'h38;          //      l.cmov
148
                                dat[cmls][25:21] <= $random();
149
                                dat[cmls][20:16] <= $random();
150
                                dat[cmls][15:11] <= $random();
151
                                dat[cmls][10:0] <= 11'h00e;
152
                                $display("l.cmov @%x ", adr_i);
153
                        end
154
                                                                                //      l.div
155
                                                                                //      l.divu
156
                                                                                //      l.ext...
157
                        else if (rand == 7) begin
158
                            dat[cmls][31:26] <= 6'h38;          //      l.ff1
159
                                dat[cmls][25:21] <= $random();
160
                                dat[cmls][20:16] <= $random();
161
                                dat[cmls][15:11] <= $random();
162
                                dat[cmls][10:0] <= 11'h00f;
163
                                $display("l.ff1 @%x ", adr_i);
164
                        end
165
                        else if (rand == 8) begin
166
                            dat[cmls][31:26] <= 6'h38;          //      l.fl1
167
                                dat[cmls][25:21] <= $random();
168
                                dat[cmls][20:16] <= $random();
169
                                dat[cmls][15:11] <= $random();
170
                                dat[cmls][10:0] <= 11'h10f;
171
                                $display("l.fl1 @%x ", adr_i);
172
                        end
173
                                                                                //      l.trap
174
                                                                                //      l.j
175
                                                                                //      l.jal
176
                                                                                //      l.jalr
177
                                                                                //      l.jr
178
                                                                                //      l.lbs
179
                                                                                //      l.lbz
180
                                                                                //      l.lhs
181
                                                                                //      l.lhz
182
                                                                                //      l.lws
183
                                                                                //      l.lwz
184
                        else if (rand == 9) begin
185
                            dat[cmls][31:26] <= 6'h31;          //      l.mac
186
                                dat[cmls][25:21] <= 5'h00;
187
                                dat[cmls][20:16] <= $random();
188
                                dat[cmls][15:11] <= $random();
189
                                dat[cmls][10:0] <= 11'h001;
190
                                $display("l.mac @%x ", adr_i);
191
                        end
192
                        else if (rand == 10) begin
193
                            dat[cmls][31:26] <= 6'h13;          //      l.maci
194
                                dat[cmls][25:21] <= $random();
195
                                dat[cmls][20:16] <= 5'h00;
196
                                dat[cmls][15:11] <= $random();
197
                                dat[cmls][10:0] <= 11'h001;
198
                                $display("l.maci @%x ", adr_i);
199
                        end
200
                        else if (rand == 11) begin
201
                            dat[cmls][31:26] <= 6'h06;          //      l.macrc
202
                                dat[cmls][25:21] <= $random();
203
                                dat[cmls][20:0] <= 21'h010000;
204
                                $display("l.macrc @%x ", adr_i);
205
                        end
206
                                                                                //      l.mfspr
207
                        else if (rand == 12) begin
208
                            dat[cmls][31:26] <= 6'h06;          //      l.movhi =0x6h
209
                                dat[cmls][25:21] <= $random();
210
                                dat[cmls][20:16] <= 5'h00;
211
                                dat[cmls][15:0] <= $random();
212
                                $display("l.movhi @%x ", adr_i);
213
                        end
214
                        else if (rand == 13) begin
215
                            dat[cmls][31:26] <= 6'h31;
216
                                dat[cmls][25:21] <= 5'h00;
217
                                dat[cmls][20:11] <= $random();
218
                                dat[cmls][10:0] <= 11'h002;              //      l.msb           =0x38h ..3.. 6
219
                                $display("l.msb @%x ", adr_i);
220
                        end
221
                                                                                //      l.mtspr
222
                        else if (rand == 14) begin
223
                            dat[cmls][31:26] <= 6'h38;
224
                                dat[cmls][25:11] <= $random();
225
                                dat[cmls][10:0] <= 11'h306;              //      l.mul           =0x38h ..3.. 6
226
                                $display("l.mul @%x ", adr_i);
227
                        end
228
                        else if (rand == 15) begin
229
                            dat[cmls][31:26] <= 6'h2c;          //      l.muli  =0x2ch
230
                                dat[cmls][25:0] <= $random();
231
                                $display("l.muli @%x ", adr_i);
232
                        end
233
                        else if (rand == 16) begin
234
                            dat[cmls][31:26] <= 6'h38;
235
                                dat[cmls][25:11] <= $random();
236
                                dat[cmls][10:0] <= 11'h30b;              //      l.mulu  =0x38h ..3.. b
237
                                $display("l.add @%x ", adr_i);
238
                        end
239
                //      else if (rand == 8) begin
240
                //              dat[cmls][31:26] <= 6'h15;              //      l.nop           =0x15h
241
                //              dat[cmls][25:0] <= 26'h000_0000;
242
                //      end
243
                        else if (rand == 17) begin
244
                            dat[cmls][31:26] <= 6'h38;
245
                                dat[cmls][25:11] <= $random();
246
                                dat[cmls][10:0] <= 11'h004;              //      l.or            =0x38h ..0.. 4
247
                                $display("l.or @%x ", adr_i);
248
                        end
249
                        else if (rand == 18) begin
250
                            dat[cmls][31:26] <= 6'h38;
251
                                dat[cmls][25:11] <= $random();
252
                                dat[cmls][10:0] <= 11'h004;              //      l.or            =0x38h ..0.. 4
253
                                $display("l.or @%x ", adr_i);
254
                        end
255
                        else if (rand == 19) begin
256
                            dat[cmls][31:26] <= 6'h2a;          //      l.ori           =0x2ah
257
                                dat[cmls][25:0] <= 26'h000_0000;
258
                                $display("l.ori @%x ", adr_i);
259
                        end
260
                                                                        //      l.rfe
261
                        else if (rand == 20) begin
262
                            dat[cmls][31:26] <= 6'h38;
263
                                dat[cmls][25:11] <= $random();
264
                                dat[cmls][10:0] <= 11'h0c8;              //      l.ror   
265
                                $display("l.ror @%x ", adr_i);
266
                        end
267
                        else if (rand == 21) begin
268
                            dat[cmls][31:26] <= 6'h2e;
269
                                dat[cmls][25:16] <= $random();
270
                                dat[cmls][15:6] <= 10'h003;              //      l.rori  =0x2eh ..3.. 
271
                                dat[cmls][5:0] <= $random();
272
                                $display("l.rori @%x ", adr_i);
273
                        end
274
                                                                                //      l.sb
275
                                                                                //      l.sd
276
                                                                                //      l.sh
277
                        else if (rand == 22) begin
278
                            dat[cmls][31:26] <= 6'h38;
279
                                dat[cmls][25:11] <= $random();
280
                                dat[cmls][10:0] <= 11'h008;              //      l.sll           =0x38h ..0.. 8
281
                                $display("l.sll @%x ", adr_i);
282
                        end
283
                        else if (rand == 23) begin
284
                            dat[cmls][31:26] <= 6'h2e;
285
                                dat[cmls][25:8] <= $random();
286
                                dat[cmls][7:6] <= 2'h0;                 //      l.slli  =0x2eh ..0.. 
287
                                dat[cmls][5:0] <= $random();
288
                                $display("l.slli @%x ", adr_i);
289
                        end
290
                        else if (rand == 24) begin
291
                            dat[cmls][31:26] <= 6'h38;
292
                                dat[cmls][25:11] <= $random();
293
                                dat[cmls][10:0] <= 11'h088;              //      l.sra           =0x38h ..2. 8
294
                                $display("l.sra @%x ", adr_i);
295
                        end
296
                        else if (rand == 25) begin
297
                            dat[cmls][31:26] <= 6'h2e;
298
                                dat[cmls][25:8] <= $random();
299
                                dat[cmls][7:6] <= 2'h2;                 //      l.srai  =0x2eh ..2.. 
300
                                dat[cmls][5:0] <= $random();
301
                                $display("l.srai @%x ", adr_i);
302
                        end
303
                        else if (rand == 26) begin
304
                            dat[cmls][31:26] <= 6'h38;
305
                                dat[cmls][25:11] <= $random();
306
                                dat[cmls][10:0] <= 11'h048;              //      l.srl           =0x38h ..1.. 8
307
                                $display("l.srl @%x ", adr_i);
308
                        end
309
                        else if (rand == 27) begin
310
                            dat[cmls][31:26] <= 6'h2e;
311
                                dat[cmls][25:8] <= $random();
312
                                dat[cmls][7:6] <= 2'h1;                 //      l.srli  =0x2eh ..1.. 
313
                                dat[cmls][5:0] <= $random();
314
                                $display("l.srli @%x ", adr_i);
315
                        end
316
                        else if (rand == 28) begin
317
                            dat[cmls][31:26] <= 6'h38;
318
                                dat[cmls][25:11] <= $random();
319
                                dat[cmls][10:0] <= 11'h002;              //      l.sub           =0x38h ..0.. 2
320
                                $display("l.sub @%x ", adr_i);
321
                        end
322
                                                                                //      l.sw
323
                                                                                //      l.sys
324
                        else if (rand == 29) begin
325
                            dat[cmls][31:26] <= 6'h38;
326
                                dat[cmls][25:11] <= $random();
327
                                dat[cmls][10:0] <= 11'h005;              //      l.xor           =0x38h ..0.. 5
328
                                $display("l.xor @%x ", adr_i);
329
                        end
330
                        else if (rand == 30) begin
331
                            dat[cmls][31:26] <= 6'h2b;          //      l.xori  =0x2bh
332
                                dat[cmls][25:0] <= 26'h000_0000;
333
                                $display("l.xori @%x ", adr_i);
334
                        end
335
                        /////////////////////////
336
                        //      Set Flag Section
337
                        /////////////////////////
338
                                                                                //      l.sfeq
339
                        else if (rand == 31) begin
340
                            dat[cmls][31:21] <= 11'h720;
341
                                dat[cmls][20:11] <= $random();
342
                                dat[cmls][10:0] <= 11'h000;
343
                                $display("l.sfeq @%x ", adr_i);
344
                                lastSet[cmls] <= 1'b1;
345
                        end
346
 
347
                                                                                //      l.sfeqi
348
                        else if (rand == 32) begin
349
                            dat[cmls][31:21] <= 11'h5e0;
350
                                dat[cmls][20:0] <= $random();
351
                                $display("l.sfeqi @%x ", adr_i);
352
                                lastSet[cmls] <= 1'b1;
353
                        end
354
                                                                                //      l.sfges
355
                        else if (rand == 33) begin
356
                            dat[cmls][31:21] <= 11'h72b;
357
                                dat[cmls][20:11] <= $random();
358
                                dat[cmls][10:0] <= 11'h000;
359
                                $display("l.sfges @%x ", adr_i);
360
                                lastSet[cmls] <= 1'b1;
361
                        end
362
                                                                                //      l.sfgesi
363
                        else if (rand == 34) begin
364
                            dat[cmls][31:21] <= 11'h5eb;
365
                                dat[cmls][20:0] <= $random();
366
                                $display("l.sfgesi @%x ", adr_i);
367
                                lastSet[cmls] <= 1'b1;
368
                        end
369
                                                                                //      l.sfgeu
370
                        else if (rand == 35) begin
371
                            dat[cmls][31:21] <= 11'h723;
372
                                dat[cmls][20:11] <= $random();
373
                                dat[cmls][10:0] <= 11'h000;
374
                                $display("l.sfgeu @%x ", adr_i);
375
                                lastSet[cmls] <= 1'b1;
376
                        end
377
                                                                                //      l.sfgeui
378
                        else if (rand == 36) begin
379
                            dat[cmls][31:21] <= 11'h5e3;
380
                                dat[cmls][20:0] <= $random();
381
                                $display("l.sfgeui @%x ", adr_i);
382
                                lastSet[cmls] <= 1'b1;
383
                        end
384
                                                                                //      l.sfgts
385
                        else if (rand == 37) begin
386
                            dat[cmls][31:21] <= 11'h72a;
387
                                dat[cmls][20:11] <= $random();
388
                                dat[cmls][10:0] <= 11'h000;
389
                                $display("l.sfgts @%x ", adr_i);
390
                                lastSet[cmls] <= 1'b1;
391
                        end
392
                                                                                //      l.sfgtsi
393
                        else if (rand == 38) begin
394
                            dat[cmls][31:21] <= 11'h5ea;
395
                                dat[cmls][20:0] <= $random();
396
                                $display("l.sfgtsi @%x ", adr_i);
397
                                lastSet[cmls] <= 1'b1;
398
                        end
399
                                                                                //      l.sfgtu
400
                        else if (rand == 39) begin
401
                            dat[cmls][31:21] <= 11'h722;
402
                                dat[cmls][20:11] <= $random();
403
                                dat[cmls][10:0] <= 11'h000;
404
                                $display("l.sfgtu @%x ", adr_i);
405
                                lastSet[cmls] <= 1'b1;
406
                        end
407
                                                                                //      l.sfgtui
408
                        else if (rand == 40) begin
409
                            dat[cmls][31:21] <= 11'h5e2;
410
                                dat[cmls][20:0] <= $random();
411
                                $display("l.sfgtui @%x ", adr_i);
412
                                lastSet[cmls] <= 1'b1;
413
                        end
414
                                                                                //      l.sfles
415
                        else if (rand == 41) begin
416
                            dat[cmls][31:21] <= 11'h72d;
417
                                dat[cmls][20:11] <= $random();
418
                                dat[cmls][10:0] <= 11'h000;
419
                                $display("l.sfles @%x ", adr_i);
420
                                lastSet[cmls] <= 1'b1;
421
                        end
422
                                                                                //      l.sflesi
423
                        else if (rand == 42) begin
424
                            dat[cmls][31:21] <= 11'h5ed;
425
                                dat[cmls][20:0] <= $random();
426
                                $display("l.sflesi @%x ", adr_i);
427
                                lastSet[cmls] <= 1'b1;
428
                        end
429
                                                                                //      l.sfleu
430
                        else if (rand == 43) begin
431
                            dat[cmls][31:21] <= 11'h725;
432
                                dat[cmls][20:11] <= $random();
433
                                dat[cmls][10:0] <= 11'h000;
434
                                $display("l.sfleu @%x ", adr_i);
435
                                lastSet[cmls] <= 1'b1;
436
                        end
437
                                                                                //      l.sfleui
438
                        else if (rand == 44) begin
439
                            dat[cmls][31:21] <= 11'h5e5;
440
                                dat[cmls][20:0] <= $random();
441
                                $display("l.sfleui @%x ", adr_i);
442
                                lastSet[cmls] <= 1'b1;
443
                        end
444
                                                                                //      l.sflts
445
                        else if (rand == 45) begin
446
                            dat[cmls][31:21] <= 11'h72c;
447
                                dat[cmls][20:11] <= $random();
448
                                dat[cmls][10:0] <= 11'h000;
449
                                $display("l.sflts @%x ", adr_i);
450
                                lastSet[cmls] <= 1'b1;
451
                        end
452
                                                                                //      l.sfltsi
453
                        else if (rand == 46) begin
454
                            dat[cmls][31:21] <= 11'h5ec;
455
                                dat[cmls][20:0] <= $random();
456
                                $display("l.sfltsi @%x ", adr_i);
457
                                lastSet[cmls] <= 1'b1;
458
                        end
459
                                                                                //      l.sfltu
460
                        else if (rand == 47) begin
461
                            dat[cmls][31:21] <= 11'h724;
462
                                dat[cmls][20:11] <= $random();
463
                                dat[cmls][10:0] <= 11'h000;
464
                                $display("l.sfltu @%x ", adr_i);
465
                                lastSet[cmls] <= 1'b1;
466
                        end
467
                                                                                //      l.sfltui
468
                        else if (rand == 48) begin
469
                            dat[cmls][31:21] <= 11'h5e4;
470
                                dat[cmls][20:0] <= $random();
471
                                $display("l.sfltui @%x ", adr_i);
472
                                lastSet[cmls] <= 1'b1;
473
                        end
474
                                                                                //      l.sfne
475
                        else if (rand == 49) begin
476
                            dat[cmls][31:21] <= 11'h721;
477
                                dat[cmls][20:11] <= $random();
478
                                dat[cmls][10:0] <= 11'h000;
479
                                $display("l.sfltu @%x ", adr_i);
480
                                lastSet[cmls] <= 1'b1;
481
                        end
482
                                                                                //      l.sfnei
483
                        else if (rand == 50) begin
484
                            dat[cmls][31:21] <= 11'h5e1;
485
                                dat[cmls][20:0] <= $random();
486
                                $display("l.sfnei @%x ", adr_i);
487
                                lastSet[cmls] <= 1'b1;
488
                        end
489
                end
490
                //////////////////////////////////////////////////////////////
491
                //      if memBorder reached, jmp register r0
492
                //      finish up pipeline stage
493
                //////////////////////////////////////////////////////////////
494
                if (adr_i == memBorder[cmls] - 4) begin
495
                        dat[cmls] <= {6'h15, 5'h00, 5'h00, 16'h0000};   //32'h15000000; // nop
496
                        $display("@%x %x  c", adr_i, dat[cmls]);
497
                end
498
                if (adr_i == memBorder[cmls] - 3) begin
499
                        dat[cmls] <= {6'h15, 5'h00, 5'h00, 16'h0000};   //32'h15000000; // nop
500
                        $display("@%x %x  c", adr_i, dat[cmls]);
501
                end
502
                if (adr_i == memBorder[cmls] - 2) begin
503
                        dat[cmls] <= {6'h11, 26'h0000000};                      //jmp register 0
504
                        $display("@%x %x  d", adr_i, dat[cmls]);
505
                end
506
                if (adr_i == memBorder[cmls] - 1) begin
507
                        dat[cmls] <= {6'h15, 5'h00, 5'h00, 16'h0000};   //32'h15000000; // nop
508
                        $display("@%x %x  e", adr_i, dat[cmls]);
509
                end
510
                if (adr_i == memBorder[cmls]) begin
511
                        dat[cmls] <= {6'h15, 5'h00, 5'h00, 16'h0000};   //32'h15000000; // nop
512
                        $display("@%x %x  g", adr_i, dat[cmls]);
513
                end
514
                end
515
end
516
else
517
        ack[cmls] <= 1'b0;
518
 
519
 
520
endmodule
521
 
522
 

powered by: WebSVN 2.1.0

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