具有多个条件的VHDL When语句

具有多个条件的VHDL When语句,vhdl,Vhdl,我不熟悉VHDL。我试图根据多个条件的状态设置信号值。它位于进程块的外部。我想做的是可能的吗?如果是,我做错了什么 这就是我到目前为止所做的: signal1<= my_data WHEN ( bit_cond_true AND (my_array /= X"00000") AND (my_array = another_array)) ELSE other_data; 首先,您试图做的事情确实是可能的,用VHDL术语称之为“条件信号分配语句” 您没有为表达式中使用的信号提供声明,但我

我不熟悉VHDL。我试图根据多个条件的状态设置信号值。它位于进程块的外部。我想做的是可能的吗?如果是,我做错了什么

这就是我到目前为止所做的:

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

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

您没有为表达式中使用的信号提供声明,但我将假设它们都是std_逻辑或std_逻辑向量,因此:

  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\u cond\u true
是标准逻辑,
(my\u array/=X“00000”)
解析为布尔值。因此,您会得到ModelSim错误没有中缀运算符的可行项”和“,因为ModelSim试图用
{std_logic}和{boolean}
解析表达式,但它没有定义带有参数组合的
运算符

bit\u cond\u 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语言,我建议您深入阅读维基百科“进一步阅读”下的一本书。首先,您试图做的事情确实是可能的,用VHDL术语称之为“条件信号分配语句”

您没有为表达式中使用的信号提供声明,但我将假设它们都是std_逻辑或std_逻辑向量,因此:

  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\u cond\u true
是标准逻辑,
(my\u array/=X“00000”)
解析为布尔值。因此,您会得到ModelSim错误没有中缀运算符的可行项”和“,因为ModelSim试图用
{std_logic}和{boolean}
解析表达式,但它没有定义带有参数组合的
运算符

bit\u cond\u 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语言,我建议您深入阅读维基百科“进一步阅读”下的一本书,

…然后发生了什么?…对不起!已编辑以包含编译器错误。请发布您的信号定义。事实上,发布一个最小但可编译的测试用例——这将避免我们错误地猜测细节。。。然后发生了什么?…对不起!已编辑以包含编译器错误。请发布您的信号定义。事实上,发布一个最小但可编译的测试用例——这将避免我们错误地猜测细节。这就是我一直在寻找的答案!谢谢你的解释!这就是我一直在寻找的答案!谢谢你的解释!