Add next_q storage element to reset clause to avoid synthesis issues with async resets. #113

This commit is contained in:
Alex Mykyta
2024-12-19 19:30:30 -08:00
parent ebd82dde1b
commit 5f9d7308c2

View File

@@ -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)}}); {{field_logic.get_parity_error_identifier(node)}} = ({{field_logic.get_parity_identifier(node)}} != ^{{field_logic.get_storage_identifier(node)}});
{%- endif %} {%- endif %}
end end
{% if reset is not none -%}
{%- if reset is not none %}
always_ff {{get_always_ff_event(resetsignal)}} begin 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 if({{get_resetsignal(resetsignal)}}) begin
{{field_logic.get_storage_identifier(node)}} <= {{reset}}; {{field_logic.get_storage_identifier(node)}} <= {{reset}};
{%- if node.get_property('paritycheck') %} {%- if node.get_property('paritycheck') %}
{{field_logic.get_parity_identifier(node)}} <= ^{{reset}}; {{field_logic.get_parity_identifier(node)}} <= ^{{reset}};
{%- endif %} {%- 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")}}; {{field_logic.get_storage_identifier(node)}} <= {{field_logic.get_field_combo_identifier(node, "next")}};
{%- if node.get_property('paritycheck') %} {%- if node.get_property('paritycheck') %}
{{field_logic.get_parity_identifier(node)}} <= ^{{field_logic.get_field_combo_identifier(node, "next")}}; {{field_logic.get_parity_identifier(node)}} <= ^{{field_logic.get_field_combo_identifier(node, "next")}};
{%- endif %} {%- endif %}
end 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) %} {%- if field_logic.has_next_q(node) %}
{{field_logic.get_next_q_identifier(node)}} <= {{get_input_identifier(node)}}; {{field_logic.get_next_q_identifier(node)}} <= {{get_input_identifier(node)}};
{%- endif %} {%- endif %}
end end
{%- endif %}