Add next_q storage element to reset clause to avoid synthesis issues with async resets. #113
This commit is contained in:
@@ -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")}};
|
||||||
|
{%- 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")}};
|
{{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) %}
|
{%- 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 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user