Tung Hoang | a087707 | 2019-09-23 19:08:35 -0700 | [diff] [blame] | 1 | // Copyright lowRISC contributors. |
| 2 | // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| 3 | // SPDX-License-Identifier: Apache-2.0 |
| 4 | |
| 5 | class i2c_item extends uvm_sequence_item; |
| 6 | |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 7 | // transaction data part |
Tung Hoang | 6d5e7c5 | 2020-06-11 14:14:14 -0700 | [diff] [blame] | 8 | bit [7:0] data_q[$]; |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 9 | bit [9:0] addr; // enough to support both 7 & 10-bit target address |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 10 | int tran_id; |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 11 | int num_data; // valid data |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 12 | bus_op_e bus_op; |
| 13 | drv_type_e drv_type; |
| 14 | // transaction control part |
| 15 | bit nack; |
| 16 | bit ack; |
| 17 | bit rstart; |
Tung Hoang | 99ee908 | 2020-06-23 17:57:04 -0700 | [diff] [blame] | 18 | |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 19 | // queue dropped data due to fmt_overflow |
| 20 | bit [7:0] fmt_ovf_data_q[$]; |
| 21 | |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 22 | // random flags |
Tung Hoang | 99ee908 | 2020-06-23 17:57:04 -0700 | [diff] [blame] | 23 | rand bit [7:0] fbyte; |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 24 | rand bit nakok, rcont, read, stop, start; |
Tung Hoang | 7331049 | 2019-09-25 00:26:12 -0700 | [diff] [blame] | 25 | |
Tung Hoang | 99ee908 | 2020-06-23 17:57:04 -0700 | [diff] [blame] | 26 | constraint fbyte_c { fbyte inside {[0 : 127]}; } |
| 27 | constraint rcont_c { |
| 28 | solve read, stop before rcont; |
Tung Hoang | e3749bd | 2020-07-17 11:33:38 -0700 | [diff] [blame^] | 29 | // for read request, rcont and stop must be complementary set |
| 30 | read -> rcont == ~stop; |
Tung Hoang | 99ee908 | 2020-06-23 17:57:04 -0700 | [diff] [blame] | 31 | } |
Tung Hoang | a087707 | 2019-09-23 19:08:35 -0700 | [diff] [blame] | 32 | |
| 33 | `uvm_object_utils_begin(i2c_item) |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 34 | `uvm_field_int(tran_id, UVM_DEFAULT) |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 35 | `uvm_field_enum(bus_op_e, bus_op, UVM_DEFAULT) |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 36 | `uvm_field_int(addr, UVM_DEFAULT) |
| 37 | `uvm_field_int(num_data, UVM_DEFAULT) |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 38 | `uvm_field_int(start, UVM_DEFAULT) |
| 39 | `uvm_field_int(stop, UVM_DEFAULT) |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 40 | `uvm_field_queue_int(data_q, UVM_DEFAULT) |
| 41 | `uvm_field_queue_int(fmt_ovf_data_q, UVM_DEFAULT | UVM_NOCOMPARE) |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 42 | `uvm_field_int(rstart, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
Tung Hoang | 99ee908 | 2020-06-23 17:57:04 -0700 | [diff] [blame] | 43 | `uvm_field_int(fbyte, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 44 | `uvm_field_int(ack, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
| 45 | `uvm_field_int(nack, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
| 46 | `uvm_field_int(read, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
| 47 | `uvm_field_int(rcont, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
| 48 | `uvm_field_int(nakok, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
| 49 | `uvm_field_enum(drv_type_e, drv_type, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE) |
Tung Hoang | a087707 | 2019-09-23 19:08:35 -0700 | [diff] [blame] | 50 | `uvm_object_utils_end |
| 51 | |
| 52 | `uvm_object_new |
| 53 | |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 54 | function void clear_data(); |
| 55 | num_data = 0; |
| 56 | addr = 0; |
| 57 | drv_type = None; |
| 58 | data_q.delete(); |
Tung Hoang | 0298654 | 2020-07-11 00:24:49 -0700 | [diff] [blame] | 59 | fmt_ovf_data_q.delete(); |
Tung Hoang | dd0a2ed | 2020-05-19 16:12:48 -0700 | [diff] [blame] | 60 | endfunction : clear_data |
| 61 | |
| 62 | function void clear_flag(); |
| 63 | start = 1'b0; |
| 64 | stop = 1'b0; |
| 65 | read = 1'b0; |
| 66 | rcont = 1'b0; |
| 67 | nakok = 1'b0; |
| 68 | rstart = 1'b0; |
| 69 | endfunction : clear_flag |
| 70 | |
| 71 | function void clear_all(); |
| 72 | clear_data(); |
| 73 | clear_flag(); |
| 74 | endfunction : clear_all |
| 75 | |
Tung Hoang | 7331049 | 2019-09-25 00:26:12 -0700 | [diff] [blame] | 76 | endclass : i2c_item |