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

Subversion Repositories or1200_hp

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

powered by: WebSVN 2.1.0

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