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

Subversion Repositories or1200_hp

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

powered by: WebSVN 2.1.0

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