From 00318d0d9b998e397186eb51f334e2f0932dec2a Mon Sep 17 00:00:00 2001 From: Robert Schilling Date: Fri, 10 Jan 2025 15:03:55 +0100 Subject: [PATCH] [topgen] Assign incmomg LPGs to the internal LPG vectors Signed-off-by: Robert Schilling --- hw/top_darjeeling/templates/toplevel.sv.tpl | 9 ++++++++- hw/top_earlgrey/templates/toplevel.sv.tpl | 9 ++++++++- util/topgen/merge.py | 11 +++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hw/top_darjeeling/templates/toplevel.sv.tpl b/hw/top_darjeeling/templates/toplevel.sv.tpl index 55ad43da9972b..d709609bbb677 100644 --- a/hw/top_darjeeling/templates/toplevel.sv.tpl +++ b/hw/top_darjeeling/templates/toplevel.sv.tpl @@ -9,7 +9,7 @@ import topgen.lib as lib from reggen.params import Parameter from topgen.clocks import Clocks from topgen.resets import Resets -from topgen.merge import is_unmanaged_reset +from topgen.merge import is_unmanaged_reset, get_alerts_with_unique_lpg_idx num_mio_inputs = top['pinmux']['io_counts']['muxed']['inouts'] + \ top['pinmux']['io_counts']['muxed']['inputs'] @@ -421,6 +421,13 @@ for rst in output_rsts: assign lpg_cg_en[${k}] = ${cg_en}; assign lpg_rst_en[${k}] = ${rst_en}; % endfor +% for alert_group, alerts in top['incoming_alert'].items(): + % for unique_alert_lpg_entry in get_alerts_with_unique_lpg_idx(alerts): +<% k += 1 %>\ + assign lpg_cg_en[${k}] = incoming_lpg_cg_en_${alert_group}_i[${unique_alert_lpg_entry["lpg_idx"]}]; + assign lpg_rst_en[${k}] = incoming_lpg_rst_en_${alert_group}_i[${unique_alert_lpg_entry["lpg_idx"]}]; + % endfor +% endfor % for alert_group, lpgs in top['outgoing_alert_lpgs'].items(): // Outgoing LPGs for alert group ${alert_group} diff --git a/hw/top_earlgrey/templates/toplevel.sv.tpl b/hw/top_earlgrey/templates/toplevel.sv.tpl index ef72693588fe4..1de7bb9ee2b3f 100644 --- a/hw/top_earlgrey/templates/toplevel.sv.tpl +++ b/hw/top_earlgrey/templates/toplevel.sv.tpl @@ -9,7 +9,7 @@ import topgen.lib as lib from reggen.params import Parameter from topgen.clocks import Clocks from topgen.resets import Resets -from topgen.merge import is_unmanaged_reset +from topgen.merge import is_unmanaged_reset, get_alerts_with_unique_lpg_idx num_mio_inputs = top['pinmux']['io_counts']['muxed']['inouts'] + \ top['pinmux']['io_counts']['muxed']['inputs'] @@ -440,6 +440,13 @@ for rst in output_rsts: assign lpg_cg_en[${k}] = ${cg_en}; assign lpg_rst_en[${k}] = ${rst_en}; % endfor +% for alert_group, alerts in top['incoming_alert'].items(): + % for unique_alert_lpg_entry in get_alerts_with_unique_lpg_idx(alerts): +<% k += 1 %>\ + assign lpg_cg_en[${k}] = incoming_lpg_cg_en_${alert_group}_i[${unique_alert_lpg_entry["lpg_idx"]}]; + assign lpg_rst_en[${k}] = incoming_lpg_rst_en_${alert_group}_i[${unique_alert_lpg_entry["lpg_idx"]}]; + % endfor +% endfor % for alert_group, lpgs in top['outgoing_alert_lpgs'].items(): // Outgoing LPGs for alert group ${alert_group} diff --git a/util/topgen/merge.py b/util/topgen/merge.py index 6ddabcc20b900..d9b0e53734230 100644 --- a/util/topgen/merge.py +++ b/util/topgen/merge.py @@ -849,6 +849,17 @@ def amend_resets(top, name_to_block): top["resets"] = top_resets +def get_alerts_with_unique_lpg_idx(incoming_alerts: List[Dict]): + unique_lpgs = set() + result = [] + + for alert in incoming_alerts: + if alert['lpg_idx'] not in unique_lpgs: + unique_lpgs.add(alert['lpg_idx']) + result.append(alert) + return result + + def create_alert_lpgs(top, name_to_block: Dict[str, IpBlock]): '''Loop over modules and determine number of unique LPGs''' lpg_dict = {}