首页 文章

在VHDL中使用IF语句

提问于
浏览
0

2个语句之间有什么区别,虽然两个语句都是相同的过程,但它们之间存在一些差异

if(rising_edge clk)和rising_edge(clk)

1 回答

  • 0

    if 语句中的条件表达式应该返回一个布尔值 .

    函数调用的形式如下:

    function_call ::= 
       &nbspfunction_name [ ( actual_parameter_part ) ]
    
       &nbspactual_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;
    

    我们看到这些都是具有单个参数的函数,这些参数是信号 .

    当在IEEE标准的正文和附录中的语法摘要中找到时,扩展的Baccus-Naur形式(EBNF,VHDL的定义,而不是ISO标准)是规范性的 . 那些开括号和右括号都需要包含函数调用中传递的任何参数 .

    然后更巧妙的是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值 .

相关问题