{# MACRO #}
{% macro module_prefix() %}
    {%- if prefix %}
{{ prefix }}_
    {%- else %}
{{ file_name }}_
    {%- endif %}
{%- endmacro %}

{#- TEMPLATE NAMESPACE #}
{% set tmp = namespace() %}

{#- TEMPLATE #}
// Created with Corsair v{{ corsair_ver }}
package {{ file_name }};

parameter {{ module_prefix()|upper }}BASE_ADDR = {{ config['base_address'] }};
parameter {{ module_prefix()|upper }}DATA_WIDTH = {{ config['data_width'] }};
parameter {{ module_prefix()|upper }}ADDR_WIDTH = {{ config['address_width'] }};

{% for reg in rmap %}
// {{ reg.name }}
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_ADDR = {{ "%d'h%x" % (config['address_width'], reg.address) }};
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_RESET = {{ "%d'h%x" % (config['data_width'], reg.reset) }};

    {% for bf in reg %}
// {{ reg.name }}.{{ bf.name }}
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_WIDTH = {{ bf.width }};
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_LSB = {{ bf.lsb }};
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_MASK = {{ "%d'h%x" % (config['data_width'], bf.mask) }};
parameter {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_RESET = {{ "%d'h%x" % (bf.width, bf.reset) }};
        {% if bf.enums %}
typedef enum {
            {% for i in range(bf|length - 1) %}
    {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_{{ bf[i].name.upper() }} = {{ "%d'h%x" % (bf.width, bf[i].value) }}, //{{ bf[i].description }}
            {% endfor %}
    {{ module_prefix()|upper }}{{ reg.name.upper() }}_{{ bf.name.upper() }}_{{ bf[-1].name.upper() }} = {{ "%d'h%x" % (bf.width, bf[-1].value) }} //{{ bf[-1].description }}
} {{ prefix.lower() }}{{ reg.name.lower() }}_{{ bf.name.lower() }}_t;
        {% endif %}

    {% endfor %}

{% endfor %}
endpackage