-------------------------------------------------------------------
-- edge detection
-------------------------------------------------------------------
FUNCTION rising_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND (To_X01(s) = '1') AND
(To_X01(s'LAST_VALUE) = '0'));
END;
FUNCTION falling_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND (To_X01(s) = '0') AND
(To_X01(s'LAST_VALUE) = '1'));
END;
1 回答
if
语句中的条件表达式应该返回一个布尔值 .函数调用的形式如下:
注意所需的开括号和右括号括起参数(参数) .
包std_logic_1164的包声明包含声明:
我们看到这些都是具有单个参数的函数,这些参数是信号 .
当在IEEE标准的正文和附录中的语法摘要中找到时,扩展的Baccus-Naur形式(EBNF,VHDL的定义,而不是ISO标准)是规范性的 . 那些开括号和右括号都需要包含函数调用中传递的任何参数 .
然后更巧妙的是Brian或Fru1tbat提到,在分析过程中可以发现函数调用语法问题 .
另一方面,如果您的问题是错误的,并且您认为包装正文包含两个函数的区别:
我们看到它们对事件(边缘或过渡)都敏感,并且rising_edge检测到正转换,而fall_edge则是负转换 .
To_X01函数调用有效地将'H'包含到'L'和'L'到'H'转换,这些转换是可以映射到二进制值的有效std_ulogic值 .