SIGNAL change_detected : boolean;
VARIABLE temp : std_logic_vector(2 DOWNTO 0);
它与移位器结合使用。它看起来像一个比较语句,它可能会显示1" change_detected"当前一个值" temp(2)"是零和当前值" temp(1)"是一个,但此代码不使用if else结构。有没有人参考语法及其工作原理?
VHDL中change_detected<= (temp(2) ='0') and (temp(1) ='1');
的语法参考是什么?
我看到的大多数VHDL引用都将比较语句显示为以下形式:
change_detected<= true when (temp(2) ='0') and (temp(1) ='1') else false;
或
if(temp(2) ='0') and (temp(1) ='1') then
change_detected<= true;
else
change_detected<= false;
end if;
答案 0 :(得分:0)
表达式(temp(2) = '0') and (temp(1) = '1')
(它不是一个语句)具有类型boolean
,可以在需要布尔表达式的任何地方使用。 when
或if
的控制表达式应为boolean
,因此应将值写入boolean
类型的信号。
总数
change_detected <= (temp(2) = '0') and (temp(1) = '1');
是一个信号分配声明。
您显示的替代方案实际上对您提供的声明不正确,因为它们都尝试将类型STD_LOGIC
的值分配到boolean
类型的信号中。
另一个值得注意的区别是,布尔表达式的信号分配会将change_detected
分配给true
或false
,而when
和if
形式将分配1
或保持值不变。在这方面,等同的STD_LOGIC
任务将是:
change_detected <= '1' when (temp(2) ='0') and (temp(1) ='1') else '0';
答案 1 :(得分:0)
对于声明:
SIGNAL change_detected : boolean; VARIABLE temp : std_logic_vector(2 DOWNTO 0);
VHDL语法参考是什么:
change_detected <= (temp(2) ='0') and (temp(1) ='1');
发现与移位器结合使用。它看起来像是一个比较 语句,并在
change_detected
为'0'时显示temp(2)
为TRUE 并且temp(1)
为'1',但此代码不使用if else 结构有没有人对语法及其工作原理有参考?
这是一个简单的信号分配声明(IEEE Std 1076-2008,10.5.2简单信号分配),其波形由关系形式的逻辑表达式(9.表达式,9.1概述)提供> AND 关系。
两个关系的形式为shift_expression relational_operator shift_expression,其中两个移位表达式都是简单表达式,关系运算符是“=”(相等),它返回一个BOOLEAN。
为BOOLEAN类型声明了一个AND运算符,它返回一个BOOLEAN类型,当两个关系计算为TRUE时为TRUE,或者当任一关系计算为FALSE时为FALSE。 (基本布尔代数)。
我看到的大多数VHDL引用都将比较语句显示为一个外观 喜欢:
change_detected <= true when (temp(2) ='0') and (temp(1) ='1') else false;
这是条件信号赋值语句的形式,它在2008版VHDL中可以是并发语句。 10.5.3条件信号分配中描述了它,它表明它有一个if语句(10.8 If语句)等效项,您将其显示为替代方案:
或
if (temp(2) ='0') and (temp(1) ='1') then change_detected <= true; else change_detected <= false; end if;
这些示例等同于上述简单的信号赋值语句。
另请注意,对于(temp(2) ='0')
和(temp(1) ='1')
,每个表达式的外括号都是多余的。