// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// tb__xbar_connect generated by `tlgen.py` tool


% for c in xbar.clocks:
`CONNECT_CLK(${c})
% endfor

% for r in xbar.resets:
`CONNECT_RST(${r})
% endfor

xbar_${xbar.name} dut(
% for c in xbar.clocks:
  .${c}(${c}),
% endfor
% for r in xbar.resets:
  .${r}(${r})${"," if not loop.last else ""}
% endfor
);

// Host TileLink interface connections
% for node in xbar.hosts:
`CONNECT_TL_HOST_IF(${node.name}, dut, ${node.clocks[0]}, ${node.resets[0]})
% endfor

// Device TileLink interface connections
% for node in xbar.devices:
`CONNECT_TL_DEVICE_IF(${node.name}, dut, ${node.clocks[0]}, ${node.resets[0]})
% endfor
