[topgen] Broadcast Intersignal
Broadcast inter-signal format is uni-directional connection from the
requester to the receiver. The type name `broadcast` is TBD. It could be
`giver` or `uni_dir` in distinct from `req_rsp` type.
Signed-off-by: Eunchan Kim <eunchan@opentitan.org>
diff --git a/hw/top_earlgrey/data/top_earlgrey.sv.tpl b/hw/top_earlgrey/data/top_earlgrey.sv.tpl
index fa7e585..b1c4e95 100644
--- a/hw/top_earlgrey/data/top_earlgrey.sv.tpl
+++ b/hw/top_earlgrey/data/top_earlgrey.sv.tpl
@@ -440,6 +440,8 @@
% if sig["type"] == "req_rsp":
${sig["package"]}::${sig["struct"]}_req_t ${sig["signame"]}_req;
${sig["package"]}::${sig["struct"]}_rsp_t ${sig["signame"]}_rsp;
+ % elif sig["type"] == "broadcast":
+ ${sig["package"]}::${sig["struct"]}_t ${sig["signame"]};
% endif
% endfor
@@ -581,16 +583,40 @@
// Inter-module signals
% for sig in m["inter_signal_list"]:
- % if sig["type"] == "req_rsp":
- % if sig["act"] == "requester":
+ ## TODO: handle below condition in lib.py
+ % if "top_signame" in sig:
+ % if sig["type"] == "req_rsp":
+ % if sig["act"] == "requester":
.${sig["name"]}_o(${sig["top_signame"]}_req),
.${sig["name"]}_i(${sig["top_signame"]}_rsp),
% elif sig["act"] == "responder":
.${sig["name"]}_i(${sig["top_signame"]}_req),
.${sig["name"]}_o(${sig["top_signame"]}_rsp),
+ % endif # sig["act"] == requester
+ % elif sig["type"] == "broadcast":
+ ## TODO: Broadcast type
+ % if sig["act"] == "requester":
+ .${sig["name"]}_o(${sig["top_signame"]}),
+ % elif sig["act"] == "receiver":
+ .${sig["name"]}_i(${sig["top_signame"]}),
+ % endif
% endif
- % elif sig["type"] == "broadcast":
- ## TODO: Broadcast type
+ % else: # no top_signame in sig
+ % if sig["type"] == "req_rsp":
+ % if sig["act"] == "requester":
+ .${sig["name"]}_o(),
+ .${sig["name"]}_i(${sig["package"]}::${sig["struct"].upper()}_RSP_DEFAULT),
+ % elif sig["act"] == "responder":
+ .${sig["name"]}_i(${sig["package"]}::${sig["struct"].upper()}_REQ_DEFAULT),
+ .${sig["name"]}_o(),
+ % endif
+ % elif sig["type"] == "broadcast":
+ % if sig["act"] == "requester":
+ .${sig["name"]}_o(),
+ % elif sig["act"] == "receiver":
+ .${sig["name"]}_i(${sig["package"]}::${sig["struct"].upper()}_DEFAULT),
+ % endif
+ % endif
% endif
% endfor
% endif