blob: 27ac81d88c7f2eacd07e4e3ed1e050f5845c50dd [file] [log] [blame]
lowRISC Contributors802543a2019-08-31 12:12:56 +01001// 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// ---------------------------------------------
6// Xbar environment configuration class
7// ---------------------------------------------
Weicai Yang9d6334e2019-10-11 11:42:41 -07008class xbar_env_cfg extends dv_base_env_cfg;
lowRISC Contributors802543a2019-08-31 12:12:56 +01009
10 rand tl_agent_cfg host_agent_cfg[];
11 rand tl_agent_cfg device_agent_cfg[];
Weicai Yangfb1f1b82019-10-18 14:49:03 -070012 uint num_hosts;
13 uint num_devices;
14 uint num_enabled_hosts;
15 uint min_host_req_delay = 0;
16 uint max_host_req_delay = 20;
17 uint min_host_rsp_delay = 0;
18 uint max_host_rsp_delay = 20;
19 uint min_device_req_delay = 0;
20 uint max_device_req_delay = 20;
21 uint min_device_rsp_delay = 0;
22 uint max_device_rsp_delay = 20;
Weicai Yang7518de82019-11-04 11:11:44 -080023 // use to disable/enable assert for TL error cases
24 tlul_assert_ctrl_vif tlul_assert_ctrl_vif;
lowRISC Contributors802543a2019-08-31 12:12:56 +010025
26 `uvm_object_utils_begin(xbar_env_cfg)
27 `uvm_field_array_object(host_agent_cfg, UVM_DEFAULT)
28 `uvm_field_array_object(device_agent_cfg, UVM_DEFAULT)
Weicai Yangfb1f1b82019-10-18 14:49:03 -070029 `uvm_field_int(num_hosts, UVM_DEFAULT)
30 `uvm_field_int(num_devices, UVM_DEFAULT)
lowRISC Contributors802543a2019-08-31 12:12:56 +010031 `uvm_object_utils_end
32
Weicai Yang9d6334e2019-10-11 11:42:41 -070033 `uvm_object_new
lowRISC Contributors802543a2019-08-31 12:12:56 +010034
Gaurang Chitroda47033bd2019-10-28 23:35:42 -070035 virtual function void initialize(bit [TL_AW-1:0] csr_base_addr = '1);
Weicai Yang9d6334e2019-10-11 11:42:41 -070036 has_ral = 0; // no csr in xbar
lowRISC Contributors802543a2019-08-31 12:12:56 +010037 // Host TL agent cfg
Weicai Yangfb1f1b82019-10-18 14:49:03 -070038 num_hosts = xbar_hosts.size();
39 num_enabled_hosts = xbar_hosts.size();
40 host_agent_cfg = new[num_hosts];
lowRISC Contributors802543a2019-08-31 12:12:56 +010041 foreach (host_agent_cfg[i]) begin
42 host_agent_cfg[i] = tl_agent_cfg::type_id::
43 create($sformatf("%0s_agent_cfg", xbar_hosts[i].host_name));
44 host_agent_cfg[i].is_host = 1;
Weicai Yangf9a2a152019-11-01 11:54:37 -070045 host_agent_cfg[i].max_outstanding_req = 1 << VALID_HOST_ID_WIDTH;
lowRISC Contributors802543a2019-08-31 12:12:56 +010046 end
47 // Device TL agent cfg
Weicai Yangfb1f1b82019-10-18 14:49:03 -070048 num_devices = xbar_devices.size();
49 device_agent_cfg = new[num_devices];
lowRISC Contributors802543a2019-08-31 12:12:56 +010050 foreach (device_agent_cfg[i]) begin
51 device_agent_cfg[i] = tl_agent_cfg::type_id::
52 create($sformatf("%0s_agent_cfg", xbar_devices[i].device_name));
53 device_agent_cfg[i].is_host = 0;
Weicai Yangf9a2a152019-11-01 11:54:37 -070054 // the max_outstanding_req depends on how many hosts can access the device
55 // device.max_outstanding_req = sum(all its hosts max_outstanding_req)
56 device_agent_cfg[i].max_outstanding_req = 0; // clear default value
57 foreach (xbar_hosts[j]) begin
58 if (xbar_devices[i].device_name inside {xbar_hosts[j].valid_devices}) begin
59 device_agent_cfg[i].max_outstanding_req += host_agent_cfg[j].max_outstanding_req;
60 end
61 end // foreach (xbar_hosts[j])
62 end // foreach (device_agent_cfg[i])
lowRISC Contributors802543a2019-08-31 12:12:56 +010063 endfunction
lowRISC Contributors802543a2019-08-31 12:12:56 +010064endclass