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

Subversion Repositories openhmc

[/] [openhmc/] [trunk/] [openHMC/] [sim/] [tb/] [common/] [src/] [rgm/] [openhmc/] [register_file_model_8x.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 [7: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 [7:0] Reserved_4;
85
       bit [7:0] descrambler_aligned_;
86
       bit [7:0] Reserved_5;
87
       bit [7:0] descrambler_part_aligned_;
88
       bit [7:0] Reserved_6;
89
       bit [7:0] lane_descramblers_locked_;
90
   } pkd_flds_s;
91
 
92
   `cag_rgm_register_fields(pkd_flds_s)
93
 
94
   `uvm_object_utils_begin(reg_openhmc_rf_status_init_c)
95
       `uvm_field_int(fields,UVM_ALL_ON)
96
   `uvm_object_utils_end
97
 
98
   function new(string name="reg_openhmc_rf_status_init_c");
99
       super.new(name);
100
       this.name = name;
101
       set_address('h8);
102
   endfunction : new
103
 
104
endclass : reg_openhmc_rf_status_init_c
105
 
106
//
107
// HMC controller control
108
//
109
class reg_openhmc_rf_control_c extends cag_rgm_register;
110
 
111
   typedef struct packed {
112
       bit [5:0] bit_slip_time_;
113
       bit [2:0] Reserved_7;
114
       bit [4:0] irtry_to_send_;
115
       bit [2:0] Reserved_8;
116
       bit [4:0] irtry_received_threshold_;
117
       bit [5:0] Reserved_9;
118
       bit [9:0] rx_token_count_;
119
       bit [4:0] Reserved_10;
120
       bit [0:0] debug_halt_on_tx_retry_;
121
       bit [0:0] debug_halt_on_error_abort_;
122
       bit [0:0] debug_dont_send_tret_;
123
       bit [1:0] Reserved_11;
124
       bit [0:0] run_length_enable_;
125
       bit [0:0] scrambler_disable_;
126
       bit [0:0] warm_reset_;
127
       bit [0:0] set_hmc_sleep_;
128
       bit [0:0] hmc_init_cont_set_;
129
       bit [0:0] p_rst_n_;
130
   } pkd_flds_s;
131
 
132
   `cag_rgm_register_fields(pkd_flds_s)
133
 
134
   `uvm_object_utils_begin(reg_openhmc_rf_control_c)
135
       `uvm_field_int(fields,UVM_ALL_ON)
136
   `uvm_object_utils_end
137
 
138
   function new(string name="reg_openhmc_rf_control_c");
139
       super.new(name);
140
       this.name = name;
141
       set_address('h10);
142
   endfunction : new
143
 
144
endclass : reg_openhmc_rf_control_c
145
 
146
//
147
// Posted requests sent to the HMC
148
//
149
class reg_openhmc_rf_sent_p_c extends cag_rgm_register;
150
 
151
   typedef struct packed {
152
       bit [63:0] cnt_;
153
   } pkd_flds_s;
154
 
155
   `cag_rgm_register_fields(pkd_flds_s)
156
 
157
   `uvm_object_utils_begin(reg_openhmc_rf_sent_p_c)
158
       `uvm_field_int(fields,UVM_ALL_ON)
159
   `uvm_object_utils_end
160
 
161
   function new(string name="reg_openhmc_rf_sent_p_c");
162
       super.new(name);
163
       this.name = name;
164
       set_address('h18);
165
   endfunction : new
166
 
167
endclass : reg_openhmc_rf_sent_p_c
168
 
169
//
170
// Nonposted requests sent to the HMC
171
//
172
class reg_openhmc_rf_sent_np_c extends cag_rgm_register;
173
 
174
   typedef struct packed {
175
       bit [63:0] cnt_;
176
   } pkd_flds_s;
177
 
178
   `cag_rgm_register_fields(pkd_flds_s)
179
 
180
   `uvm_object_utils_begin(reg_openhmc_rf_sent_np_c)
181
       `uvm_field_int(fields,UVM_ALL_ON)
182
   `uvm_object_utils_end
183
 
184
   function new(string name="reg_openhmc_rf_sent_np_c");
185
       super.new(name);
186
       this.name = name;
187
       set_address('h20);
188
   endfunction : new
189
 
190
endclass : reg_openhmc_rf_sent_np_c
191
 
192
//
193
// Read requests sent to the HMC
194
//
195
class reg_openhmc_rf_sent_r_c extends cag_rgm_register;
196
 
197
   typedef struct packed {
198
       bit [63:0] cnt_;
199
   } pkd_flds_s;
200
 
201
   `cag_rgm_register_fields(pkd_flds_s)
202
 
203
   `uvm_object_utils_begin(reg_openhmc_rf_sent_r_c)
204
       `uvm_field_int(fields,UVM_ALL_ON)
205
   `uvm_object_utils_end
206
 
207
   function new(string name="reg_openhmc_rf_sent_r_c");
208
       super.new(name);
209
       this.name = name;
210
       set_address('h28);
211
   endfunction : new
212
 
213
endclass : reg_openhmc_rf_sent_r_c
214
 
215
//
216
// Count of packets that had data errors but valid flow information
217
//
218
class reg_openhmc_rf_poisoned_packets_c extends cag_rgm_register;
219
 
220
   typedef struct packed {
221
       bit [63:0] cnt_;
222
   } pkd_flds_s;
223
 
224
   `cag_rgm_register_fields(pkd_flds_s)
225
 
226
   `uvm_object_utils_begin(reg_openhmc_rf_poisoned_packets_c)
227
       `uvm_field_int(fields,UVM_ALL_ON)
228
   `uvm_object_utils_end
229
 
230
   function new(string name="reg_openhmc_rf_poisoned_packets_c");
231
       super.new(name);
232
       this.name = name;
233
       set_address('h30);
234
   endfunction : new
235
 
236
endclass : reg_openhmc_rf_poisoned_packets_c
237
 
238
//
239
// Responses received from the HMC
240
//
241
class reg_openhmc_rf_rcvd_rsp_c extends cag_rgm_register;
242
 
243
   typedef struct packed {
244
       bit [63:0] cnt_;
245
   } pkd_flds_s;
246
 
247
   `cag_rgm_register_fields(pkd_flds_s)
248
 
249
   `uvm_object_utils_begin(reg_openhmc_rf_rcvd_rsp_c)
250
       `uvm_field_int(fields,UVM_ALL_ON)
251
   `uvm_object_utils_end
252
 
253
   function new(string name="reg_openhmc_rf_rcvd_rsp_c");
254
       super.new(name);
255
       this.name = name;
256
       set_address('h38);
257
   endfunction : new
258
 
259
endclass : reg_openhmc_rf_rcvd_rsp_c
260
 
261
//
262
// Reset performance counters
263
//
264
class reg_openhmc_rf_counter_reset_c extends cag_rgm_register;
265
 
266
   typedef struct packed {
267
       bit rreinit_;
268
   } pkd_flds_s;
269
 
270
   `cag_rgm_register_fields(pkd_flds_s)
271
 
272
   `uvm_object_utils_begin(reg_openhmc_rf_counter_reset_c)
273
       `uvm_field_int(fields,UVM_ALL_ON)
274
   `uvm_object_utils_end
275
 
276
   function new(string name="reg_openhmc_rf_counter_reset_c");
277
       super.new(name);
278
       this.name = name;
279
       set_address('h40);
280
   endfunction : new
281
 
282
endclass : reg_openhmc_rf_counter_reset_c
283
 
284
//
285
// Count of re-transmit requests
286
//
287
class reg_openhmc_rf_tx_link_retries_c extends cag_rgm_register;
288
 
289
   typedef struct packed {
290
       bit [47:0] count_;
291
   } pkd_flds_s;
292
 
293
   `cag_rgm_register_fields(pkd_flds_s)
294
 
295
   `uvm_object_utils_begin(reg_openhmc_rf_tx_link_retries_c)
296
       `uvm_field_int(fields,UVM_ALL_ON)
297
   `uvm_object_utils_end
298
 
299
   function new(string name="reg_openhmc_rf_tx_link_retries_c");
300
       super.new(name);
301
       this.name = name;
302
       set_address('h48);
303
   endfunction : new
304
 
305
endclass : reg_openhmc_rf_tx_link_retries_c
306
 
307
//
308
// Count of errors seen on RX
309
//
310
class reg_openhmc_rf_errors_on_rx_c extends cag_rgm_register;
311
 
312
   typedef struct packed {
313
       bit [47:0] count_;
314
   } pkd_flds_s;
315
 
316
   `cag_rgm_register_fields(pkd_flds_s)
317
 
318
   `uvm_object_utils_begin(reg_openhmc_rf_errors_on_rx_c)
319
       `uvm_field_int(fields,UVM_ALL_ON)
320
   `uvm_object_utils_end
321
 
322
   function new(string name="reg_openhmc_rf_errors_on_rx_c");
323
       super.new(name);
324
       this.name = name;
325
       set_address('h50);
326
   endfunction : new
327
 
328
endclass : reg_openhmc_rf_errors_on_rx_c
329
 
330
//
331
// The number of bit_flips forced by the run length limiter
332
//
333
class reg_openhmc_rf_run_length_bit_flip_c extends cag_rgm_register;
334
 
335
   typedef struct packed {
336
       bit [47:0] count_;
337
   } pkd_flds_s;
338
 
339
   `cag_rgm_register_fields(pkd_flds_s)
340
 
341
   `uvm_object_utils_begin(reg_openhmc_rf_run_length_bit_flip_c)
342
       `uvm_field_int(fields,UVM_ALL_ON)
343
   `uvm_object_utils_end
344
 
345
   function new(string name="reg_openhmc_rf_run_length_bit_flip_c");
346
       super.new(name);
347
       this.name = name;
348
       set_address('h58);
349
   endfunction : new
350
 
351
endclass : reg_openhmc_rf_run_length_bit_flip_c
352
 
353
//
354
// Indicates the number of error abort modes not cleared in time
355
//
356
class reg_openhmc_rf_error_abort_not_cleared_c extends cag_rgm_register;
357
 
358
   typedef struct packed {
359
       bit [47:0] count_;
360
   } pkd_flds_s;
361
 
362
   `cag_rgm_register_fields(pkd_flds_s)
363
 
364
   `uvm_object_utils_begin(reg_openhmc_rf_error_abort_not_cleared_c)
365
       `uvm_field_int(fields,UVM_ALL_ON)
366
   `uvm_object_utils_end
367
 
368
   function new(string name="reg_openhmc_rf_error_abort_not_cleared_c");
369
       super.new(name);
370
       this.name = name;
371
       set_address('h60);
372
   endfunction : new
373
 
374
endclass : reg_openhmc_rf_error_abort_not_cleared_c
375
 
376
class rf_openhmc_rf_c extends cag_rgm_register_file;
377
 
378
   rand reg_openhmc_rf_status_general_c status_general;
379
   rand reg_openhmc_rf_status_init_c status_init;
380
   rand reg_openhmc_rf_control_c control;
381
   rand reg_openhmc_rf_sent_p_c sent_p;
382
   rand reg_openhmc_rf_sent_np_c sent_np;
383
   rand reg_openhmc_rf_sent_r_c sent_r;
384
   rand reg_openhmc_rf_poisoned_packets_c poisoned_packets;
385
   rand reg_openhmc_rf_rcvd_rsp_c rcvd_rsp;
386
   rand reg_openhmc_rf_counter_reset_c counter_reset;
387
   rand reg_openhmc_rf_tx_link_retries_c tx_link_retries;
388
   rand reg_openhmc_rf_errors_on_rx_c errors_on_rx;
389
   rand reg_openhmc_rf_run_length_bit_flip_c run_length_bit_flip;
390
   rand reg_openhmc_rf_error_abort_not_cleared_c error_abort_not_cleared;
391
 
392
   `uvm_object_utils(rf_openhmc_rf_c)
393
 
394
   function new(string name="rf_openhmc_rf_c");
395
       super.new(name);
396
       this.name = name;
397
       status_general = reg_openhmc_rf_status_general_c::type_id::create("status_general");
398
       status_general.set_address('h0);
399
       add_register(status_general);
400
       status_init = reg_openhmc_rf_status_init_c::type_id::create("status_init");
401
       status_init.set_address('h8);
402
       add_register(status_init);
403
       control = reg_openhmc_rf_control_c::type_id::create("control");
404
       control.set_address('h10);
405
       add_register(control);
406
       sent_p = reg_openhmc_rf_sent_p_c::type_id::create("sent_p");
407
       sent_p.set_address('h18);
408
       add_register(sent_p);
409
       sent_np = reg_openhmc_rf_sent_np_c::type_id::create("sent_np");
410
       sent_np.set_address('h20);
411
       add_register(sent_np);
412
       sent_r = reg_openhmc_rf_sent_r_c::type_id::create("sent_r");
413
       sent_r.set_address('h28);
414
       add_register(sent_r);
415
       poisoned_packets = reg_openhmc_rf_poisoned_packets_c::type_id::create("poisoned_packets");
416
       poisoned_packets.set_address('h30);
417
       add_register(poisoned_packets);
418
       rcvd_rsp = reg_openhmc_rf_rcvd_rsp_c::type_id::create("rcvd_rsp");
419
       rcvd_rsp.set_address('h38);
420
       add_register(rcvd_rsp);
421
       counter_reset = reg_openhmc_rf_counter_reset_c::type_id::create("counter_reset");
422
       counter_reset.set_address('h40);
423
       add_register(counter_reset);
424
       tx_link_retries = reg_openhmc_rf_tx_link_retries_c::type_id::create("tx_link_retries");
425
       tx_link_retries.set_address('h48);
426
       add_register(tx_link_retries);
427
       errors_on_rx = reg_openhmc_rf_errors_on_rx_c::type_id::create("errors_on_rx");
428
       errors_on_rx.set_address('h50);
429
       add_register(errors_on_rx);
430
       run_length_bit_flip = reg_openhmc_rf_run_length_bit_flip_c::type_id::create("run_length_bit_flip");
431
       run_length_bit_flip.set_address('h58);
432
       add_register(run_length_bit_flip);
433
       error_abort_not_cleared = reg_openhmc_rf_error_abort_not_cleared_c::type_id::create("error_abort_not_cleared");
434
       error_abort_not_cleared.set_address('h60);
435
       add_register(error_abort_not_cleared);
436
   endfunction : new
437
 
438
endclass : rf_openhmc_rf_c
439
 

powered by: WebSVN 2.1.0

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