[dv/xbar] Fix xcelium compile error
1. Fix error #2404, xcelium doesn't allow to force one of var in packed
struct
2. Also change to only drive clocks used by xbar
Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/hw/top_earlgrey/data/tb__xbar_connect.sv.tpl b/hw/top_earlgrey/data/tb__xbar_connect.sv.tpl
index 76ccb26..8072fa0 100644
--- a/hw/top_earlgrey/data/tb__xbar_connect.sv.tpl
+++ b/hw/top_earlgrey/data/tb__xbar_connect.sv.tpl
@@ -9,23 +9,24 @@
top_hier = 'tb.dut.top_' + top["name"] + '.'
clk_hier = top_hier + top["clocks"]["hier_paths"]["top"]
-clk_freq = {}
-for clock in top["clocks"]["srcs"]:
- clk_freq[clock["name"]] = clock["freq"]
-
clk_src = {}
for xbar in top["xbar"]:
for clk, src in xbar["clock_srcs"].items():
- clk_src[clk] = "clk_" + src
+ clk_src[clk] = src
+
+clk_freq = {}
+for clock in top["clocks"]["srcs"]:
+ if clock["name"] in clk_src.values():
+ clk_freq[clock["name"]] = clock["freq"]
hosts = {}
devices = {}
for xbar in top["xbar"]:
for node in xbar["nodes"]:
if node["type"] == "host" and not node["xbar"]:
- hosts[node["name"]] = clk_src[node["clock"]]
+ hosts[node["name"]] = "clk_" + clk_src[node["clock"]]
elif node["type"] == "device" and not node["xbar"]:
- devices[node["name"]] = clk_src[node["clock"]]
+ devices[node["name"]] = "clk_" + clk_src[node["clock"]]
%>\
% for c in clk_freq.keys():
wire clk_${c};
@@ -56,11 +57,9 @@
% endfor
// bypass clkmgr, force clocks directly
-% for grp in top["clocks"]["groups"]:
- % for name, src in grp["clocks"].items():
- % if grp["src"] == "top":
- force ${clk_hier}${name} = clk_${src};
- % endif
+% for xbar in top["xbar"]:
+ % for clk, src in xbar["clock_srcs"].items():
+ force ${top_hier}u_xbar_${xbar["name"]}.${clk} = clk_${src};
% endfor
% endfor
diff --git a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
index bb439ff..af13863 100644
--- a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
+++ b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
@@ -7,10 +7,6 @@
clk_rst_if clk_rst_if_main(.clk(clk_main), .rst_n(rst_n));
wire clk_io;
clk_rst_if clk_rst_if_io(.clk(clk_io), .rst_n(rst_n));
-wire clk_usb;
-clk_rst_if clk_rst_if_usb(.clk(clk_usb), .rst_n(rst_n));
-wire clk_aon;
-clk_rst_if clk_rst_if_aon(.clk(clk_aon), .rst_n(rst_n));
tl_if corei_tl_if(clk_main, rst_n);
tl_if cored_tl_if(clk_main, rst_n);
@@ -50,21 +46,11 @@
clk_rst_if_main.set_freq_mhz(100000000 / 1000_000.0);
clk_rst_if_io.set_active(.drive_rst_n_val(0));
clk_rst_if_io.set_freq_mhz(100000000 / 1000_000.0);
- clk_rst_if_usb.set_active(.drive_rst_n_val(0));
- clk_rst_if_usb.set_freq_mhz(48000000 / 1000_000.0);
- clk_rst_if_aon.set_active(.drive_rst_n_val(0));
- clk_rst_if_aon.set_freq_mhz(200000 / 1000_000.0);
// bypass clkmgr, force clocks directly
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_main_aes = clk_main;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_main_hmac = clk_main;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_main_infra = clk_main;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_io_infra = clk_io;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_io_secure = clk_io;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_main_secure = clk_main;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_io_peri = clk_io;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_usb_peri = clk_usb;
- force tb.dut.top_earlgrey.clkmgr_clocks.clk_io_timers = clk_io;
+ force tb.dut.top_earlgrey.u_xbar_main.clk_main_i = clk_main;
+ force tb.dut.top_earlgrey.u_xbar_main.clk_fixed_i = clk_io;
+ force tb.dut.top_earlgrey.u_xbar_peri.clk_peri_i = clk_io;
// bypass rstmgr, force resets directly
force tb.dut.top_earlgrey.u_xbar_main.rst_main_ni = rst_n;