[dv/xbar] Add chip-level xbar support

1. Use topgen to generate connect and parameter files
2. modify the other xbar to use force rather than direct connect for
better reusability

Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/util/topgen.py b/util/topgen.py
index d067d49..c3a3f72 100755
--- a/util/topgen.py
+++ b/util/topgen.py
@@ -17,9 +17,9 @@
 from mako.template import Template
 
 import tlgen
-
-from reggen import gen_dv, gen_rtl, gen_fpv, validate
-from topgen import get_hjsonobj_xbars, merge_top, search_ips, validate_top, amend_clocks
+from reggen import gen_dv, gen_fpv, gen_rtl, validate
+from topgen import (amend_clocks, get_hjsonobj_xbars, merge_top, search_ips,
+                    validate_top)
 
 # Common header for generated files
 genhdr = '''// Copyright lowRISC contributors.
@@ -907,6 +907,21 @@
                        check=True,
                        cwd=str(SRCTREE_TOP))
 
+        # generate chip level xbar TB
+        tb_files = ["xbar_env_pkg__params.sv", "tb__xbar_connect.sv"]
+        for fname in tb_files:
+            tpl_fname = "%s.tpl" % (fname)
+            xbar_chip_data_path = tpl_path / tpl_fname
+            template_contents = generate_top(completecfg,
+                                             str(xbar_chip_data_path))
+
+            rendered_dir = tpl_path / '../dv/autogen'
+            rendered_dir.mkdir(parents=True, exist_ok=True)
+            rendered_path = rendered_dir / fname
+
+            with rendered_path.open(mode='w', encoding='UTF-8') as fout:
+                fout.write(template_contents)
+
 
 if __name__ == "__main__":
     main()