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

powered by: WebSVN 2.1.0

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