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

Subversion Repositories or1200_hp

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

powered by: WebSVN 2.1.0

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