change_detected< =(temp(2)=' 0')和(temp(1)=' 1')的语法参考;在VHDL?

时间:2015-10-11 14:39:50

标签: vhdl fpga hdl

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;

2 个答案:

答案 0 :(得分:0)

表达式(temp(2) = '0') and (temp(1) = '1')(它不是一个语句)具有类型boolean,可以在需要布尔表达式的任何地方使用。 whenif的控制表达式应为boolean,因此应将值写入boolean类型的信号。

总数

change_detected <= (temp(2) = '0') and (temp(1) = '1');

是一个信号分配声明。

您显示的替代方案实际上对您提供的声明不正确,因为它们都尝试将类型STD_LOGIC的值分配到boolean类型的信号中。

另一个值得注意的区别是,布尔表达式的信号分配会将change_detected分配给truefalse,而whenif形式将分配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'),每个表达式的外括号都是多余的。