两个陈述之间有什么区别,虽然两个过程都是相同的,但两者之间存在一些差异
if(rising_edge clk)和 如果rising_edge(clk)
答案 0 :(得分:0)
if
语句中的条件表达式应该返回一个布尔值。
函数调用的形式为:
function_call ::=
function_name [ ( actual_parameter_part ) ] actual_parameter_part ::= parameter_association_list
注意所需的开括号和右括号括起参数(参数)。
association_list ::=
association_element { , association_element }
association_element ::=
[ formal_part => ] actual_part
包std_logic_1164的包声明包含声明:
FUNCTION rising_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN;
FUNCTION falling_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN;
我们看到这些都是具有信号的单个参数的函数。
扩展的Baccus-Naur形式(EBNF,VHDL的定义,而不是ISO标准)在IEEE标准的正文和附录中的语法摘要中是规范性的。那些开括号和右括号都需要包含函数调用中传递的任何参数。
然后Brian或Fru1tbat更加巧妙地提到,在分析过程中可以发现函数调用语法问题。
另一方面,如果您的问题是错误的,并且您认为包装正文包含两个函数的区别:
-------------------------------------------------------------------
-- 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;
我们发现它们对事件敏感(边缘或转换),并且rising_edge检测到正转换,而fall_edge则为负转换。
To_X01函数调用有效地将'H'包含在'L'和'L'到'H'的转换中,这些转换是可以映射到二进制值的有效std_ulogic值。