VHDL:将信号与多个值进行比较

时间:2017-11-15 15:15:19

标签: loops vhdl fpga

我想将一个信号与预定义值列表进行比较,并检查该列表中是否至少存在相等的值(或者,如果列表中没有相等的值)。

示例应用程序:将received命令与预定义的有效命令列表进行比较,如果命令无效,则转到错误状态。想象一下,我们只有3个有效命令:0x00,0x01和0xFF。然后这段代码就可以了:

--valid commands: 0x00, 0x01, 0xFF

process(clk) is
--somewhere in the middle of FSM
  if cmd /= x"00" and cmd /= x"01" and cmd /= x"01" then
    next_state <= error;
  end if;
end process;

但我想知道如何有效地(在编码风格方面)为更长列表实现相同的功能,而无需手动比较每个值(即避免写像这样的行:)

if cmd=val1 or cmd=val2 or ... or cmd=valN then --imagine N=100

我想它与数组和循环有关吗?

1 个答案:

答案 0 :(得分:3)

对参考值数组的循环可能更容易维护:

subtype ref_value is std_ulogic_vector(7 downto 0);
type ref_value_array is array (natural range <>) of ref_value;
constant ref_values: ref_value_array(0 to 2) := (x"00", x"01",...);
...
next_state <= error;
for i in ref_values'range loop
  if cmd = ref_values(i) then
    next_state <= no_error;
    break;
  end if;
end loop;