blob: 08945e98f6d45600039cd34eebc7e37856764c80 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
class csrng_item extends uvm_sequence_item;
`uvm_object_utils_begin(csrng_item)
`uvm_object_utils_end
`uvm_object_new
rand acmd_e acmd;
rand bit [3:0] clen, flags;
rand bit [18:0] glen;
rand bit [31:0] cmd_data_q[$];
// TODO: Try clen > 12
constraint c_clen {
clen inside {[0:12]};
};
constraint c_cmd_data {
solve clen before cmd_data_q;
cmd_data_q.size() == clen;
};
constraint c_flags {
flags inside {[0:1]};
};
// TODO: add/fix glen constraint
// constraint c_glen {
// solve acmd before glen;
//
// if (acmd != csrng_pkg::GEN)
// glen == 'h0;
// };
virtual function string convert2string();
string str = "";
str = {str, "\n"};
str = {str, $sformatf("\n\t |*********** csrng_item ************| \t") };
str = {str, $sformatf("\n\t |* acmd : %4s *| \t", acmd.name()) };
str = {str, $sformatf("\n\t |* clen : 0x%0h *| \t", clen) };
str = {str, $sformatf("\n\t |* flags : 0x%0h *| \t", flags) };
str = {str, $sformatf("\n\t |* glen : 0x%5h *| \t", glen) };
if (cmd_data_q.size()) begin
for (int i = 0; i < cmd_data_q.size(); i++) begin
str = {str, $sformatf("\n\t |* cmd_data_q[%2d] : 0x%0h *| \t", i, cmd_data_q[i]) };
end
end
str = {str, $sformatf("\n\t |***********************************| \t") };
str = {str, "\n"};
return str;
endfunction
endclass