具有多个条件的VHDL When语句
我不熟悉VHDL。我试图根据多个条件的状态设置信号值。它位于进程块的外部。我想做的是可能的吗?如果是,我做错了什么 这就是我到目前为止所做的:具有多个条件的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术语称之为“条件信号分配语句” 您没有为表达式中使用的信号提供声明,但我
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语言,我建议您深入阅读维基百科“进一步阅读”下的一本书,…然后发生了什么?…对不起!已编辑以包含编译器错误。请发布您的信号定义。事实上,发布一个最小但可编译的测试用例——这将避免我们错误地猜测细节。。。然后发生了什么?…对不起!已编辑以包含编译器错误。请发布您的信号定义。事实上,发布一个最小但可编译的测试用例——这将避免我们错误地猜测细节。这就是我一直在寻找的答案!谢谢你的解释!这就是我一直在寻找的答案!谢谢你的解释!