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

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [soc/] [rtl/] [altera_ddr_ctrl/] [testbench/] [altera_ddr_mem_model.v] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 xianfeng
//Legal Notice: (C)2009 Altera Corporation. All rights reserved.  Your
2
//use of Altera Corporation's design tools, logic functions and other
3
//software and tools, and its AMPP partner logic functions, and any
4
//output files any of the foregoing (including device programming or
5
//simulation files), and any associated documentation or information are
6
//expressly subject to the terms and conditions of the Altera Program
7
//License Subscription Agreement or other applicable license agreement,
8
//including, without limitation, that your use is for the sole purpose
9
//of programming logic devices manufactured by Altera and sold by Altera
10
//or its authorized distributors.  Please refer to the applicable
11
//agreement for further details.
12
 
13
// synthesis translate_off
14
`timescale 1ns / 1ps
15
// synthesis translate_on
16
 
17
// turn off superfluous verilog processor warnings 
18
// altera message_level Level1 
19
// altera message_off 10034 10035 10036 10037 10230 10240 10030 
20
 
21
//Default depth for this memory model is 2048, do these when
22
//changing the depth.
23
//1)Set ARRAY_DEPTH generic/parameter from 2048 to new depth.
24
//2)Change mem_array depth from 2047 to (new depth - 1).
25
//3)VHDL only, don't forget the generic in component declaration
26
module altera_ddr_mem_model_ram_module (
27
                                         // inputs:
28
                                          data,
29
                                          rdaddress,
30
                                          wraddress,
31
                                          wrclock,
32
                                          wren,
33
 
34
                                         // outputs:
35
                                          q
36
                                       )
37
;
38
 
39
  parameter ARRAY_DEPTH = 2048;
40
 
41
 
42
  output  [ 31: 0] q;
43
  input   [ 31: 0] data;
44
  input   [ 22: 0] rdaddress;
45
  input   [ 22: 0] wraddress;
46
  input            wrclock;
47
  input            wren;
48
 
49
  wire    [ 31: 0] aq;
50
  reg     [ 55: 0] mem_array [2047: 0];
51
  wire    [ 31: 0] q;
52
  assign aq = mem_array[0][31:0];
53
 
54
//synthesis translate_off
55
//////////////// SIMULATION-ONLY CONTENTS
56
 
57
  reg     [  32 - 1: 0] out;
58
 
59
    integer i;
60
    reg found_valid_data;
61
    reg data_written;
62
 
63
    initial
64
    begin
65
        for (i = 0; i < ARRAY_DEPTH; i = i + 1)
66
            mem_array[i][0] <= 1'b0;
67
        data_written <= 1'b0;
68
    end
69
 
70
    always @(rdaddress)
71
    begin
72
        found_valid_data <= 1'b0;
73
        for (i = 0; i < ARRAY_DEPTH; i = i + 1)
74
        begin
75
            if (rdaddress == mem_array[i][56 - 1:56 - 23] && mem_array[i][0])
76
            begin
77
                out = mem_array[i][56 - 23 - 1:56 - 23 - 32];
78
                found_valid_data = 1'b1;
79
            end
80
        end
81
        if (!found_valid_data)
82
            out = 32'dX;
83
    end
84
 
85
    always @(posedge wrclock)
86
    if (wren)
87
    begin
88
        data_written <= 1'b0;
89
        for (i = 0; i < ARRAY_DEPTH; i = i + 1)
90
        begin
91
            if (wraddress == mem_array[i][56 - 1:56 - 23] && !data_written)
92
            begin
93
                mem_array[i][56 - 23 - 1:56 - 23 - 32] <= data;
94
                mem_array[i][0] <= 1'b1;
95
                data_written = 1'b1;
96
            end
97
            else if (!mem_array[i][0] && !data_written)
98
            begin
99
                mem_array[i] <= {wraddress,data,1'b1};
100
                data_written = 1'b1;
101
            end
102
        end
103
        if (!data_written)
104
        begin
105
            $write($time);
106
            $write(" --- Data could not be written, increase array depth or use full memory model --- ");
107
            $stop;
108
        end
109
    end
110
 
111
    assign q = out;
112
 
113
//////////////// END SIMULATION-ONLY CONTENTS
114
 
115
//synthesis translate_on
116
 
117
endmodule
118
 
119
 
120
 
121
// turn off superfluous verilog processor warnings 
122
// altera message_level Level1 
123
// altera message_off 10034 10035 10036 10037 10230 10240 10030 
124
 
125
module altera_ddr_mem_model (
126
                              // inputs:
127
                               mem_addr,
128
                               mem_ba,
129
                               mem_cas_n,
130
                               mem_cke,
131
                               mem_clk,
132
                               mem_clk_n,
133
                               mem_cs_n,
134
                               mem_dm,
135
                               mem_ras_n,
136
                               mem_we_n,
137
 
138
                              // outputs:
139
                               global_reset_n,
140
                               mem_dq,
141
                               mem_dqs
142
                            )
143
;
144
 
145
  output           global_reset_n;
146
  inout   [ 15: 0] mem_dq;
147
  inout   [  1: 0] mem_dqs;
148
  input   [ 12: 0] mem_addr;
149
  input   [  1: 0] mem_ba;
150
  input            mem_cas_n;
151
  input            mem_cke;
152
  input            mem_clk;
153
  input            mem_clk_n;
154
  input            mem_cs_n;
155
  input   [  1: 0] mem_dm;
156
  input            mem_ras_n;
157
  input            mem_we_n;
158
 
159
  wire    [ 23: 0] CODE;
160
  wire    [ 12: 0] a;
161
  wire    [  7: 0] addr_col;
162
  wire    [  1: 0] ba;
163
  wire             burst_term;
164
  reg              burst_term_cmd;
165
  reg     [ 10: 0] burst_term_pipe;
166
  reg     [  2: 0] burstlength;
167
  reg              burstmode;
168
  wire             cas_n;
169
  wire             cke;
170
  wire             clk;
171
  wire    [  2: 0] cmd_code;
172
  wire             cs_n;
173
  wire    [  1: 0] current_row;
174
  wire    [  1: 0] dm;
175
  reg     [  3: 0] dm_captured;
176
  reg     [ 31: 0] dq_captured;
177
  wire    [ 15: 0] dq_temp;
178
  wire             dq_valid;
179
  wire    [  1: 0] dqs_temp;
180
  wire             dqs_valid;
181
  reg              dqs_valid_temp;
182
  reg     [ 15: 0] first_half_dq;
183
  wire             global_reset_n;
184
  reg     [  3: 0] index;
185
  wire    [ 31: 0] mem_bytes;
186
  wire    [ 15: 0] mem_dq;
187
  wire    [  1: 0] mem_dqs;
188
  reg     [ 12: 0] open_rows [  3: 0];
189
  wire             ras_n;
190
  reg     [ 22: 0] rd_addr_pipe_0;
191
  reg     [ 22: 0] rd_addr_pipe_1;
192
  reg     [ 22: 0] rd_addr_pipe_10;
193
  reg     [ 22: 0] rd_addr_pipe_2;
194
  reg     [ 22: 0] rd_addr_pipe_3;
195
  reg     [ 22: 0] rd_addr_pipe_4;
196
  reg     [ 22: 0] rd_addr_pipe_5;
197
  reg     [ 22: 0] rd_addr_pipe_6;
198
  reg     [ 22: 0] rd_addr_pipe_7;
199
  reg     [ 22: 0] rd_addr_pipe_8;
200
  reg     [ 22: 0] rd_addr_pipe_9;
201
  reg     [ 22: 0] rd_burst_counter;
202
  reg     [ 10: 0] rd_valid_pipe;
203
  wire    [ 22: 0] read_addr_delayed;
204
  reg              read_cmd;
205
  reg              read_cmd_echo;
206
  wire    [ 31: 0] read_data;
207
  wire    [ 15: 0] read_dq;
208
  wire             read_valid;
209
  reg              read_valid_r;
210
  reg              read_valid_r2;
211
  reg              read_valid_r3;
212
  reg              read_valid_r4;
213
  reg              reset_n;
214
  wire    [ 22: 0] rmw_address;
215
  reg     [ 31: 0] rmw_temp;
216
  reg     [ 15: 0] second_half_dq;
217
  wire    [ 23: 0] txt_code;
218
  wire             we_n;
219
  wire    [ 22: 0] wr_addr_delayed;
220
  reg     [ 22: 0] wr_addr_delayed_r;
221
  reg     [ 22: 0] wr_addr_pipe_0;
222
  reg     [ 22: 0] wr_addr_pipe_1;
223
  reg     [ 22: 0] wr_addr_pipe_10;
224
  reg     [ 22: 0] wr_addr_pipe_2;
225
  reg     [ 22: 0] wr_addr_pipe_3;
226
  reg     [ 22: 0] wr_addr_pipe_4;
227
  reg     [ 22: 0] wr_addr_pipe_5;
228
  reg     [ 22: 0] wr_addr_pipe_6;
229
  reg     [ 22: 0] wr_addr_pipe_7;
230
  reg     [ 22: 0] wr_addr_pipe_8;
231
  reg     [ 22: 0] wr_addr_pipe_9;
232
  reg     [ 22: 0] wr_burst_counter;
233
  reg     [ 10: 0] wr_valid_pipe;
234
  reg     [ 10: 0] write_burst_length_pipe;
235
  reg              write_cmd;
236
  reg              write_cmd_echo;
237
  wire             write_to_ram;
238
  reg              write_to_ram_r;
239
  reg              write_valid;
240
  reg              write_valid_r;
241
  reg              write_valid_r2;
242
  reg              write_valid_r3;
243
initial
244
  begin
245
    $write("\n");
246
    $write("**********************************************************************\n");
247
    $write("This testbench includes a generated Altera memory model:\n");
248
    $write("'altera_ddr_mem_model.v', to simulate accesses to the DDR SDRAM memory.\n");
249
    $write(" \n");
250
    $write("**********************************************************************\n");
251
  end
252
  //Synchronous write when (CODE == 24'h205752 (write))
253
  altera_ddr_mem_model_ram_module altera_ddr_mem_model_ram
254
    (
255
      .data      (rmw_temp),
256
      .q         (read_data),
257
      .rdaddress (rmw_address),
258
      .wraddress (wr_addr_delayed_r),
259
      .wrclock   (clk),
260
      .wren      (write_to_ram_r)
261
    );
262
 
263
  assign clk = mem_clk;
264
  assign dm = mem_dm;
265
  assign cke = mem_cke;
266
  assign cs_n = mem_cs_n;
267
  assign ras_n = mem_ras_n;
268
  assign cas_n = mem_cas_n;
269
  assign we_n = mem_we_n;
270
  assign ba = mem_ba;
271
  assign a = mem_addr;
272
  //generate a fake reset inside the memory model
273
  assign global_reset_n = reset_n;
274
 
275
  initial
276
    begin
277
      reset_n <= 0;
278
      #100 reset_n <= 1;
279
    end
280
  assign cmd_code = (&cs_n) ? 3'b111 : {ras_n, cas_n, we_n};
281
  assign CODE = (&cs_n) ? 24'h494e48 : txt_code;
282
  assign addr_col = a[8 : 1];
283
  assign current_row = {ba};
284
  // Decode commands into their actions
285
  always @(posedge clk or negedge reset_n)
286
    begin
287
      if (reset_n == 0)
288
        begin
289
          write_cmd_echo <= 0;
290
          read_cmd_echo <= 0;
291
        end
292
      else // No Activity if the clock is
293
      if (cke)
294
        begin
295
          // This is a read command
296
          if (cmd_code == 3'b101)
297
              read_cmd <= 1'b1;
298
          else
299
            read_cmd <= 1'b0;
300
          // This is a write command
301
          if (cmd_code == 3'b100)
302
              write_cmd <= 1'b1;
303
          else
304
            write_cmd <= 1'b0;
305
          // This is to terminate a burst
306
          if (cmd_code == 3'b110)
307
              burst_term_cmd <= 1'b1;
308
          else
309
            burst_term_cmd <= 1'b0;
310
          // This is an activate - store the chip/row/bank address in the same order as the DDR controller
311
          if (cmd_code == 3'b011)
312
              open_rows[current_row] <= a;
313
        end
314
    end
315
 
316
 
317
  // Pipes are flushed here
318
  always @(posedge clk or negedge reset_n)
319
    begin
320
      if (reset_n == 0)
321
        begin
322
          wr_addr_pipe_1 <= 0;
323
          wr_addr_pipe_2 <= 0;
324
          wr_addr_pipe_3 <= 0;
325
          wr_addr_pipe_4 <= 0;
326
          wr_addr_pipe_5 <= 0;
327
          wr_addr_pipe_6 <= 0;
328
          wr_addr_pipe_7 <= 0;
329
          wr_addr_pipe_8 <= 0;
330
          wr_addr_pipe_9 <= 0;
331
          wr_addr_pipe_10 <= 0;
332
          rd_addr_pipe_1 <= 0;
333
          rd_addr_pipe_2 <= 0;
334
          rd_addr_pipe_3 <= 0;
335
          rd_addr_pipe_4 <= 0;
336
          rd_addr_pipe_5 <= 0;
337
          rd_addr_pipe_6 <= 0;
338
          rd_addr_pipe_7 <= 0;
339
          rd_addr_pipe_8 <= 0;
340
          rd_addr_pipe_9 <= 0;
341
          rd_addr_pipe_10 <= 0;
342
        end
343
      else // No Activity if the clock is
344
      if (cke)
345
        begin
346
          rd_addr_pipe_10 <= rd_addr_pipe_9;
347
          rd_addr_pipe_9 <= rd_addr_pipe_8;
348
          rd_addr_pipe_8 <= rd_addr_pipe_7;
349
          rd_addr_pipe_7 <= rd_addr_pipe_6;
350
          rd_addr_pipe_6 <= rd_addr_pipe_5;
351
          rd_addr_pipe_5 <= rd_addr_pipe_4;
352
          rd_addr_pipe_4 <= rd_addr_pipe_3;
353
          rd_addr_pipe_3 <= rd_addr_pipe_2;
354
          rd_addr_pipe_2 <= rd_addr_pipe_1;
355
          rd_addr_pipe_1 <= rd_addr_pipe_0;
356
          rd_valid_pipe[10 : 1] <= rd_valid_pipe[9 : 0];
357
          rd_valid_pipe[0] <= cmd_code == 3'b101;
358
          wr_addr_pipe_10 <= wr_addr_pipe_9;
359
          wr_addr_pipe_9 <= wr_addr_pipe_8;
360
          wr_addr_pipe_8 <= wr_addr_pipe_7;
361
          wr_addr_pipe_7 <= wr_addr_pipe_6;
362
          wr_addr_pipe_6 <= wr_addr_pipe_5;
363
          wr_addr_pipe_5 <= wr_addr_pipe_4;
364
          wr_addr_pipe_4 <= wr_addr_pipe_3;
365
          wr_addr_pipe_3 <= wr_addr_pipe_2;
366
          wr_addr_pipe_2 <= wr_addr_pipe_1;
367
          wr_addr_pipe_1 <= wr_addr_pipe_0;
368
          wr_valid_pipe[10 : 1] <= wr_valid_pipe[9 : 0];
369
          wr_valid_pipe[0] <= cmd_code == 3'b100;
370
          wr_addr_delayed_r <= wr_addr_delayed;
371
          write_burst_length_pipe[10 : 1] <= write_burst_length_pipe[9 : 0];
372
        end
373
    end
374
 
375
 
376
  // Decode CAS Latency from bits a[6:4]
377
  always @(posedge clk)
378
    begin
379
      // No Activity if the clock is
380
      if (cke)
381
          //Load mode register - set CAS latency, burst mode and length
382
          if (cmd_code == 3'b000 && ba == 2'b00)
383
            begin
384
              burstmode <= a[3];
385
              burstlength <= a[2 : 0] << 1;
386
              //CAS Latency = 2.0
387
              if (a[6 : 4] == 3'b010)
388
                  index <= 4'b0001;
389
              else //CAS Latency = 2.5
390
              if (a[6 : 4] == 3'b110)
391
                  index <= 4'b0001;
392
              else //CAS Latency = 3.0
393
              if (a[6 : 4] == 3'b011)
394
                  index <= 4'b0010;
395
              else //CAS Latency = 4.0
396
              if (a[6 : 4] == 3'b100)
397
                  index <= 4'b0011;
398
              else
399
                index <= 4'b0100;
400
            end
401
    end
402
 
403
 
404
  // Burst support - make the wr_addr & rd_addr keep counting
405
  always @(posedge clk or negedge reset_n)
406
    begin
407
      if (reset_n == 0)
408
        begin
409
          wr_addr_pipe_0 <= 0;
410
          rd_addr_pipe_0 <= 0;
411
        end
412
      else
413
        begin
414
          // Reset write address otherwise if the first write is partial it breaks!
415
          if (cmd_code == 3'b000 && ba == 2'b00)
416
            begin
417
              wr_addr_pipe_0 <= 0;
418
              wr_burst_counter <= 0;
419
            end
420
          else if (cmd_code == 3'b100)
421
            begin
422
              wr_addr_pipe_0 <= {ba,open_rows[current_row],addr_col};
423
              wr_burst_counter[22 : 1] <= {ba,open_rows[current_row],addr_col[7 : 1]};
424
              wr_burst_counter[0] <= addr_col[0] + 1;
425
            end
426
          else if (write_cmd || write_to_ram || write_cmd_echo)
427
            begin
428
              wr_addr_pipe_0 <= wr_burst_counter;
429
              wr_burst_counter[0] <= wr_burst_counter[0] + 1;
430
            end
431
          else
432
            wr_addr_pipe_0 <= 0;
433
          // Reset read address otherwise if the first write is partial it breaks!
434
          if (cmd_code == 3'b000 && ba == 2'b00)
435
              rd_addr_pipe_0 <= 0;
436
          else if (cmd_code == 3'b101)
437
            begin
438
              rd_addr_pipe_0 <= {ba,open_rows[current_row],addr_col};
439
              rd_burst_counter[22 : 1] <= {ba,open_rows[current_row],addr_col[7 : 1]};
440
              rd_burst_counter[0] <= addr_col[0] + 1;
441
            end
442
          else if (read_cmd || dq_valid || read_valid || read_cmd_echo)
443
            begin
444
              rd_addr_pipe_0 <= rd_burst_counter;
445
              rd_burst_counter[0] <= rd_burst_counter[0] + 1;
446
            end
447
          else
448
            rd_addr_pipe_0 <= 0;
449
        end
450
    end
451
 
452
 
453
  // read data transition from single to double clock rate
454
  always @(posedge clk)
455
    begin
456
      first_half_dq <= read_data[31 : 16];
457
      second_half_dq <= read_data[15 : 0];
458
    end
459
 
460
 
461
  assign read_dq = clk  ? second_half_dq : first_half_dq;
462
  assign dq_temp = dq_valid  ? read_dq : {16{1'bz}};
463
  assign dqs_temp = dqs_valid ? {2{clk}} : {2{1'bz}};
464
  assign mem_dqs = dqs_temp;
465
  assign mem_dq = dq_temp;
466
  //Pipelining registers for burst counting
467
  always @(posedge clk)
468
    begin
469
      write_valid_r <= write_valid;
470
      read_valid_r <= read_valid;
471
      write_valid_r2 <= write_valid_r;
472
      write_valid_r3 <= write_valid_r2;
473
      write_to_ram_r <= write_to_ram;
474
      read_valid_r2 <= read_valid_r;
475
      read_valid_r3 <= read_valid_r2;
476
      read_valid_r4 <= read_valid_r3;
477
    end
478
 
479
 
480
  assign write_to_ram = write_valid || write_valid_r;
481
  assign dq_valid = read_valid_r || read_valid_r2 && burst_term;
482
  assign dqs_valid = dq_valid || dqs_valid_temp;
483
  // 
484
  always @(negedge clk)
485
    begin
486
      dqs_valid_temp <= read_valid;
487
    end
488
 
489
 
490
  //capture first half of write data with rising edge of DQS, for simulation use only 1 DQS pin
491
  always @(posedge mem_dqs[0])
492
    begin
493
      #0.1 dq_captured[15 : 0] <= mem_dq[15 : 0];
494
      #0.1 dm_captured[1 : 0] <= mem_dm[1 : 0];
495
    end
496
 
497
 
498
  //capture second half of write data with falling edge of DQS, for simulation use only 1 DQS pin
499
  always @(negedge mem_dqs[0])
500
    begin
501
      #0.1 dq_captured[31 : 16] <= mem_dq[15 : 0];
502
      #0.1 dm_captured[3 : 2] <= mem_dm[1 : 0];
503
    end
504
 
505
 
506
  //Support for incomplete writes, do a read-modify-write with mem_bytes and the write data
507
  always @(posedge clk)
508
    begin
509
      if (write_to_ram)
510
          rmw_temp[7 : 0] <= dm_captured[0] ? mem_bytes[7 : 0] : dq_captured[7 : 0];
511
    end
512
 
513
 
514
  always @(posedge clk)
515
    begin
516
      if (write_to_ram)
517
          rmw_temp[15 : 8] <= dm_captured[1] ? mem_bytes[15 : 8] : dq_captured[15 : 8];
518
    end
519
 
520
 
521
  always @(posedge clk)
522
    begin
523
      if (write_to_ram)
524
          rmw_temp[23 : 16] <= dm_captured[2] ? mem_bytes[23 : 16] : dq_captured[23 : 16];
525
    end
526
 
527
 
528
  always @(posedge clk)
529
    begin
530
      if (write_to_ram)
531
          rmw_temp[31 : 24] <= dm_captured[3] ? mem_bytes[31 : 24] : dq_captured[31 : 24];
532
    end
533
 
534
 
535
  assign wr_addr_delayed = wr_addr_pipe_1;
536
  //Pipelining registers for burst counting
537
  always @(posedge clk)
538
    begin
539
      write_valid <= write_cmd;
540
    end
541
 
542
 
543
  //Registering burst term command
544
  always @(posedge clk)
545
    begin
546
      burst_term_pipe[0] <= ~burst_term_cmd;
547
      burst_term_pipe[10 : 1] <= burst_term_pipe[9 : 0];
548
    end
549
 
550
 
551
  //burst terminate piped along cas latency
552
  assign burst_term = (index == 0)? burst_term_pipe[0] :
553
    (index == 1)? burst_term_pipe[1] :
554
    (index == 2)? burst_term_pipe[2] :
555
    (index == 3)? burst_term_pipe[3] :
556
    (index == 4)? burst_term_pipe[4] :
557
    (index == 5)? burst_term_pipe[5] :
558
    (index == 6)? burst_term_pipe[6] :
559
    (index == 7)? burst_term_pipe[7] :
560
    (index == 8)? burst_term_pipe[8] :
561
    (index == 9)? burst_term_pipe[9] :
562
    burst_term_pipe[10];
563
 
564
  assign mem_bytes = read_data;
565
  assign rmw_address = (write_to_ram) ? wr_addr_delayed : read_addr_delayed;
566
  //use index to select which pipeline stage drives addr
567
  assign read_addr_delayed = (index == 0)? rd_addr_pipe_0 :
568
    (index == 1)? rd_addr_pipe_1 :
569
    (index == 2)? rd_addr_pipe_2 :
570
    (index == 3)? rd_addr_pipe_3 :
571
    (index == 4)? rd_addr_pipe_4 :
572
    (index == 5)? rd_addr_pipe_5 :
573
    (index == 6)? rd_addr_pipe_6 :
574
    (index == 7)? rd_addr_pipe_7 :
575
    (index == 8)? rd_addr_pipe_8 :
576
    (index == 9)? rd_addr_pipe_9 :
577
    rd_addr_pipe_10;
578
 
579
  //use index to select which pipeline stage drives valid
580
  assign read_valid = (index == 0)? rd_valid_pipe[0] :
581
    (index == 1)? rd_valid_pipe[1] :
582
    (index == 2)? rd_valid_pipe[2] :
583
    (index == 3)? rd_valid_pipe[3] :
584
    (index == 4)? rd_valid_pipe[4] :
585
    (index == 5)? rd_valid_pipe[5] :
586
    (index == 6)? rd_valid_pipe[6] :
587
    (index == 7)? rd_valid_pipe[7] :
588
    (index == 8)? rd_valid_pipe[8] :
589
    (index == 9)? rd_valid_pipe[9] :
590
    rd_valid_pipe[10];
591
 
592
 
593
//synthesis translate_off
594
//////////////// SIMULATION-ONLY CONTENTS
595
  assign txt_code = (cmd_code == 3'h0)? 24'h4c4d52 :
596
    (cmd_code == 3'h1)? 24'h415246 :
597
    (cmd_code == 3'h2)? 24'h505245 :
598
    (cmd_code == 3'h3)? 24'h414354 :
599
    (cmd_code == 3'h4)? 24'h205752 :
600
    (cmd_code == 3'h5)? 24'h205244 :
601
    (cmd_code == 3'h6)? 24'h425354 :
602
    (cmd_code == 3'h7)? 24'h4e4f50 :
603
    24'h424144;
604
 
605
 
606
//////////////// END SIMULATION-ONLY CONTENTS
607
 
608
//synthesis translate_on
609
 
610
endmodule
611
 

powered by: WebSVN 2.1.0

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