0

我是 VHDL 的新手。我正在尝试根据多个条件的状态设置信号值。它在进程块之外。我想要做的甚至可能吗?如果是这样,我做错了什么?

这是我到目前为止所拥有的:

signal1<= my_data
WHEN ( bit_cond_true
AND (my_array /= X"00000") 
AND (my_array = another_array))
ELSE
other_data;

当我尝试在 ModelSim 中编译它时会发生这种情况:

** Error: file.VHD(62): No feasible entries for infix operator "and".
** Error: file.VHD(62): Bad expression in left operand of infix expression "and".
** Error: file.VHD(62): Type error resolving infix expression "and" as type   std.standard.boolean.
** Error: file.VHD(67): No feasible entries for infix operator "and".
** Error: file.VHD(66): Bad expression in left operand of infix expression "and".
** Error: file.VHD(67): Type error resolving infix expression "and" as type std.standard.boolean.
** Error: file.VHD(100): VHDL Compiler exiting
4

1 回答 1

3

首先,您尝试做的事情确实是可能的,在 VHDL 术语中称为“条件信号分配语句”。

您没有提供表达式中使用的信号的声明,但我会假设它们都是 std_logic 或 std_logic_vector,因此:

  signal signal1       : std_logic;                      -- Result
  signal my_data       : std_logic;                      -- Value if TRUE condition
  signal other_data    : std_logic;                      -- Value if FALSE condition
  signal bit_cond_true : std_logic;                      -- Condition part
  signal my_array      : std_logic_vector(19 downto 0);  -- --||--
  signal another_array : std_logic_vector(19 downto 0);  -- --||--

因此,VHDL 是一种强类型语言,您给出的条件何时无法解析,因为bit_cond_true它是一个 std_logic,并(my_array /= X"00000")解析为一个布尔值。因此,您会收到 ModelSim 错误中缀运算符“和”没有可行的条目。因为 ModelSim 试图用 解析表达式{std_logic} and {boolean},但它没有定义and带有参数组合的运算符。

转换为布尔值有不同的可能性bit_cond_true,这适用于 VHDL-2002 和 VHDL-2008:

  signal1 <= my_data when ((bit_cond_true = '1') and
                           (my_array /= X"00000") and
                           (my_array = another_array)) else
             other_data;

仅在 VHDL-2008 中,您还可以使用??运算符将​​ std_logic 值“1”或“H”转换为 TRUE,并将其他值转换为 FALSE。然后代码看起来:

  signal1 <= my_data when ((?? bit_cond_true) and
                           (my_array /= X"00000") and
                           (my_array = another_array)) else
             other_data;

要深入了解 VHDL 语言,我建议您深入阅读 Wikipedia VHDL中“进一步阅读”下的一本书

于 2013-07-25T06:45:28.877 回答