Why is this an issue?

All signals and variables should be assigned a value before being used.

How to fix it

Code examples

Noncompliant code example

entity top is
  port(
    i1 : in std_logic;
    i2 : in std_logic;
    o1 : out std_logic;
    o2 : out std_logic
  );
end;

architecture rtl of top is
  signal s : std_logic;
begin
  process(s, i1, i2) is
  begin
    if (s = '0') then -- Noncompliant: 's' has not been initialized
      o1 <= '1';
    else
      o1 <= '0';
    end if;
  end process;

  process(i1, i2) is
    variable v : std_logic;
  begin
    if (v = '0') then -- Noncompliant: 'v' has not been initialized
      o2 <= '1';
    else
      o2 <= '0';
    end if;
  end process;
end;

Compliant solution

entity top is
  port(
    i1 : in std_logic;
    i2 : in std_logic;
    o1 : out std_logic;
    o2 : out std_logic
  );
end;

architecture rtl of top is
  signal s : std_logic;
begin
  process(s, i1, i2) is
  begin
    s <= i1 or i2;
    if (s = '0') then -- Compliant: 's' has been initialized
      o1 <= '1';
    else
      o1 <= '0';
    end if;
  end process;

  process(i1, i2) is
    variable v : std_logic;
  begin
    v := i1 or i2;
    if (v = '0') then -- Compliant: 'v' has been initialized
      o2 <= '1';
    else
      o2 <= '0';
    end if;
  end process;
end;