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

Subversion Repositories openhmc

[/] [openhmc/] [trunk/] [openHMC/] [sim/] [tb/] [common/] [src/] [rgm/] [openhmc/] [register_file_model_16x.sv] - Blame information for rev 15

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 15 juko
/*
2
 *                              .--------------. .----------------. .------------.
3
 *                             | .------------. | .--------------. | .----------. |
4
 *                             | | ____  ____ | | | ____    ____ | | |   ______ | |
5
 *                             | ||_   ||   _|| | ||_   \  /   _|| | | .' ___  || |
6
 *       ___  _ __   ___ _ __  | |  | |__| |  | | |  |   \/   |  | | |/ .'   \_|| |
7
 *      / _ \| '_ \ / _ \ '_ \ | |  |  __  |  | | |  | |\  /| |  | | || |       | |
8
 *       (_) | |_) |  __/ | | || | _| |  | |_ | | | _| |_\/_| |_ | | |\ `.___.'\| |
9
 *      \___/| .__/ \___|_| |_|| ||____||____|| | ||_____||_____|| | | `._____.'| |
10
 *           | |               | |            | | |              | | |          | |
11
 *           |_|               | '------------' | '--------------' | '----------' |
12
 *                              '--------------' '----------------' '------------'
13
 *
14
 *  openHMC - An Open Source Hybrid Memory Cube Controller
15
 *  (C) Copyright 2014 Computer Architecture Group - University of Heidelberg
16
 *  www.ziti.uni-heidelberg.de
17
 *  B6, 26
18
 *  68159 Mannheim
19
 *  Germany
20
 *
21
 *  Contact: openhmc@ziti.uni-heidelberg.de
22
 *  http://ra.ziti.uni-heidelberg.de/openhmc
23
 *
24
 *   This source file is free software: you can redistribute it and/or modify
25
 *   it under the terms of the GNU Lesser General Public License as published by
26
 *   the Free Software Foundation, either version 3 of the License, or
27
 *   (at your option) any later version.
28
 *
29
 *   This source file is distributed in the hope that it will be useful,
30
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
31
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
32
 *   GNU Lesser General Public License for more details.
33
 *
34
 *   You should have received a copy of the GNU Lesser General Public License
35
 *   along with this source file.  If not, see .
36
 *
37
 *
38
 */
39
//
40
// HMC controller status
41
//
42
class reg_openhmc_rf_status_general_c extends cag_rgm_register;
43
 
44
   typedef struct packed {
45
       bit [15:0] lane_polarity_reversed_;
46
       bit [5:0] Reserved_0;
47
       bit [9:0] rx_tokens_remaining_;
48
       bit [5:0] Reserved_1;
49
       bit [9:0] hmc_tokens_remaining_;
50
       bit [5:0] Reserved_2;
51
       bit [0:0] phy_rx_ready_;
52
       bit [0:0] phy_tx_ready_;
53
       bit [2:0] Reserved_3;
54
       bit [0:0] lanes_reversed_;
55
       bit [0:0] FERR_N_;
56
       bit [0:0] sleep_mode_;
57
       bit [0:0] link_training_;
58
       bit [0:0] link_up_;
59
   } pkd_flds_s;
60
 
61
   `cag_rgm_register_fields(pkd_flds_s)
62
 
63
   `uvm_object_utils_begin(reg_openhmc_rf_status_general_c)
64
       `uvm_field_int(fields,UVM_ALL_ON)
65
   `uvm_object_utils_end
66
 
67
   function new(string name="reg_openhmc_rf_status_general_c");
68
       super.new(name);
69
       this.name = name;
70
       set_address('h0);
71
   endfunction : new
72
 
73
endclass : reg_openhmc_rf_status_general_c
74
 
75
//
76
// HMC controller initialization status
77
//
78
class reg_openhmc_rf_status_init_c extends cag_rgm_register;
79
 
80
   typedef struct packed {
81
       bit [1:0] tx_init_state_;
82
       bit [2:0] rx_init_state_;
83
       bit [0:0] all_descramblers_aligned_;
84
       bit [15:0] descrambler_aligned_;
85
       bit [15:0] descrambler_part_aligned_;
86
       bit [15:0] lane_descramblers_locked_;
87
   } pkd_flds_s;
88
 
89
   `cag_rgm_register_fields(pkd_flds_s)
90
 
91
   `uvm_object_utils_begin(reg_openhmc_rf_status_init_c)
92
       `uvm_field_int(fields,UVM_ALL_ON)
93
   `uvm_object_utils_end
94
 
95
   function new(string name="reg_openhmc_rf_status_init_c");
96
       super.new(name);
97
       this.name = name;
98
       set_address('h8);
99
   endfunction : new
100
 
101
endclass : reg_openhmc_rf_status_init_c
102
 
103
//
104
// HMC controller control
105
//
106
class reg_openhmc_rf_control_c extends cag_rgm_register;
107
 
108
   typedef struct packed {
109
       bit [5:0] bit_slip_time_;
110
       bit [2:0] Reserved_4;
111
       bit [4:0] irtry_to_send_;
112
       bit [2:0] Reserved_5;
113
       bit [4:0] irtry_received_threshold_;
114
       bit [5:0] Reserved_6;
115
       bit [9:0] rx_token_count_;
116
       bit [4:0] Reserved_7;
117
       bit [0:0] debug_halt_on_tx_retry_;
118
       bit [0:0] debug_halt_on_error_abort_;
119
       bit [0:0] debug_dont_send_tret_;
120
       bit [1:0] Reserved_8;
121
       bit [0:0] run_length_enable_;
122
       bit [0:0] scrambler_disable_;
123
       bit [0:0] warm_reset_;
124
       bit [0:0] set_hmc_sleep_;
125
       bit [0:0] hmc_init_cont_set_;
126
       bit [0:0] p_rst_n_;
127
   } pkd_flds_s;
128
 
129
   `cag_rgm_register_fields(pkd_flds_s)
130
 
131
   `uvm_object_utils_begin(reg_openhmc_rf_control_c)
132
       `uvm_field_int(fields,UVM_ALL_ON)
133
   `uvm_object_utils_end
134
 
135
   function new(string name="reg_openhmc_rf_control_c");
136
       super.new(name);
137
       this.name = name;
138
       set_address('h10);
139
   endfunction : new
140
 
141
endclass : reg_openhmc_rf_control_c
142
 
143
//
144
// Posted requests sent to the HMC
145
//
146
class reg_openhmc_rf_sent_p_c extends cag_rgm_register;
147
 
148
   typedef struct packed {
149
       bit [63:0] cnt_;
150
   } pkd_flds_s;
151
 
152
   `cag_rgm_register_fields(pkd_flds_s)
153
 
154
   `uvm_object_utils_begin(reg_openhmc_rf_sent_p_c)
155
       `uvm_field_int(fields,UVM_ALL_ON)
156
   `uvm_object_utils_end
157
 
158
   function new(string name="reg_openhmc_rf_sent_p_c");
159
       super.new(name);
160
       this.name = name;
161
       set_address('h18);
162
   endfunction : new
163
 
164
endclass : reg_openhmc_rf_sent_p_c
165
 
166
//
167
// Nonposted requests sent to the HMC
168
//
169
class reg_openhmc_rf_sent_np_c extends cag_rgm_register;
170
 
171
   typedef struct packed {
172
       bit [63:0] cnt_;
173
   } pkd_flds_s;
174
 
175
   `cag_rgm_register_fields(pkd_flds_s)
176
 
177
   `uvm_object_utils_begin(reg_openhmc_rf_sent_np_c)
178
       `uvm_field_int(fields,UVM_ALL_ON)
179
   `uvm_object_utils_end
180
 
181
   function new(string name="reg_openhmc_rf_sent_np_c");
182
       super.new(name);
183
       this.name = name;
184
       set_address('h20);
185
   endfunction : new
186
 
187
endclass : reg_openhmc_rf_sent_np_c
188
 
189
//
190
// Read requests sent to the HMC
191
//
192
class reg_openhmc_rf_sent_r_c extends cag_rgm_register;
193
 
194
   typedef struct packed {
195
       bit [63:0] cnt_;
196
   } pkd_flds_s;
197
 
198
   `cag_rgm_register_fields(pkd_flds_s)
199
 
200
   `uvm_object_utils_begin(reg_openhmc_rf_sent_r_c)
201
       `uvm_field_int(fields,UVM_ALL_ON)
202
   `uvm_object_utils_end
203
 
204
   function new(string name="reg_openhmc_rf_sent_r_c");
205
       super.new(name);
206
       this.name = name;
207
       set_address('h28);
208
   endfunction : new
209
 
210
endclass : reg_openhmc_rf_sent_r_c
211
 
212
//
213
// Count of packets that had data errors but valid flow information
214
//
215
class reg_openhmc_rf_poisoned_packets_c extends cag_rgm_register;
216
 
217
   typedef struct packed {
218
       bit [63:0] cnt_;
219
   } pkd_flds_s;
220
 
221
   `cag_rgm_register_fields(pkd_flds_s)
222
 
223
   `uvm_object_utils_begin(reg_openhmc_rf_poisoned_packets_c)
224
       `uvm_field_int(fields,UVM_ALL_ON)
225
   `uvm_object_utils_end
226
 
227
   function new(string name="reg_openhmc_rf_poisoned_packets_c");
228
       super.new(name);
229
       this.name = name;
230
       set_address('h30);
231
   endfunction : new
232
 
233
endclass : reg_openhmc_rf_poisoned_packets_c
234
 
235
//
236
// Responses received from the HMC
237
//
238
class reg_openhmc_rf_rcvd_rsp_c extends cag_rgm_register;
239
 
240
   typedef struct packed {
241
       bit [63:0] cnt_;
242
   } pkd_flds_s;
243
 
244
   `cag_rgm_register_fields(pkd_flds_s)
245
 
246
   `uvm_object_utils_begin(reg_openhmc_rf_rcvd_rsp_c)
247
       `uvm_field_int(fields,UVM_ALL_ON)
248
   `uvm_object_utils_end
249
 
250
   function new(string name="reg_openhmc_rf_rcvd_rsp_c");
251
       super.new(name);
252
       this.name = name;
253
       set_address('h38);
254
   endfunction : new
255
 
256
endclass : reg_openhmc_rf_rcvd_rsp_c
257
 
258
//
259
// Reset performance counters
260
//
261
class reg_openhmc_rf_counter_reset_c extends cag_rgm_register;
262
 
263
   typedef struct packed {
264
       bit rreinit_;
265
   } pkd_flds_s;
266
 
267
   `cag_rgm_register_fields(pkd_flds_s)
268
 
269
   `uvm_object_utils_begin(reg_openhmc_rf_counter_reset_c)
270
       `uvm_field_int(fields,UVM_ALL_ON)
271
   `uvm_object_utils_end
272
 
273
   function new(string name="reg_openhmc_rf_counter_reset_c");
274
       super.new(name);
275
       this.name = name;
276
       set_address('h40);
277
   endfunction : new
278
 
279
endclass : reg_openhmc_rf_counter_reset_c
280
 
281
//
282
// Count of re-transmit requests
283
//
284
class reg_openhmc_rf_tx_link_retries_c extends cag_rgm_register;
285
 
286
   typedef struct packed {
287
       bit [47:0] count_;
288
   } pkd_flds_s;
289
 
290
   `cag_rgm_register_fields(pkd_flds_s)
291
 
292
   `uvm_object_utils_begin(reg_openhmc_rf_tx_link_retries_c)
293
       `uvm_field_int(fields,UVM_ALL_ON)
294
   `uvm_object_utils_end
295
 
296
   function new(string name="reg_openhmc_rf_tx_link_retries_c");
297
       super.new(name);
298
       this.name = name;
299
       set_address('h48);
300
   endfunction : new
301
 
302
endclass : reg_openhmc_rf_tx_link_retries_c
303
 
304
//
305
// Count of errors seen on RX
306
//
307
class reg_openhmc_rf_errors_on_rx_c extends cag_rgm_register;
308
 
309
   typedef struct packed {
310
       bit [47:0] count_;
311
   } pkd_flds_s;
312
 
313
   `cag_rgm_register_fields(pkd_flds_s)
314
 
315
   `uvm_object_utils_begin(reg_openhmc_rf_errors_on_rx_c)
316
       `uvm_field_int(fields,UVM_ALL_ON)
317
   `uvm_object_utils_end
318
 
319
   function new(string name="reg_openhmc_rf_errors_on_rx_c");
320
       super.new(name);
321
       this.name = name;
322
       set_address('h50);
323
   endfunction : new
324
 
325
endclass : reg_openhmc_rf_errors_on_rx_c
326
 
327
//
328
// The number of bit_flips forced by the run length limiter
329
//
330
class reg_openhmc_rf_run_length_bit_flip_c extends cag_rgm_register;
331
 
332
   typedef struct packed {
333
       bit [47:0] count_;
334
   } pkd_flds_s;
335
 
336
   `cag_rgm_register_fields(pkd_flds_s)
337
 
338
   `uvm_object_utils_begin(reg_openhmc_rf_run_length_bit_flip_c)
339
       `uvm_field_int(fields,UVM_ALL_ON)
340
   `uvm_object_utils_end
341
 
342
   function new(string name="reg_openhmc_rf_run_length_bit_flip_c");
343
       super.new(name);
344
       this.name = name;
345
       set_address('h58);
346
   endfunction : new
347
 
348
endclass : reg_openhmc_rf_run_length_bit_flip_c
349
 
350
//
351
// Indicates the number of error abort modes not cleared in time
352
//
353
class reg_openhmc_rf_error_abort_not_cleared_c extends cag_rgm_register;
354
 
355
   typedef struct packed {
356
       bit [47:0] count_;
357
   } pkd_flds_s;
358
 
359
   `cag_rgm_register_fields(pkd_flds_s)
360
 
361
   `uvm_object_utils_begin(reg_openhmc_rf_error_abort_not_cleared_c)
362
       `uvm_field_int(fields,UVM_ALL_ON)
363
   `uvm_object_utils_end
364
 
365
   function new(string name="reg_openhmc_rf_error_abort_not_cleared_c");
366
       super.new(name);
367
       this.name = name;
368
       set_address('h60);
369
   endfunction : new
370
 
371
endclass : reg_openhmc_rf_error_abort_not_cleared_c
372
 
373
class rf_openhmc_rf_c extends cag_rgm_register_file;
374
 
375
   rand reg_openhmc_rf_status_general_c status_general;
376
   rand reg_openhmc_rf_status_init_c status_init;
377
   rand reg_openhmc_rf_control_c control;
378
   rand reg_openhmc_rf_sent_p_c sent_p;
379
   rand reg_openhmc_rf_sent_np_c sent_np;
380
   rand reg_openhmc_rf_sent_r_c sent_r;
381
   rand reg_openhmc_rf_poisoned_packets_c poisoned_packets;
382
   rand reg_openhmc_rf_rcvd_rsp_c rcvd_rsp;
383
   rand reg_openhmc_rf_counter_reset_c counter_reset;
384
   rand reg_openhmc_rf_tx_link_retries_c tx_link_retries;
385
   rand reg_openhmc_rf_errors_on_rx_c errors_on_rx;
386
   rand reg_openhmc_rf_run_length_bit_flip_c run_length_bit_flip;
387
   rand reg_openhmc_rf_error_abort_not_cleared_c error_abort_not_cleared;
388
 
389
   `uvm_object_utils(rf_openhmc_rf_c)
390
 
391
   function new(string name="rf_openhmc_rf_c");
392
       super.new(name);
393
       this.name = name;
394
       status_general = reg_openhmc_rf_status_general_c::type_id::create("status_general");
395
       status_general.set_address('h0);
396
       add_register(status_general);
397
       status_init = reg_openhmc_rf_status_init_c::type_id::create("status_init");
398
       status_init.set_address('h8);
399
       add_register(status_init);
400
       control = reg_openhmc_rf_control_c::type_id::create("control");
401
       control.set_address('h10);
402
       add_register(control);
403
       sent_p = reg_openhmc_rf_sent_p_c::type_id::create("sent_p");
404
       sent_p.set_address('h18);
405
       add_register(sent_p);
406
       sent_np = reg_openhmc_rf_sent_np_c::type_id::create("sent_np");
407
       sent_np.set_address('h20);
408
       add_register(sent_np);
409
       sent_r = reg_openhmc_rf_sent_r_c::type_id::create("sent_r");
410
       sent_r.set_address('h28);
411
       add_register(sent_r);
412
       poisoned_packets = reg_openhmc_rf_poisoned_packets_c::type_id::create("poisoned_packets");
413
       poisoned_packets.set_address('h30);
414
       add_register(poisoned_packets);
415
       rcvd_rsp = reg_openhmc_rf_rcvd_rsp_c::type_id::create("rcvd_rsp");
416
       rcvd_rsp.set_address('h38);
417
       add_register(rcvd_rsp);
418
       counter_reset = reg_openhmc_rf_counter_reset_c::type_id::create("counter_reset");
419
       counter_reset.set_address('h40);
420
       add_register(counter_reset);
421
       tx_link_retries = reg_openhmc_rf_tx_link_retries_c::type_id::create("tx_link_retries");
422
       tx_link_retries.set_address('h48);
423
       add_register(tx_link_retries);
424
       errors_on_rx = reg_openhmc_rf_errors_on_rx_c::type_id::create("errors_on_rx");
425
       errors_on_rx.set_address('h50);
426
       add_register(errors_on_rx);
427
       run_length_bit_flip = reg_openhmc_rf_run_length_bit_flip_c::type_id::create("run_length_bit_flip");
428
       run_length_bit_flip.set_address('h58);
429
       add_register(run_length_bit_flip);
430
       error_abort_not_cleared = reg_openhmc_rf_error_abort_not_cleared_c::type_id::create("error_abort_not_cleared");
431
       error_abort_not_cleared.set_address('h60);
432
       add_register(error_abort_not_cleared);
433
   endfunction : new
434
 
435
endclass : rf_openhmc_rf_c
436
 

powered by: WebSVN 2.1.0

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