blob: 73536f3b9ca254a89a119e25dcdb27766c3f4d35 [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[$];
bit fips;
bit [csrng_pkg::GENBITS_BUS_WIDTH - 1:0] genbits_q[$];
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: Try glen > 32, glen = 0 on GEN cmd
constraint c_glen {
glen inside {[1:32]};
}
//--------------------------------------------------------------------
// do_copy
//--------------------------------------------------------------------
virtual function void do_copy(uvm_object rhs);
csrng_item rhs_;
$cast(rhs_, rhs);
super.do_copy(rhs);
this.acmd = rhs_.acmd;
this.clen = rhs_.clen;
this.flags = rhs_.flags;
this.glen = rhs_.glen;
this.fips = rhs_.fips;
this.cmd_data_q = rhs_.cmd_data_q;
this.genbits_q = rhs_.genbits_q;
endfunction
virtual function string convert2string();
string str = "";
str = {str, "\n"};
str = {str, $sformatf("\n\t |********* csrng_item **********| \t") };
str = {str, $sformatf("\n\t |* acmd : %5s *| \t", acmd.name()) };
str = {str, $sformatf("\n\t |* clen : %5d *| \t", clen) };
str = {str, $sformatf("\n\t |* flags[0] : %5d *| \t", flags[0]) };
str = {str, $sformatf("\n\t |* glen : %5d *| \t", glen) };
str = {str, $sformatf("\n\t |* fips : %5d *| \t", fips) };
for (int i = 0; i < cmd_data_q.size(); i++) begin
str = {str, $sformatf("\n\t |* cmd_data_q[%2d] : 0x%8h *| \t", i, cmd_data_q[i]) };
end
for (int i = 0; i < genbits_q.size(); i++) begin
str = {str, $sformatf("\n\t |* genbits_q[%2d] : 0x%8h *| \t", i, genbits_q[i]) };
end
str = {str, $sformatf("\n\t |*******************************| \t") };
str = {str, "\n"};
return str;
endfunction
endclass