From 5f9d7308c206735c2c1e0232b8dee5d3919341ae Mon Sep 17 00:00:00 2001 From: Alex Mykyta Date: Thu, 19 Dec 2024 19:30:30 -0800 Subject: [PATCH] Add next_q storage element to reset clause to avoid synthesis issues with async resets. #113 --- .../field_logic/templates/field_storage.sv | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/peakrdl_regblock/field_logic/templates/field_storage.sv b/src/peakrdl_regblock/field_logic/templates/field_storage.sv index d01211a..4e2dca0 100644 --- a/src/peakrdl_regblock/field_logic/templates/field_storage.sv +++ b/src/peakrdl_regblock/field_logic/templates/field_storage.sv @@ -44,25 +44,43 @@ always_comb begin {{field_logic.get_parity_error_identifier(node)}} = ({{field_logic.get_parity_identifier(node)}} != ^{{field_logic.get_storage_identifier(node)}}); {%- endif %} end -{% if reset is not none -%} + + + +{%- if reset is not none %} always_ff {{get_always_ff_event(resetsignal)}} begin -{%- else %} -always_ff @(posedge clk) begin -{%- endif %} - {% if reset is not none -%} if({{get_resetsignal(resetsignal)}}) begin {{field_logic.get_storage_identifier(node)}} <= {{reset}}; {%- if node.get_property('paritycheck') %} {{field_logic.get_parity_identifier(node)}} <= ^{{reset}}; {%- endif %} - end else {% endif %}if({{field_logic.get_field_combo_identifier(node, "load_next")}}) begin + {%- if field_logic.has_next_q(node) %} + {{field_logic.get_next_q_identifier(node)}} <= {{reset}}; + {%- endif %} + end else begin + if({{field_logic.get_field_combo_identifier(node, "load_next")}}) begin + {{field_logic.get_storage_identifier(node)}} <= {{field_logic.get_field_combo_identifier(node, "next")}}; + {%- if node.get_property('paritycheck') %} + {{field_logic.get_parity_identifier(node)}} <= ^{{field_logic.get_field_combo_identifier(node, "next")}}; + {%- endif %} + end + {%- if field_logic.has_next_q(node) %} + {{field_logic.get_next_q_identifier(node)}} <= {{get_input_identifier(node)}}; + {%- endif %} + end +end + + +{%- else %} +always_ff @(posedge clk) begin + if({{field_logic.get_field_combo_identifier(node, "load_next")}}) begin {{field_logic.get_storage_identifier(node)}} <= {{field_logic.get_field_combo_identifier(node, "next")}}; {%- if node.get_property('paritycheck') %} {{field_logic.get_parity_identifier(node)}} <= ^{{field_logic.get_field_combo_identifier(node, "next")}}; {%- endif %} end - {%- if field_logic.has_next_q(node) %} {{field_logic.get_next_q_identifier(node)}} <= {{get_input_identifier(node)}}; {%- endif %} end +{%- endif %}