blob: 7319b3cb3d5f19c52aaf63cced908f552a84adfd [file] [log] [blame]
Tung Hoanga0877072019-09-23 19:08:35 -07001// Copyright lowRISC contributors.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4
5class i2c_item extends uvm_sequence_item;
6
Tung Hoangdd0a2ed2020-05-19 16:12:48 -07007 // transaction data part
Tung Hoang6d5e7c52020-06-11 14:14:14 -07008 bit [7:0] data_q[$];
Tung Hoang02986542020-07-11 00:24:49 -07009 bit [9:0] addr; // enough to support both 7 & 10-bit target address
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070010 int tran_id;
Tung Hoang02986542020-07-11 00:24:49 -070011 int num_data; // valid data
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070012 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 Hoang99ee9082020-06-23 17:57:04 -070018
Tung Hoang02986542020-07-11 00:24:49 -070019 // queue dropped data due to fmt_overflow
20 bit [7:0] fmt_ovf_data_q[$];
21
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070022 // random flags
Tung Hoang99ee9082020-06-23 17:57:04 -070023 rand bit [7:0] fbyte;
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070024 rand bit nakok, rcont, read, stop, start;
Tung Hoang73310492019-09-25 00:26:12 -070025
Tung Hoang99ee9082020-06-23 17:57:04 -070026 constraint fbyte_c { fbyte inside {[0 : 127]}; }
27 constraint rcont_c {
28 solve read, stop before rcont;
Tung Hoange3749bd2020-07-17 11:33:38 -070029 // for read request, rcont and stop must be complementary set
30 read -> rcont == ~stop;
Tung Hoang99ee9082020-06-23 17:57:04 -070031 }
Tung Hoanga0877072019-09-23 19:08:35 -070032
33 `uvm_object_utils_begin(i2c_item)
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070034 `uvm_field_int(tran_id, UVM_DEFAULT)
Tung Hoang02986542020-07-11 00:24:49 -070035 `uvm_field_enum(bus_op_e, bus_op, UVM_DEFAULT)
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070036 `uvm_field_int(addr, UVM_DEFAULT)
37 `uvm_field_int(num_data, UVM_DEFAULT)
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070038 `uvm_field_int(start, UVM_DEFAULT)
39 `uvm_field_int(stop, UVM_DEFAULT)
Tung Hoang02986542020-07-11 00:24:49 -070040 `uvm_field_queue_int(data_q, UVM_DEFAULT)
41 `uvm_field_queue_int(fmt_ovf_data_q, UVM_DEFAULT | UVM_NOCOMPARE)
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070042 `uvm_field_int(rstart, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE)
Tung Hoang99ee9082020-06-23 17:57:04 -070043 `uvm_field_int(fbyte, UVM_DEFAULT | UVM_NOPRINT | UVM_NOCOMPARE)
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070044 `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 Hoanga0877072019-09-23 19:08:35 -070050 `uvm_object_utils_end
51
52 `uvm_object_new
53
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070054 function void clear_data();
55 num_data = 0;
56 addr = 0;
57 drv_type = None;
58 data_q.delete();
Tung Hoang02986542020-07-11 00:24:49 -070059 fmt_ovf_data_q.delete();
Tung Hoangdd0a2ed2020-05-19 16:12:48 -070060 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 Hoang73310492019-09-25 00:26:12 -070076endclass : i2c_item