.. include:: includes.rst

Generic Map Rules
-----------------

generic_map_001
###############

|phase_6| |error| |case| |case_keyword|

This rule checks the **generic map** keywords have proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   GENERIC MAP (

**Fix**

.. code-block:: vhdl

   generic map (

generic_map_002
###############

|phase_6| |error| |case| |case_name|

This rule checks generic names have proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

     generic map (
       DEPTH => 512,
       WIDTH => 32
     )

**Fix**

.. code-block:: vhdl

     generic map (
       depth => 512,
       width => 32
     )

generic_map_003
###############

|phase_1| |error| |structure|

This rule checks the ( is on the same line as the **generic map** keywords.

**Violation**

.. code-block:: vhdl

   generic map
   (
     WIDTH => 32,
     DEPTH => 512
   )

**Fix**

Use explicit port mapping.

.. code-block:: vhdl

   generic map (
     WIDTH => 32,
     DEPTH => 512
   )

generic_map_004
###############

|phase_1| |error| |structure|

This rule checks the location of the closing ")" character for the generic map.

The default location is on a line by itself.

|configuring_move_token_rules_link|

**Violation**

.. code-block:: vhdl

     generic map (
       GENERIC_1 => 0,
       GENERIC_2 => TRUE,
       GENERIC_3 => FALSE)

**Fix**

.. code-block:: vhdl

     generic map (
       GENERIC_1 => 0,
       GENERIC_2 => TRUE,
       GENERIC_3 => FALSE
     )

generic_map_005
###############

|phase_1| |error| |structure|

This rule checks if the **generic map** keywords and a generic assignment are on the same line.

**Violation**

.. code-block:: vhdl

     generic map (DEPTH => 512,
       WIDTH => 32
     )

**Fix**

.. code-block:: vhdl

     generic map (
       DEPTH => 512,
       WIDTH => 32
     )

generic_map_006
###############

|phase_2| |error| |whitespace|

This rule checks for a single space between the **map** keyword and the (.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   generic map(

   generic map   (

**Fix**

.. code-block:: vhdl

   generic map (

   generic map (

generic_map_007
###############

|phase_2| |error| |whitespace|

This rule checks for a single space after the **=>** keyword in generic maps.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   generic map
   (
     WIDTH =>    32,
     DEPTH => 512
   )

**Fix**

.. code-block:: vhdl

   generic map
   (
     WIDTH => 32,
     DEPTH => 512
   )

generic_map_008
###############

|phase_1| |error| |unfixable| |structure|

This rule checks for positional generics.
Positional ports and generics are subject to problems when the position of the underlying component changes.

**Violation**

.. code-block:: vhdl

   port map (
     WR_EN, RD_EN, OVERFLOW
   );

**Fix**

Use explicit port mapping.

.. code-block:: vhdl

   port map (
     WR_EN    => WR_EN,
     RD_EN    => RD_EN,
     OVERFLOW => OVERFLOW
   );

generic_map_100
###############

|phase_2| |error| |whitespace|

This rule checks for at least a single space before the **=>** keyword in generic maps.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   generic map
   (
     WIDTH=> 32,
     DEPTH => 512
   )

**Fix**

.. code-block:: vhdl

   generic map
   (
     WIDTH => 32,
     DEPTH => 512
   )

generic_map_600
###############

|phase_7| |disabled| |error| |unfixable| |naming|

This rule checks for valid suffixes on generic identifiers in generic maps
The default generic suffix is *_g*.

|configuring_prefix_and_suffix_rules_link|

**Violation**

.. code-block:: vhdl

   generic map
   (
     WIDTH => 32,
     DEPTH => 512
   )

**Fix**

.. code-block:: vhdl

   generic map
   (
     WIDTH_G => 32,
     DEPTH_G => 512
   )

generic_map_601
###############

|phase_7| |disabled| |error| |unfixable| |naming|

This rule checks for valid prefixes on generic identifiers in generic maps
The default generic suffix is *g_*.

|configuring_prefix_and_suffix_rules_link|

**Violation**

.. code-block:: vhdl

   generic map
   (
     WIDTH => 32,
     DEPTH => 512
   )

**Fix**

.. code-block:: vhdl

   generic map
   (
     G_WIDTH => 32,
     G_DEPTH => 512
   )
