[xbar/dv] Update chip-level xbar to drive from each IP  ports

1. detail discussion at #2464
2. re-enable chip xbar tests (tmp disabled at #3040)
3. exceptionis (non-comportable instance/port name) are handled in
termodule.py:find_otherside_module
  1. all mem IPs (rom, ram_main, eflash, ram_ret), which can be removed
  when we make memory as comportable IP
  2. corei, cored, debug_mem, dm_sba: need more discussion

Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/util/topgen/intermodule.py b/util/topgen/intermodule.py
index 1a7cb4f..cb4116f 100644
--- a/util/topgen/intermodule.py
+++ b/util/topgen/intermodule.py
@@ -6,7 +6,7 @@
 import re
 from collections import OrderedDict
 from enum import Enum
-from typing import Dict, Tuple, List
+from typing import Dict, List, Tuple
 
 from reggen.validate import check_int
 from topgen import lib
@@ -525,6 +525,22 @@
                            s) -> List[Tuple[str, str, str]]:
     """Find far-end port based on given module and signal name
     """
+    # TODO: handle special cases
+    special_inst_names = {
+        ('main', 'tl_rom'): ('tl_adapter_rom', 'tl'),
+        ('main', 'tl_ram_main'): ('tl_adapter_ram_main', 'tl'),
+        ('main', 'tl_eflash'): ('tl_adapter_eflash', 'tl'),
+        ('peri', 'tl_ram_ret'): ('tl_adapter_ram_ret', 'tl'),
+        ('main', 'tl_corei'): ('rv_core_ibex', 'tl_i'),
+        ('main', 'tl_cored'): ('rv_core_ibex', 'tl_d'),
+        ('main', 'tl_dm_sba'): ('dm_top', 'tl_h'),
+        ('main', 'tl_debug_mem'): ('dm_top', 'tl_d')
+    }
+    for pair in special_inst_names:
+        if pair == (m, s):
+            result = special_inst_names.get(pair)
+            return [('top', result[0], result[1])]
+
     signame = "{}.{}".format(m, s)
     for req, rsps in topcfg["inter_module"]["connect"].items():
         if req.startswith(signame):
@@ -540,24 +556,6 @@
                 req_m, req_s, req_i = filter_index(req)
                 return [('connect', req_m, req_s)]
 
-    # If reaches here, no matching results in 'connect'
-    # so search 'top' or 'external'
-
-    # todo: something here
-    # check special cases
-    pairs = {
-        ('main', 'tl_corei'): ('rv_core_ibex', 'tl_i'),
-        ('main', 'tl_cored'): ('rv_core_ibex', 'tl_d'),
-        ('main', 'tl_dm_sba'): ('dm_top', 'tl_h'),
-        ('main', 'tl_debug_mem'): ('dm_top', 'tl_d')
-    }
-    for sig in topcfg["inter_signal"]["signals"]:
-        pairs[(sig['inst_name'], sig['name'])] = ('', sig['top_signame'])
-
-    pair = pairs.get((m, s))
-    if pair is not None:
-        return [('top', pair[0], pair[1])]
-
     # if reaches here, it means either the format is wrong, or floating port.
     log.error("`find_otherside_modules()`: "
               "No such signal {}.{} exists.".format(m, s))
diff --git a/util/topgen/lib.py b/util/topgen/lib.py
index ea3fdf5..c887595 100644
--- a/util/topgen/lib.py
+++ b/util/topgen/lib.py
@@ -3,16 +3,18 @@
 # SPDX-License-Identifier: Apache-2.0
 
 import logging as log
+import re
+import sys
+from collections import OrderedDict
 from copy import deepcopy
 from pathlib import Path
-from collections import OrderedDict
-import hjson
-import sys
 
-import re
+import hjson
 
 # Ignore flake8 warning as the function is used in the template
-from .intermodule import im_defname, im_netname, im_portname  # noqa : F401
+# disable isort formating, as conflicting with flake8
+from .intermodule import find_otherside_modules  # noqa : F401 # isort:skip
+from .intermodule import im_portname, im_defname, im_netname  # noqa : F401 # isort:skip
 
 
 def is_ipcfg(ip: Path) -> bool:  # return bool