blob: 08945e98f6d45600039cd34eebc7e37856764c80 [file] [log] [blame]
Steve Nelsonef7bcab2021-01-06 08:40:01 -08001// 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 csrng_item extends uvm_sequence_item;
6
Steve Nelsonef7bcab2021-01-06 08:40:01 -08007 `uvm_object_utils_begin(csrng_item)
8 `uvm_object_utils_end
9
10 `uvm_object_new
11
Steve Nelson1ae31522021-06-28 07:29:22 -070012 rand acmd_e acmd;
13 rand bit [3:0] clen, flags;
14 rand bit [18:0] glen;
15 rand bit [31:0] cmd_data_q[$];
16
17 // TODO: Try clen > 12
18 constraint c_clen {
19 clen inside {[0:12]};
20 };
21
22 constraint c_cmd_data {
23 solve clen before cmd_data_q;
24
25 cmd_data_q.size() == clen;
26 };
27
28 constraint c_flags {
29 flags inside {[0:1]};
30 };
31
32// TODO: add/fix glen constraint
33// constraint c_glen {
34// solve acmd before glen;
35//
36// if (acmd != csrng_pkg::GEN)
37// glen == 'h0;
38// };
Steve Nelson67a5d9f2021-02-25 07:19:46 -080039
40 virtual function string convert2string();
41 string str = "";
42 str = {str, "\n"};
Steve Nelson9c384a32021-05-24 06:25:49 -070043 str = {str, $sformatf("\n\t |*********** csrng_item ************| \t") };
Steve Nelson1ae31522021-06-28 07:29:22 -070044 str = {str, $sformatf("\n\t |* acmd : %4s *| \t", acmd.name()) };
Steve Nelson9c384a32021-05-24 06:25:49 -070045 str = {str, $sformatf("\n\t |* clen : 0x%0h *| \t", clen) };
46 str = {str, $sformatf("\n\t |* flags : 0x%0h *| \t", flags) };
47 str = {str, $sformatf("\n\t |* glen : 0x%5h *| \t", glen) };
48 if (cmd_data_q.size()) begin
49 for (int i = 0; i < cmd_data_q.size(); i++) begin
50 str = {str, $sformatf("\n\t |* cmd_data_q[%2d] : 0x%0h *| \t", i, cmd_data_q[i]) };
Steve Nelsonb9dc7282021-04-19 13:19:10 -070051 end
Steve Nelsonb9dc7282021-04-19 13:19:10 -070052 end
Steve Nelson9c384a32021-05-24 06:25:49 -070053 str = {str, $sformatf("\n\t |***********************************| \t") };
Steve Nelson67a5d9f2021-02-25 07:19:46 -080054 str = {str, "\n"};
55 return str;
56 endfunction
57
Steve Nelsonef7bcab2021-01-06 08:40:01 -080058endclass