[xbar/dv] Update xbar scb
Update scb for d_channel to use NumOfDevice queues to store transactions,
rather than using one queueo for all d_channel transactions
diff --git a/hw/ip/tlul/dv/env/xbar_env.sv b/hw/ip/tlul/dv/env/xbar_env.sv
index b7af871..bb25d92 100644
--- a/hw/ip/tlul/dv/env/xbar_env.sv
+++ b/hw/ip/tlul/dv/env/xbar_env.sv
@@ -48,10 +48,9 @@
scoreboard.add_item_queue({"a_chan_", xbar_devices[i].device_name},
scoreboard_pkg::kOutOfOrderCheck);
+ scoreboard.add_item_queue({"d_chan_", xbar_devices[i].device_name},
+ scoreboard_pkg::kOutOfOrderCheck);
end
- // TODO should be same structure as a_chan
- // all the d_channals share one queue as we can't know which host to return from device side
- scoreboard.add_item_queue(D_CHAN_QUEUE_NAME, scoreboard_pkg::kOutOfOrderCheck);
endfunction : build_phase
function void connect_phase(uvm_phase phase);
diff --git a/hw/ip/tlul/dv/env/xbar_env_pkg.sv b/hw/ip/tlul/dv/env/xbar_env_pkg.sv
index 5ae59c1..b792869 100644
--- a/hw/ip/tlul/dv/env/xbar_env_pkg.sv
+++ b/hw/ip/tlul/dv/env/xbar_env_pkg.sv
@@ -28,8 +28,6 @@
`include "xbar_params.svh"
- parameter string D_CHAN_QUEUE_NAME = "D_CHAN_COMMON_QUEUE";
-
function automatic int get_host_id(string name);
foreach (xbar_hosts[i]) begin
if (xbar_hosts[i].host_name == name) return i;
diff --git a/hw/ip/tlul/dv/env/xbar_scoreboard.sv b/hw/ip/tlul/dv/env/xbar_scoreboard.sv
index 1c9f6bf..e973799 100644
--- a/hw/ip/tlul/dv/env/xbar_scoreboard.sv
+++ b/hw/ip/tlul/dv/env/xbar_scoreboard.sv
@@ -25,22 +25,24 @@
string tl_channel;
string tl_port;
tl_channel = port_name.substr(0, chan_prefix_len-1);
- if (tl_channel == "d_chan_") return D_CHAN_QUEUE_NAME;
tl_port = port_name.substr(chan_prefix_len, port_name.len()-1);
if (!port_dir.exists(port_name)) begin
`uvm_fatal(get_full_name(), $sformatf("Unexpected port name %0s", tl_port))
- end else if (port_dir[port_name] == scoreboard_pkg::kSrcPort) begin
- queue_name = {tl_channel, get_pair_dst_port_name(tr, tl_port)};
- end else begin
- queue_name = {tl_channel, tl_port};
+ end begin
+ queue_name = {tl_channel, get_queue_suffix_name(tr, tl_port)};
end
`uvm_info(get_full_name(), $sformatf("Scoreboard queue name : %0s", queue_name), UVM_HIGH)
return queue_name;
endfunction
- // when port_name is src, need to find the pair dst port_name
- virtual function string get_pair_dst_port_name(tl_seq_item tr, string port_name);
+ // queue name is a_chan_``device_name`` or d_chan_``device_name``, device name is its suffix
+ // if port is a device, return device name
+ // if port is a host, need to find the pair device_name
+ virtual function string get_queue_suffix_name(tl_seq_item tr, string port_name);
+ foreach (xbar_devices[i]) begin
+ if (xbar_devices[i].device_name == port_name) return port_name;
+ end
foreach (xbar_hosts[i]) begin
if (xbar_hosts[i].host_name == port_name) begin
// Current port is a host port, get pair device port from the address