--- Quote Start ---
I agree that your approach looks correct now.
However, without seeing the complete code, I cannot tell what's wrong. I have no clue what line 71 is, and I have no clue how the signals and types that are references in that line are declared. Keep that in mind before posting anything else.
Anyway, here's some code that passes synthesis, and should give you the right pointers:
type command_type is array(0 to 5) of std_logic_vector(7 downto 0);
type commands_type is array(0 to 2) of command_type;
signal commands: commands_type := (
0 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21"), --stop
1 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21"), --fwd
2 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21") --rev
);
--- Quote End ---
The problem was different types. VHDL is very strict about it.
This way it works
type str_t is array(integer range<>) of std_logic_vector(7 downto 0);
type commands is array(integer range<>) of str_t(0 to COM_SIZE);
constant commands_list : commands(0 to COM_COUNT) :=
(
0 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21"), --stop
1 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21"), --fwd
2 => (0 => x"00", 1 => x"01", 2 => x"10", 3 => x"11", 4 => x"20", 5 => x"21") --rev
);
type rx_buff_str is array (0 to RX_BUF_SIZE-1) of std_logic_vector(7 downto 0);
signal rx_uart_buf : rx_buff_str;
signal rx_command : str_t(0 to COM_SIZE);
----------------------------------
---------------------------------
---------------------------------
for i in 0 to COM_COUNT loop
if (commands_list(i) /= rx_command) then
end if;
end loop;