.. include:: includes.rst

Architecture Rules
------------------

architecture_001
################

|phase_4| |error| |indent|

This rule checks for blank spaces before the **architecture** keyword.

**Violation**

.. code-block:: vhdl

     architecture rtl of fifo is
   begin

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is
   begin

architecture_002
################

This rule has been split into the following rules:

* :ref:`architecture_030`
* :ref:`architecture_031`
* :ref:`architecture_032`
* :ref:`architecture_033`

architecture_003
################

|phase_3| |error| |blank_line|

This rule checks for a blank lines or comments above the **architecture** declaration.

|configuring_previous_line_rules_link|

**Violation**

.. code-block:: vhdl

   library ieee;
   architecture rtl of fifo is

**Fix**

.. code-block:: vhdl

   library ieee;

   architecture rtl of fifo is

architecture_004
################

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

This rule checks the proper case of the **architecture** keyword in the architecture declaration.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   ARCHITECTURE rtl of fifo is

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_005
################

|phase_1| |error| |structure|

This rule checks the **of** keyword is on the same line as the **architecture** keyword.

**Violation**

.. code-block:: vhdl

   architecture rtl
     of fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of
   fifo is

architecture_006
################

|phase_1| |error| |structure|

This rule checks the **is** keyword is on the same line as the **architecture** keyword.

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo
     is

   architecture rtl of fifo

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

   architecture rtl of fifo is

architecture_007
################

|phase_4| |error| |indent|

This rule checks for spaces before the **begin** keyword.

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo is
     begin

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is
   begin

architecture_008
################

|phase_4| |error| |indent|

This rule checks for spaces before the **end architecture** keywords.

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo is
   begin
     end architecture

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is
   begin
   end architecture

architecture_009
################

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

This rule checks the **end** keyword has proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   END architecture;

   End architecture;

**Fix**

.. code-block:: vhdl

   end architecture;

   end architecture;

architecture_010
################

|phase_1| |error| |structure| |structure_optional|

This rule checks for the keyword **architecture** in the **end architecture** statement.
It is clearer to the reader to state what is ending.

|configuring_optional_items_link|

**Violation**

.. code-block:: vhdl

   end architecture_name;

**Fix**

.. code-block:: vhdl

   end architecture architecture_name;

architecture_011
################

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

This rule checks the architecture name case in the **end architecture** statement.

|configuring_uppercase_and_lowercase_rules_link|


**Violation**

.. code-block:: vhdl

   end architecture ARCHITECTURE_NAME;

**Fix**

.. code-block:: vhdl

   end architecture architecture_name;

architecture_012
################

|phase_2| |error| |whitespace|

This rule checks for a single space between **end** and **architecture** keywords.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   end    architecture architecture_name;

**Fix**

.. code-block:: vhdl

   end architecture architecture_name;

architecture_013
################

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

This rule checks the case of the architecture name in the architecture declaration.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   architecture RTL of fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_014
################

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

This rule checks the case of the entity name in the architecture declaration.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of FIFO is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_015
################

|phase_3| |error| |blank_line|

This rule checks for blank lines below the architecture declaration.

|configuring_blank_lines_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo is
     signal wr_en : std_logic;
   begin

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

     signal wr_en : std_logic;
   begin

architecture_016
################

|phase_3| |error| |blank_line|

This rule checks for blank lines above the **begin** keyword.

|configuring_blank_lines_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo is

     signal wr_en : std_logic;
   begin

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

     signal wr_en : std_logic;

   begin

architecture_017
################

|phase_3| |error| |blank_line|

This rule checks for a blank line below the **begin** keyword.

|configuring_blank_lines_link|

**Violation**

.. code-block:: vhdl

   begin
     wr_en <= '0';

**Fix**

.. code-block:: vhdl

   begin

     wr_en <= '0';

architecture_018
################

|phase_3| |error| |blank_line|

This rule checks for blank lines or comments above the **end architecture** declaration.

|configuring_blank_lines_link|

**Violation**

.. code-block:: vhdl

     rd_en <= '1';
   end architecture RTL;

**Fix**

.. code-block:: vhdl

     rd_en <= '1';

   end architecture RTL;

architecture_019
################

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

This rule checks the proper case of the **of** keyword in the architecture declaration.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl OF fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_020
################

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

This rule checks the proper case of the **is** keyword in the architecture declaration.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo IS

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_021
################

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

This rule checks the proper case of the **begin** keyword.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo is
   BEGIN

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is
   begin

architecture_022
################

|phase_2| |error| |whitespace|

This rule checks for a single space before the entity name in the end architecture declaration.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   end architecture    fifo;

**Fix**

.. code-block:: vhdl

   end architecture fifo;

architecture_024
################

|phase_1| |error| |structure| |structure_optional|

This rule checks for the architecture name in the **end architecture** statement.
It is clearer to the reader to state which architecture the end statement is closing.

|configuring_optional_items_link|

**Violation**

.. code-block:: vhdl

   end architecture;

**Fix**

.. code-block:: vhdl

   end architecture architecture_name;

architecture_025
################

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

This rule checks for valid names for the architecture.
Typical architecture names are:  RTL, EMPTY, and BEHAVE.
This rule allows the user to restrict what can be used for an architecture name.

.. NOTE:: This rule is disabled by default.
   You can enable and configure the names using the following configuration.

   .. code-block:: yaml

      ---

      rule :
        architecture_025 :
          disable : False
          names :
            - rtl
            - empty
            - behave

**Violation**

.. code-block:: vhdl

   architecture some_invalid_arch_name of entity1 is

**Fix**

The user is required to decide which is the correct architecture name.

architecture_026
################

|phase_5| |error| |alignment|

This rule checks the colons are in the same column for all declarations in the architecture declarative part.

|configuring_keyword_alignment_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of my_entity is

     signal   wr_en : std_logic;
     signal   rd_en   : std_logic;
     constant c_period : time;

   begin

**Fix**

.. code-block:: vhdl

   architecture rtl of my_entity is

     signal   wr_en    : std_logic;
     signal   rd_en    : std_logic;
     constant c_period : time;

   begin

architecture_027
################

|phase_5| |error| |alignment|

This rule checks the alignment of inline comments in the architecture declarative part.

|configuring_keyword_alignment_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of my_entity is

     signal   wr_en    : std_logic;  -- Comment 1
     signal   rd_en    : std_logic;     -- Comment 2
     constant c_period : time; -- Comment 3

   begin

**Fix**

.. code-block:: vhdl

   architecture rtl of my_entity is

     signal   wr_en    : std_logic; -- Comment 1
     signal   rd_en    : std_logic; -- Comment 2
     constant c_period : time;      -- Comment 3

   begin

architecture_028
################

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

This rule checks the **architecture** keyword in the **end architecture** has proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   end ARCHITECTURE;

   end Architecture;

**Fix**

.. code-block:: vhdl

   end architecture;

   end architecture;

architecture_029
################

|phase_5| |error| |alignment|

This rule checks for alignment of names in alias, attribute, type, subtype, constant, signal, variable and file declarations in the architecture declarative region.

|configuring_identifier_alignment_rules_link|

**Violation**

.. code-block:: vhdl

   signal    sig1 : std_logic;
   file some_file :
   variable v_var1 : std_logic;
   type t_myType : std_logic;

**Fix**

.. code-block:: vhdl

   signal   sig1 : std_logic;
   file     some_file :
   variable v_var1 : std_logic;
   type     t_myType : std_logic;

architecture_030
################

|phase_2| |error| |whitespace|

This rule checks for a single space between **architecture** and the name.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   architecture    rtl of fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_031
################

|phase_2| |error| |whitespace|

This rule checks for a single space between the name and the **of** keyword.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl    of fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_032
################

|phase_2| |error| |whitespace|

This rule checks for a single space between the **of** keyword and the entity_name.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of    fifo is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_033
################

|phase_2| |error| |whitespace|

This rule checks for a single space between the entity_name and the **is** keyword.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   architecture rtl of fifo    is

**Fix**

.. code-block:: vhdl

   architecture rtl of fifo is

architecture_200
################

|phase_3| |error| |blank_line|

This rule checks for a blank line below the end architecture statement.

|configuring_blank_lines_link|

**Violation**

.. code-block:: vhdl

   end architecture;
   library ieee;

**Fix**

.. code-block:: vhdl

   end architecture;

   library ieee;

architecture_400
################

|phase_5| |error| |alignment|

This rule checks the colons are in the same column for all attribute specifications.

|configuring_keyword_alignment_rules_link|

**Violation**

.. code-block:: vhdl

     attribute mark_debug of wr_en : signal is "true";
     attribute mark_debug of almost_empty : signal is "true";
     attribute mark_debug of full : signal is "true";

**Fix**

.. code-block:: vhdl

     attribute mark_debug of wr_en        : signal is "true";
     attribute mark_debug of almost_empty : signal is "true";
     attribute mark_debug of full         : signal is "true";

architecture_600
################

|phase_6| |error| |case|

This rule checks for consistent capitalization of generic names in an architecture body.

**Violation**

.. code-block:: vhdl

   entity FIFO is
     generic (
       G_WIDTH : natural := 16
     );
   end entity fifo;

   architecture rtl of fifo is

      signal w_data : std_logic_vector(g_width - 1 downto 0);

   begin

      output <= large_data(g_width - 1 downto 0);

   end architecture rtl;

**Fix**

.. code-block:: vhdl

   entity FIFO is
     generic (
       G_WIDTH : natural := 16
     );
   end entity fifo;

   architecture rtl of fifo is

      signal w_data : std_logic_vector(G_WIDTH - 1 downto 0);

   begin

      output <= large_data(G_WIDTH - 1 downto 0);

   end architecture rtl;

architecture_601
################

|phase_6| |error| |case|

This rule checks for consistent capitalization of port names in an architecture body.

**Violation**

.. code-block:: vhdl

   entity FIFO is
     port (
       I_DATA : in std_logic_vector(31 downto 0)
     );
   end entity fifo;

   architecture rtl of fifo is

   begin

      register <= i_data;

   end architecture rtl;

**Fix**

.. code-block:: vhdl

   entity FIFO is
     port (
       I_DATA : in std_logic_vector(31 downto 0)
     );
   end entity fifo;

   architecture rtl of fifo is

   begin

      register <= I_DATA;

   end architecture rtl;
