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

Subversion Repositories ca_prng

[/] [ca_prng/] [trunk/] [src/] [rtl/] [ca_prng.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 joachim
//========================================================================
2
//
3
// ca_prng.v
4
// ---------
5
// Cellular Automata (CA) PRNG. This version produces PRNG words
6
// with 32 bits.
7
// 
8
// Version: v1.1, 2009-03-20
9
// Generated by: gen_ca_prng_rtl.py v2.0, 2009-03-20
10
// 
11
// 
12
// Author: Joachim Strombergson
13
// Copyright (c) 2008, InformAsic AB
14
// All rights reserved.
15
// 
16
// Redistribution and use in source and binary forms, with or without
17
// modification, are permitted provided that the following conditions
18
// are met:
19
//     * Redistributions of source code must retain the above copyright
20
//       notice, this list of conditions and the following disclaimer.
21
// 
22
//     * Redistributions in binary form must reproduce the above
23
//       copyright notice, this list of conditions and the following
24
//       disclaimer in the documentation and/or other materials
25
//       provided with the distribution.
26
// 
27
// THIS SOFTWARE IS PROVIDED BY InformAsic AB ''AS IS'' AND ANY EXPRESS
28
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
29
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30
// ARE DISCLAIMED. IN NO EVENT SHALL InformAsic AB BE LIABLE FOR ANY
31
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
33
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
35
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
// 
39
//========================================================================
40
 
41
module ca_prng(
42 4 joachim
               input wire           clk,
43
               input wire           reset_n,
44 2 joachim
 
45 4 joachim
               input wire [31 : 0]  init_pattern_data,
46
               input wire           load_init_pattern,
47
               input wire           next_pattern,
48 2 joachim
 
49 4 joachim
               input wire [7 : 0]   update_rule,
50
               input wire           load_update_rule,
51 2 joachim
 
52 4 joachim
               output wire [31 : 0] prng_data
53
              );
54 2 joachim
 
55
 
56
  //--------------------------------------------------------------------
57
  // Constant declarations.
58
  //--------------------------------------------------------------------
59
  // DEFAULT_RULE
60
  // The Default update rule - rule 30.
61
  parameter [7 : 0] DEFAULT_RULE = 8'b00011110;
62
 
63
 
64
  //--------------------------------------------------------------------
65
  // Register declarations.
66
  //--------------------------------------------------------------------
67
  // ca_state_reg
68
  // State register for the CA cells, one bit for each cell.
69
  reg [31 : 0] ca_state_reg;
70
  reg [31 : 0] ca_state_new;
71
  reg          ca_state_we;
72
 
73
  // update_rule_reg
74
  // Register for the update rule.
75
  reg [7 : 0] update_rule_reg;
76
 
77
 
78
  //--------------------------------------------------------------------
79
  // Wire declarations.
80
  //--------------------------------------------------------------------
81
  // tmp_ca_state_new
82
  // temporary update vector. Is muxed to the real update vector
83
  // if the load_init_pattern control signal is not set.
84
  reg [31 : 0] tmp_ca_state_new;
85
 
86
 
87
  //--------------------------------------------------------------------
88
  // Assignments.
89
  //--------------------------------------------------------------------
90
  // Connect the PRNG output port to the CA state registers.
91
  assign prng_data = ca_state_reg;
92
 
93
 
94
  //--------------------------------------------------------------------
95
  // reg_update
96
  //
97
  // This clocked process impement all register updates including
98
  // synchronous, active low reset.
99
  //--------------------------------------------------------------------
100
  always @ (posedge clk)
101
    begin : reg_update
102
      if (!reset_n)
103
        begin
104
          // Register reset.
105
          update_rule_reg <= DEFAULT_RULE;
106
          ca_state_reg    <= 32'b00000000000000000000000000000000;
107
        end
108
      else
109
        begin
110
          // Normal register update.
111
 
112
          if (load_update_rule)
113
            begin
114
              update_rule_reg <= update_rule;
115
           end
116
 
117
          if (ca_state_we)
118
            begin
119
              ca_state_reg <= ca_state_new;
120
           end
121
         end
122
    end // reg_update
123
 
124
 
125
  //--------------------------------------------------------------------
126
  // ca_state_update
127
  //
128
  // State update logic for the CA cells. This is where we implement
129
  // the Rule 30-logic as well as init pattern assignment.
130
  //--------------------------------------------------------------------
131
  always @*
132
    begin : ca_state_update
133
      // Update for ca_state_reg bit 0.
134
      case({ca_state_reg[31], ca_state_reg[0], ca_state_reg[1]})
135
        0:
136
        begin
137
          tmp_ca_state_new[0] = update_rule_reg[0];
138
        end
139
        1:
140
        begin
141
          tmp_ca_state_new[0] = update_rule_reg[1];
142
        end
143
        2:
144
        begin
145
          tmp_ca_state_new[0] = update_rule_reg[2];
146
        end
147
        3:
148
        begin
149
          tmp_ca_state_new[0] = update_rule_reg[3];
150
        end
151
        4:
152
        begin
153
          tmp_ca_state_new[0] = update_rule_reg[4];
154
        end
155
        5:
156
        begin
157
          tmp_ca_state_new[0] = update_rule_reg[5];
158
        end
159
        6:
160
        begin
161
          tmp_ca_state_new[0] = update_rule_reg[6];
162
        end
163
        7:
164
        begin
165
          tmp_ca_state_new[0] = update_rule_reg[7];
166
        end
167
      endcase // tmp_ca_state_new[0]
168
 
169
      // Update for ca_state_reg bit 1.
170
      case({ca_state_reg[0], ca_state_reg[1], ca_state_reg[2]})
171
        0:
172
        begin
173
          tmp_ca_state_new[1] = update_rule_reg[0];
174
        end
175
        1:
176
        begin
177
          tmp_ca_state_new[1] = update_rule_reg[1];
178
        end
179
        2:
180
        begin
181
          tmp_ca_state_new[1] = update_rule_reg[2];
182
        end
183
        3:
184
        begin
185
          tmp_ca_state_new[1] = update_rule_reg[3];
186
        end
187
        4:
188
        begin
189
          tmp_ca_state_new[1] = update_rule_reg[4];
190
        end
191
        5:
192
        begin
193
          tmp_ca_state_new[1] = update_rule_reg[5];
194
        end
195
        6:
196
        begin
197
          tmp_ca_state_new[1] = update_rule_reg[6];
198
        end
199
        7:
200
        begin
201
          tmp_ca_state_new[1] = update_rule_reg[7];
202
        end
203
      endcase // tmp_ca_state_new[1]
204
 
205
      // Update for ca_state_reg bit 2.
206
      case({ca_state_reg[1], ca_state_reg[2], ca_state_reg[3]})
207
        0:
208
        begin
209
          tmp_ca_state_new[2] = update_rule_reg[0];
210
        end
211
        1:
212
        begin
213
          tmp_ca_state_new[2] = update_rule_reg[1];
214
        end
215
        2:
216
        begin
217
          tmp_ca_state_new[2] = update_rule_reg[2];
218
        end
219
        3:
220
        begin
221
          tmp_ca_state_new[2] = update_rule_reg[3];
222
        end
223
        4:
224
        begin
225
          tmp_ca_state_new[2] = update_rule_reg[4];
226
        end
227
        5:
228
        begin
229
          tmp_ca_state_new[2] = update_rule_reg[5];
230
        end
231
        6:
232
        begin
233
          tmp_ca_state_new[2] = update_rule_reg[6];
234
        end
235
        7:
236
        begin
237
          tmp_ca_state_new[2] = update_rule_reg[7];
238
        end
239
      endcase // tmp_ca_state_new[2]
240
 
241
      // Update for ca_state_reg bit 3.
242
      case({ca_state_reg[2], ca_state_reg[3], ca_state_reg[4]})
243
        0:
244
        begin
245
          tmp_ca_state_new[3] = update_rule_reg[0];
246
        end
247
        1:
248
        begin
249
          tmp_ca_state_new[3] = update_rule_reg[1];
250
        end
251
        2:
252
        begin
253
          tmp_ca_state_new[3] = update_rule_reg[2];
254
        end
255
        3:
256
        begin
257
          tmp_ca_state_new[3] = update_rule_reg[3];
258
        end
259
        4:
260
        begin
261
          tmp_ca_state_new[3] = update_rule_reg[4];
262
        end
263
        5:
264
        begin
265
          tmp_ca_state_new[3] = update_rule_reg[5];
266
        end
267
        6:
268
        begin
269
          tmp_ca_state_new[3] = update_rule_reg[6];
270
        end
271
        7:
272
        begin
273
          tmp_ca_state_new[3] = update_rule_reg[7];
274
        end
275
      endcase // tmp_ca_state_new[3]
276
 
277
      // Update for ca_state_reg bit 4.
278
      case({ca_state_reg[3], ca_state_reg[4], ca_state_reg[5]})
279
        0:
280
        begin
281
          tmp_ca_state_new[4] = update_rule_reg[0];
282
        end
283
        1:
284
        begin
285
          tmp_ca_state_new[4] = update_rule_reg[1];
286
        end
287
        2:
288
        begin
289
          tmp_ca_state_new[4] = update_rule_reg[2];
290
        end
291
        3:
292
        begin
293
          tmp_ca_state_new[4] = update_rule_reg[3];
294
        end
295
        4:
296
        begin
297
          tmp_ca_state_new[4] = update_rule_reg[4];
298
        end
299
        5:
300
        begin
301
          tmp_ca_state_new[4] = update_rule_reg[5];
302
        end
303
        6:
304
        begin
305
          tmp_ca_state_new[4] = update_rule_reg[6];
306
        end
307
        7:
308
        begin
309
          tmp_ca_state_new[4] = update_rule_reg[7];
310
        end
311
      endcase // tmp_ca_state_new[4]
312
 
313
      // Update for ca_state_reg bit 5.
314
      case({ca_state_reg[4], ca_state_reg[5], ca_state_reg[6]})
315
        0:
316
        begin
317
          tmp_ca_state_new[5] = update_rule_reg[0];
318
        end
319
        1:
320
        begin
321
          tmp_ca_state_new[5] = update_rule_reg[1];
322
        end
323
        2:
324
        begin
325
          tmp_ca_state_new[5] = update_rule_reg[2];
326
        end
327
        3:
328
        begin
329
          tmp_ca_state_new[5] = update_rule_reg[3];
330
        end
331
        4:
332
        begin
333
          tmp_ca_state_new[5] = update_rule_reg[4];
334
        end
335
        5:
336
        begin
337
          tmp_ca_state_new[5] = update_rule_reg[5];
338
        end
339
        6:
340
        begin
341
          tmp_ca_state_new[5] = update_rule_reg[6];
342
        end
343
        7:
344
        begin
345
          tmp_ca_state_new[5] = update_rule_reg[7];
346
        end
347
      endcase // tmp_ca_state_new[5]
348
 
349
      // Update for ca_state_reg bit 6.
350
      case({ca_state_reg[5], ca_state_reg[6], ca_state_reg[7]})
351
        0:
352
        begin
353
          tmp_ca_state_new[6] = update_rule_reg[0];
354
        end
355
        1:
356
        begin
357
          tmp_ca_state_new[6] = update_rule_reg[1];
358
        end
359
        2:
360
        begin
361
          tmp_ca_state_new[6] = update_rule_reg[2];
362
        end
363
        3:
364
        begin
365
          tmp_ca_state_new[6] = update_rule_reg[3];
366
        end
367
        4:
368
        begin
369
          tmp_ca_state_new[6] = update_rule_reg[4];
370
        end
371
        5:
372
        begin
373
          tmp_ca_state_new[6] = update_rule_reg[5];
374
        end
375
        6:
376
        begin
377
          tmp_ca_state_new[6] = update_rule_reg[6];
378
        end
379
        7:
380
        begin
381
          tmp_ca_state_new[6] = update_rule_reg[7];
382
        end
383
      endcase // tmp_ca_state_new[6]
384
 
385
      // Update for ca_state_reg bit 7.
386
      case({ca_state_reg[6], ca_state_reg[7], ca_state_reg[8]})
387
        0:
388
        begin
389
          tmp_ca_state_new[7] = update_rule_reg[0];
390
        end
391
        1:
392
        begin
393
          tmp_ca_state_new[7] = update_rule_reg[1];
394
        end
395
        2:
396
        begin
397
          tmp_ca_state_new[7] = update_rule_reg[2];
398
        end
399
        3:
400
        begin
401
          tmp_ca_state_new[7] = update_rule_reg[3];
402
        end
403
        4:
404
        begin
405
          tmp_ca_state_new[7] = update_rule_reg[4];
406
        end
407
        5:
408
        begin
409
          tmp_ca_state_new[7] = update_rule_reg[5];
410
        end
411
        6:
412
        begin
413
          tmp_ca_state_new[7] = update_rule_reg[6];
414
        end
415
        7:
416
        begin
417
          tmp_ca_state_new[7] = update_rule_reg[7];
418
        end
419
      endcase // tmp_ca_state_new[7]
420
 
421
      // Update for ca_state_reg bit 8.
422
      case({ca_state_reg[7], ca_state_reg[8], ca_state_reg[9]})
423
        0:
424
        begin
425
          tmp_ca_state_new[8] = update_rule_reg[0];
426
        end
427
        1:
428
        begin
429
          tmp_ca_state_new[8] = update_rule_reg[1];
430
        end
431
        2:
432
        begin
433
          tmp_ca_state_new[8] = update_rule_reg[2];
434
        end
435
        3:
436
        begin
437
          tmp_ca_state_new[8] = update_rule_reg[3];
438
        end
439
        4:
440
        begin
441
          tmp_ca_state_new[8] = update_rule_reg[4];
442
        end
443
        5:
444
        begin
445
          tmp_ca_state_new[8] = update_rule_reg[5];
446
        end
447
        6:
448
        begin
449
          tmp_ca_state_new[8] = update_rule_reg[6];
450
        end
451
        7:
452
        begin
453
          tmp_ca_state_new[8] = update_rule_reg[7];
454
        end
455
      endcase // tmp_ca_state_new[8]
456
 
457
      // Update for ca_state_reg bit 9.
458
      case({ca_state_reg[8], ca_state_reg[9], ca_state_reg[10]})
459
        0:
460
        begin
461
          tmp_ca_state_new[9] = update_rule_reg[0];
462
        end
463
        1:
464
        begin
465
          tmp_ca_state_new[9] = update_rule_reg[1];
466
        end
467
        2:
468
        begin
469
          tmp_ca_state_new[9] = update_rule_reg[2];
470
        end
471
        3:
472
        begin
473
          tmp_ca_state_new[9] = update_rule_reg[3];
474
        end
475
        4:
476
        begin
477
          tmp_ca_state_new[9] = update_rule_reg[4];
478
        end
479
        5:
480
        begin
481
          tmp_ca_state_new[9] = update_rule_reg[5];
482
        end
483
        6:
484
        begin
485
          tmp_ca_state_new[9] = update_rule_reg[6];
486
        end
487
        7:
488
        begin
489
          tmp_ca_state_new[9] = update_rule_reg[7];
490
        end
491
      endcase // tmp_ca_state_new[9]
492
 
493
      // Update for ca_state_reg bit 10.
494
      case({ca_state_reg[9], ca_state_reg[10], ca_state_reg[11]})
495
        0:
496
        begin
497
          tmp_ca_state_new[10] = update_rule_reg[0];
498
        end
499
        1:
500
        begin
501
          tmp_ca_state_new[10] = update_rule_reg[1];
502
        end
503
        2:
504
        begin
505
          tmp_ca_state_new[10] = update_rule_reg[2];
506
        end
507
        3:
508
        begin
509
          tmp_ca_state_new[10] = update_rule_reg[3];
510
        end
511
        4:
512
        begin
513
          tmp_ca_state_new[10] = update_rule_reg[4];
514
        end
515
        5:
516
        begin
517
          tmp_ca_state_new[10] = update_rule_reg[5];
518
        end
519
        6:
520
        begin
521
          tmp_ca_state_new[10] = update_rule_reg[6];
522
        end
523
        7:
524
        begin
525
          tmp_ca_state_new[10] = update_rule_reg[7];
526
        end
527
      endcase // tmp_ca_state_new[10]
528
 
529
      // Update for ca_state_reg bit 11.
530
      case({ca_state_reg[10], ca_state_reg[11], ca_state_reg[12]})
531
        0:
532
        begin
533
          tmp_ca_state_new[11] = update_rule_reg[0];
534
        end
535
        1:
536
        begin
537
          tmp_ca_state_new[11] = update_rule_reg[1];
538
        end
539
        2:
540
        begin
541
          tmp_ca_state_new[11] = update_rule_reg[2];
542
        end
543
        3:
544
        begin
545
          tmp_ca_state_new[11] = update_rule_reg[3];
546
        end
547
        4:
548
        begin
549
          tmp_ca_state_new[11] = update_rule_reg[4];
550
        end
551
        5:
552
        begin
553
          tmp_ca_state_new[11] = update_rule_reg[5];
554
        end
555
        6:
556
        begin
557
          tmp_ca_state_new[11] = update_rule_reg[6];
558
        end
559
        7:
560
        begin
561
          tmp_ca_state_new[11] = update_rule_reg[7];
562
        end
563
      endcase // tmp_ca_state_new[11]
564
 
565
      // Update for ca_state_reg bit 12.
566
      case({ca_state_reg[11], ca_state_reg[12], ca_state_reg[13]})
567
        0:
568
        begin
569
          tmp_ca_state_new[12] = update_rule_reg[0];
570
        end
571
        1:
572
        begin
573
          tmp_ca_state_new[12] = update_rule_reg[1];
574
        end
575
        2:
576
        begin
577
          tmp_ca_state_new[12] = update_rule_reg[2];
578
        end
579
        3:
580
        begin
581
          tmp_ca_state_new[12] = update_rule_reg[3];
582
        end
583
        4:
584
        begin
585
          tmp_ca_state_new[12] = update_rule_reg[4];
586
        end
587
        5:
588
        begin
589
          tmp_ca_state_new[12] = update_rule_reg[5];
590
        end
591
        6:
592
        begin
593
          tmp_ca_state_new[12] = update_rule_reg[6];
594
        end
595
        7:
596
        begin
597
          tmp_ca_state_new[12] = update_rule_reg[7];
598
        end
599
      endcase // tmp_ca_state_new[12]
600
 
601
      // Update for ca_state_reg bit 13.
602
      case({ca_state_reg[12], ca_state_reg[13], ca_state_reg[14]})
603
        0:
604
        begin
605
          tmp_ca_state_new[13] = update_rule_reg[0];
606
        end
607
        1:
608
        begin
609
          tmp_ca_state_new[13] = update_rule_reg[1];
610
        end
611
        2:
612
        begin
613
          tmp_ca_state_new[13] = update_rule_reg[2];
614
        end
615
        3:
616
        begin
617
          tmp_ca_state_new[13] = update_rule_reg[3];
618
        end
619
        4:
620
        begin
621
          tmp_ca_state_new[13] = update_rule_reg[4];
622
        end
623
        5:
624
        begin
625
          tmp_ca_state_new[13] = update_rule_reg[5];
626
        end
627
        6:
628
        begin
629
          tmp_ca_state_new[13] = update_rule_reg[6];
630
        end
631
        7:
632
        begin
633
          tmp_ca_state_new[13] = update_rule_reg[7];
634
        end
635
      endcase // tmp_ca_state_new[13]
636
 
637
      // Update for ca_state_reg bit 14.
638
      case({ca_state_reg[13], ca_state_reg[14], ca_state_reg[15]})
639
        0:
640
        begin
641
          tmp_ca_state_new[14] = update_rule_reg[0];
642
        end
643
        1:
644
        begin
645
          tmp_ca_state_new[14] = update_rule_reg[1];
646
        end
647
        2:
648
        begin
649
          tmp_ca_state_new[14] = update_rule_reg[2];
650
        end
651
        3:
652
        begin
653
          tmp_ca_state_new[14] = update_rule_reg[3];
654
        end
655
        4:
656
        begin
657
          tmp_ca_state_new[14] = update_rule_reg[4];
658
        end
659
        5:
660
        begin
661
          tmp_ca_state_new[14] = update_rule_reg[5];
662
        end
663
        6:
664
        begin
665
          tmp_ca_state_new[14] = update_rule_reg[6];
666
        end
667
        7:
668
        begin
669
          tmp_ca_state_new[14] = update_rule_reg[7];
670
        end
671
      endcase // tmp_ca_state_new[14]
672
 
673
      // Update for ca_state_reg bit 15.
674
      case({ca_state_reg[14], ca_state_reg[15], ca_state_reg[16]})
675
        0:
676
        begin
677
          tmp_ca_state_new[15] = update_rule_reg[0];
678
        end
679
        1:
680
        begin
681
          tmp_ca_state_new[15] = update_rule_reg[1];
682
        end
683
        2:
684
        begin
685
          tmp_ca_state_new[15] = update_rule_reg[2];
686
        end
687
        3:
688
        begin
689
          tmp_ca_state_new[15] = update_rule_reg[3];
690
        end
691
        4:
692
        begin
693
          tmp_ca_state_new[15] = update_rule_reg[4];
694
        end
695
        5:
696
        begin
697
          tmp_ca_state_new[15] = update_rule_reg[5];
698
        end
699
        6:
700
        begin
701
          tmp_ca_state_new[15] = update_rule_reg[6];
702
        end
703
        7:
704
        begin
705
          tmp_ca_state_new[15] = update_rule_reg[7];
706
        end
707
      endcase // tmp_ca_state_new[15]
708
 
709
      // Update for ca_state_reg bit 16.
710
      case({ca_state_reg[15], ca_state_reg[16], ca_state_reg[17]})
711
        0:
712
        begin
713
          tmp_ca_state_new[16] = update_rule_reg[0];
714
        end
715
        1:
716
        begin
717
          tmp_ca_state_new[16] = update_rule_reg[1];
718
        end
719
        2:
720
        begin
721
          tmp_ca_state_new[16] = update_rule_reg[2];
722
        end
723
        3:
724
        begin
725
          tmp_ca_state_new[16] = update_rule_reg[3];
726
        end
727
        4:
728
        begin
729
          tmp_ca_state_new[16] = update_rule_reg[4];
730
        end
731
        5:
732
        begin
733
          tmp_ca_state_new[16] = update_rule_reg[5];
734
        end
735
        6:
736
        begin
737
          tmp_ca_state_new[16] = update_rule_reg[6];
738
        end
739
        7:
740
        begin
741
          tmp_ca_state_new[16] = update_rule_reg[7];
742
        end
743
      endcase // tmp_ca_state_new[16]
744
 
745
      // Update for ca_state_reg bit 17.
746
      case({ca_state_reg[16], ca_state_reg[17], ca_state_reg[18]})
747
        0:
748
        begin
749
          tmp_ca_state_new[17] = update_rule_reg[0];
750
        end
751
        1:
752
        begin
753
          tmp_ca_state_new[17] = update_rule_reg[1];
754
        end
755
        2:
756
        begin
757
          tmp_ca_state_new[17] = update_rule_reg[2];
758
        end
759
        3:
760
        begin
761
          tmp_ca_state_new[17] = update_rule_reg[3];
762
        end
763
        4:
764
        begin
765
          tmp_ca_state_new[17] = update_rule_reg[4];
766
        end
767
        5:
768
        begin
769
          tmp_ca_state_new[17] = update_rule_reg[5];
770
        end
771
        6:
772
        begin
773
          tmp_ca_state_new[17] = update_rule_reg[6];
774
        end
775
        7:
776
        begin
777
          tmp_ca_state_new[17] = update_rule_reg[7];
778
        end
779
      endcase // tmp_ca_state_new[17]
780
 
781
      // Update for ca_state_reg bit 18.
782
      case({ca_state_reg[17], ca_state_reg[18], ca_state_reg[19]})
783
        0:
784
        begin
785
          tmp_ca_state_new[18] = update_rule_reg[0];
786
        end
787
        1:
788
        begin
789
          tmp_ca_state_new[18] = update_rule_reg[1];
790
        end
791
        2:
792
        begin
793
          tmp_ca_state_new[18] = update_rule_reg[2];
794
        end
795
        3:
796
        begin
797
          tmp_ca_state_new[18] = update_rule_reg[3];
798
        end
799
        4:
800
        begin
801
          tmp_ca_state_new[18] = update_rule_reg[4];
802
        end
803
        5:
804
        begin
805
          tmp_ca_state_new[18] = update_rule_reg[5];
806
        end
807
        6:
808
        begin
809
          tmp_ca_state_new[18] = update_rule_reg[6];
810
        end
811
        7:
812
        begin
813
          tmp_ca_state_new[18] = update_rule_reg[7];
814
        end
815
      endcase // tmp_ca_state_new[18]
816
 
817
      // Update for ca_state_reg bit 19.
818
      case({ca_state_reg[18], ca_state_reg[19], ca_state_reg[20]})
819
        0:
820
        begin
821
          tmp_ca_state_new[19] = update_rule_reg[0];
822
        end
823
        1:
824
        begin
825
          tmp_ca_state_new[19] = update_rule_reg[1];
826
        end
827
        2:
828
        begin
829
          tmp_ca_state_new[19] = update_rule_reg[2];
830
        end
831
        3:
832
        begin
833
          tmp_ca_state_new[19] = update_rule_reg[3];
834
        end
835
        4:
836
        begin
837
          tmp_ca_state_new[19] = update_rule_reg[4];
838
        end
839
        5:
840
        begin
841
          tmp_ca_state_new[19] = update_rule_reg[5];
842
        end
843
        6:
844
        begin
845
          tmp_ca_state_new[19] = update_rule_reg[6];
846
        end
847
        7:
848
        begin
849
          tmp_ca_state_new[19] = update_rule_reg[7];
850
        end
851
      endcase // tmp_ca_state_new[19]
852
 
853
      // Update for ca_state_reg bit 20.
854
      case({ca_state_reg[19], ca_state_reg[20], ca_state_reg[21]})
855
        0:
856
        begin
857
          tmp_ca_state_new[20] = update_rule_reg[0];
858
        end
859
        1:
860
        begin
861
          tmp_ca_state_new[20] = update_rule_reg[1];
862
        end
863
        2:
864
        begin
865
          tmp_ca_state_new[20] = update_rule_reg[2];
866
        end
867
        3:
868
        begin
869
          tmp_ca_state_new[20] = update_rule_reg[3];
870
        end
871
        4:
872
        begin
873
          tmp_ca_state_new[20] = update_rule_reg[4];
874
        end
875
        5:
876
        begin
877
          tmp_ca_state_new[20] = update_rule_reg[5];
878
        end
879
        6:
880
        begin
881
          tmp_ca_state_new[20] = update_rule_reg[6];
882
        end
883
        7:
884
        begin
885
          tmp_ca_state_new[20] = update_rule_reg[7];
886
        end
887
      endcase // tmp_ca_state_new[20]
888
 
889
      // Update for ca_state_reg bit 21.
890
      case({ca_state_reg[20], ca_state_reg[21], ca_state_reg[22]})
891
        0:
892
        begin
893
          tmp_ca_state_new[21] = update_rule_reg[0];
894
        end
895
        1:
896
        begin
897
          tmp_ca_state_new[21] = update_rule_reg[1];
898
        end
899
        2:
900
        begin
901
          tmp_ca_state_new[21] = update_rule_reg[2];
902
        end
903
        3:
904
        begin
905
          tmp_ca_state_new[21] = update_rule_reg[3];
906
        end
907
        4:
908
        begin
909
          tmp_ca_state_new[21] = update_rule_reg[4];
910
        end
911
        5:
912
        begin
913
          tmp_ca_state_new[21] = update_rule_reg[5];
914
        end
915
        6:
916
        begin
917
          tmp_ca_state_new[21] = update_rule_reg[6];
918
        end
919
        7:
920
        begin
921
          tmp_ca_state_new[21] = update_rule_reg[7];
922
        end
923
      endcase // tmp_ca_state_new[21]
924
 
925
      // Update for ca_state_reg bit 22.
926
      case({ca_state_reg[21], ca_state_reg[22], ca_state_reg[23]})
927
        0:
928
        begin
929
          tmp_ca_state_new[22] = update_rule_reg[0];
930
        end
931
        1:
932
        begin
933
          tmp_ca_state_new[22] = update_rule_reg[1];
934
        end
935
        2:
936
        begin
937
          tmp_ca_state_new[22] = update_rule_reg[2];
938
        end
939
        3:
940
        begin
941
          tmp_ca_state_new[22] = update_rule_reg[3];
942
        end
943
        4:
944
        begin
945
          tmp_ca_state_new[22] = update_rule_reg[4];
946
        end
947
        5:
948
        begin
949
          tmp_ca_state_new[22] = update_rule_reg[5];
950
        end
951
        6:
952
        begin
953
          tmp_ca_state_new[22] = update_rule_reg[6];
954
        end
955
        7:
956
        begin
957
          tmp_ca_state_new[22] = update_rule_reg[7];
958
        end
959
      endcase // tmp_ca_state_new[22]
960
 
961
      // Update for ca_state_reg bit 23.
962
      case({ca_state_reg[22], ca_state_reg[23], ca_state_reg[24]})
963
        0:
964
        begin
965
          tmp_ca_state_new[23] = update_rule_reg[0];
966
        end
967
        1:
968
        begin
969
          tmp_ca_state_new[23] = update_rule_reg[1];
970
        end
971
        2:
972
        begin
973
          tmp_ca_state_new[23] = update_rule_reg[2];
974
        end
975
        3:
976
        begin
977
          tmp_ca_state_new[23] = update_rule_reg[3];
978
        end
979
        4:
980
        begin
981
          tmp_ca_state_new[23] = update_rule_reg[4];
982
        end
983
        5:
984
        begin
985
          tmp_ca_state_new[23] = update_rule_reg[5];
986
        end
987
        6:
988
        begin
989
          tmp_ca_state_new[23] = update_rule_reg[6];
990
        end
991
        7:
992
        begin
993
          tmp_ca_state_new[23] = update_rule_reg[7];
994
        end
995
      endcase // tmp_ca_state_new[23]
996
 
997
      // Update for ca_state_reg bit 24.
998
      case({ca_state_reg[23], ca_state_reg[24], ca_state_reg[25]})
999
        0:
1000
        begin
1001
          tmp_ca_state_new[24] = update_rule_reg[0];
1002
        end
1003
        1:
1004
        begin
1005
          tmp_ca_state_new[24] = update_rule_reg[1];
1006
        end
1007
        2:
1008
        begin
1009
          tmp_ca_state_new[24] = update_rule_reg[2];
1010
        end
1011
        3:
1012
        begin
1013
          tmp_ca_state_new[24] = update_rule_reg[3];
1014
        end
1015
        4:
1016
        begin
1017
          tmp_ca_state_new[24] = update_rule_reg[4];
1018
        end
1019
        5:
1020
        begin
1021
          tmp_ca_state_new[24] = update_rule_reg[5];
1022
        end
1023
        6:
1024
        begin
1025
          tmp_ca_state_new[24] = update_rule_reg[6];
1026
        end
1027
        7:
1028
        begin
1029
          tmp_ca_state_new[24] = update_rule_reg[7];
1030
        end
1031
      endcase // tmp_ca_state_new[24]
1032
 
1033
      // Update for ca_state_reg bit 25.
1034
      case({ca_state_reg[24], ca_state_reg[25], ca_state_reg[26]})
1035
        0:
1036
        begin
1037
          tmp_ca_state_new[25] = update_rule_reg[0];
1038
        end
1039
        1:
1040
        begin
1041
          tmp_ca_state_new[25] = update_rule_reg[1];
1042
        end
1043
        2:
1044
        begin
1045
          tmp_ca_state_new[25] = update_rule_reg[2];
1046
        end
1047
        3:
1048
        begin
1049
          tmp_ca_state_new[25] = update_rule_reg[3];
1050
        end
1051
        4:
1052
        begin
1053
          tmp_ca_state_new[25] = update_rule_reg[4];
1054
        end
1055
        5:
1056
        begin
1057
          tmp_ca_state_new[25] = update_rule_reg[5];
1058
        end
1059
        6:
1060
        begin
1061
          tmp_ca_state_new[25] = update_rule_reg[6];
1062
        end
1063
        7:
1064
        begin
1065
          tmp_ca_state_new[25] = update_rule_reg[7];
1066
        end
1067
      endcase // tmp_ca_state_new[25]
1068
 
1069
      // Update for ca_state_reg bit 26.
1070
      case({ca_state_reg[25], ca_state_reg[26], ca_state_reg[27]})
1071
        0:
1072
        begin
1073
          tmp_ca_state_new[26] = update_rule_reg[0];
1074
        end
1075
        1:
1076
        begin
1077
          tmp_ca_state_new[26] = update_rule_reg[1];
1078
        end
1079
        2:
1080
        begin
1081
          tmp_ca_state_new[26] = update_rule_reg[2];
1082
        end
1083
        3:
1084
        begin
1085
          tmp_ca_state_new[26] = update_rule_reg[3];
1086
        end
1087
        4:
1088
        begin
1089
          tmp_ca_state_new[26] = update_rule_reg[4];
1090
        end
1091
        5:
1092
        begin
1093
          tmp_ca_state_new[26] = update_rule_reg[5];
1094
        end
1095
        6:
1096
        begin
1097
          tmp_ca_state_new[26] = update_rule_reg[6];
1098
        end
1099
        7:
1100
        begin
1101
          tmp_ca_state_new[26] = update_rule_reg[7];
1102
        end
1103
      endcase // tmp_ca_state_new[26]
1104
 
1105
      // Update for ca_state_reg bit 27.
1106
      case({ca_state_reg[26], ca_state_reg[27], ca_state_reg[28]})
1107
        0:
1108
        begin
1109
          tmp_ca_state_new[27] = update_rule_reg[0];
1110
        end
1111
        1:
1112
        begin
1113
          tmp_ca_state_new[27] = update_rule_reg[1];
1114
        end
1115
        2:
1116
        begin
1117
          tmp_ca_state_new[27] = update_rule_reg[2];
1118
        end
1119
        3:
1120
        begin
1121
          tmp_ca_state_new[27] = update_rule_reg[3];
1122
        end
1123
        4:
1124
        begin
1125
          tmp_ca_state_new[27] = update_rule_reg[4];
1126
        end
1127
        5:
1128
        begin
1129
          tmp_ca_state_new[27] = update_rule_reg[5];
1130
        end
1131
        6:
1132
        begin
1133
          tmp_ca_state_new[27] = update_rule_reg[6];
1134
        end
1135
        7:
1136
        begin
1137
          tmp_ca_state_new[27] = update_rule_reg[7];
1138
        end
1139
      endcase // tmp_ca_state_new[27]
1140
 
1141
      // Update for ca_state_reg bit 28.
1142
      case({ca_state_reg[27], ca_state_reg[28], ca_state_reg[29]})
1143
        0:
1144
        begin
1145
          tmp_ca_state_new[28] = update_rule_reg[0];
1146
        end
1147
        1:
1148
        begin
1149
          tmp_ca_state_new[28] = update_rule_reg[1];
1150
        end
1151
        2:
1152
        begin
1153
          tmp_ca_state_new[28] = update_rule_reg[2];
1154
        end
1155
        3:
1156
        begin
1157
          tmp_ca_state_new[28] = update_rule_reg[3];
1158
        end
1159
        4:
1160
        begin
1161
          tmp_ca_state_new[28] = update_rule_reg[4];
1162
        end
1163
        5:
1164
        begin
1165
          tmp_ca_state_new[28] = update_rule_reg[5];
1166
        end
1167
        6:
1168
        begin
1169
          tmp_ca_state_new[28] = update_rule_reg[6];
1170
        end
1171
        7:
1172
        begin
1173
          tmp_ca_state_new[28] = update_rule_reg[7];
1174
        end
1175
      endcase // tmp_ca_state_new[28]
1176
 
1177
      // Update for ca_state_reg bit 29.
1178
      case({ca_state_reg[28], ca_state_reg[29], ca_state_reg[30]})
1179
        0:
1180
        begin
1181
          tmp_ca_state_new[29] = update_rule_reg[0];
1182
        end
1183
        1:
1184
        begin
1185
          tmp_ca_state_new[29] = update_rule_reg[1];
1186
        end
1187
        2:
1188
        begin
1189
          tmp_ca_state_new[29] = update_rule_reg[2];
1190
        end
1191
        3:
1192
        begin
1193
          tmp_ca_state_new[29] = update_rule_reg[3];
1194
        end
1195
        4:
1196
        begin
1197
          tmp_ca_state_new[29] = update_rule_reg[4];
1198
        end
1199
        5:
1200
        begin
1201
          tmp_ca_state_new[29] = update_rule_reg[5];
1202
        end
1203
        6:
1204
        begin
1205
          tmp_ca_state_new[29] = update_rule_reg[6];
1206
        end
1207
        7:
1208
        begin
1209
          tmp_ca_state_new[29] = update_rule_reg[7];
1210
        end
1211
      endcase // tmp_ca_state_new[29]
1212
 
1213
      // Update for ca_state_reg bit 30.
1214
      case({ca_state_reg[29], ca_state_reg[30], ca_state_reg[31]})
1215
        0:
1216
        begin
1217
          tmp_ca_state_new[30] = update_rule_reg[0];
1218
        end
1219
        1:
1220
        begin
1221
          tmp_ca_state_new[30] = update_rule_reg[1];
1222
        end
1223
        2:
1224
        begin
1225
          tmp_ca_state_new[30] = update_rule_reg[2];
1226
        end
1227
        3:
1228
        begin
1229
          tmp_ca_state_new[30] = update_rule_reg[3];
1230
        end
1231
        4:
1232
        begin
1233
          tmp_ca_state_new[30] = update_rule_reg[4];
1234
        end
1235
        5:
1236
        begin
1237
          tmp_ca_state_new[30] = update_rule_reg[5];
1238
        end
1239
        6:
1240
        begin
1241
          tmp_ca_state_new[30] = update_rule_reg[6];
1242
        end
1243
        7:
1244
        begin
1245
          tmp_ca_state_new[30] = update_rule_reg[7];
1246
        end
1247
      endcase // tmp_ca_state_new[30]
1248
 
1249
      // Update for ca_state_reg bit 31.
1250
      case({ca_state_reg[30], ca_state_reg[31], ca_state_reg[0]})
1251
        0:
1252
        begin
1253
          tmp_ca_state_new[31] = update_rule_reg[0];
1254
        end
1255
        1:
1256
        begin
1257
          tmp_ca_state_new[31] = update_rule_reg[1];
1258
        end
1259
        2:
1260
        begin
1261
          tmp_ca_state_new[31] = update_rule_reg[2];
1262
        end
1263
        3:
1264
        begin
1265
          tmp_ca_state_new[31] = update_rule_reg[3];
1266
        end
1267
        4:
1268
        begin
1269
          tmp_ca_state_new[31] = update_rule_reg[4];
1270
        end
1271
        5:
1272
        begin
1273
          tmp_ca_state_new[31] = update_rule_reg[5];
1274
        end
1275
        6:
1276
        begin
1277
          tmp_ca_state_new[31] = update_rule_reg[6];
1278
        end
1279
        7:
1280
        begin
1281
          tmp_ca_state_new[31] = update_rule_reg[7];
1282
        end
1283
      endcase // tmp_ca_state_new[31]
1284
 
1285
 
1286
      if (load_init_pattern)
1287
        begin
1288
          ca_state_new = init_pattern_data;
1289
        end
1290
      else
1291
        begin
1292
          ca_state_new = tmp_ca_state_new;
1293
        end
1294
 
1295
      // Should an init pattern or the next pattern be stored in
1296
      // the CA array?
1297
      if (load_init_pattern || next_pattern)
1298
        begin
1299
          ca_state_we = 1;
1300
        end
1301
      else
1302
        begin
1303
          ca_state_we = 0;
1304
        end
1305
    end // ca_state_update
1306
 
1307
 
1308
endmodule // ca_prng
1309
//========================================================================
1310
// EOF ca_prng.v
1311
//========================================================================

powered by: WebSVN 2.1.0

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