2014-07-09 25 views
0

是什麼2個語句之間的區別,如果聲明的,雖然都做了同樣的過程中,必須有在他們兩人之間的一些差異使用在VHDL

如果(rising_edge CLK)和 如果rising_edge(CLK)

+2

簡單地說:第一個是等待發生的編譯錯誤。 –

+0

只是稍微簡單一點:如果您正在更改語法,但功能語法不那麼關鍵。 – fru1tbat

回答

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; 

我們看到的這些都是單一的參數是信號的兩種功能。

擴展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檢測到正轉換,而falling_edge轉換爲負轉換。

的To_X01函數調用有效地擁抱「H」到「L」和「L」到「H」躍遷,其是有效的std_ulogic值可映射到二進制值。