2013-12-18 52 views
2

比方說,你有定義的信號如下:當整數超出VHDL的範圍時會發生什麼?

signal test_count : integer range 0 to 11; 

現在,如果test_count以往任何時候都低於0或以上的模擬11就會使模擬立即崩潰。我想知道的是什麼時候這是綜合?如果test_count遞增過去11或遞減到0以下會發生什麼?合成工具會強制信號環繞嗎?請注意,我選擇了一個不容易迴繞爲0000的示例。

回答

4

該工具假設信號處於設計範圍內,所以在這種情況下,電路可以給內部總線上的任何輸出使用 執行整數值。在這種情況下,對於0到11,它將是一個4位總線, ,並且如果設計不保持範圍0到11的值,那麼甚至在範圍12到15中的「非法的」 值可以在電路中呈現通過合成。

此外,在值增加到11以上的情況下,計數器 然後是飽和還是換行?它根本沒有定義。

從具有明確下面的計數器的Altera公司QII結果:

architecture syn of mdl is -- Counter with clear 
    signal test_count : integer range 0 to 11; 
begin 

    process (clk_i) is 
    begin 
    if rising_edge(clk_i) then 
     if clr_i = '1' then -- Clear 
     test_count <= 0; 
     else -- Increment 
     test_count <= test_count + 1; 
     end if; 
    end if; 
    end process; 

    z_o <= std_logic_vector(to_unsigned(test_count, 4)); 

end architecture; 

在該圖中被示出爲RTL結果:

enter image description here

因此,在這種情況下,合成結果是一個帶有增量的4位計數器和 清除複用器的值,如信號clr_i所選,並且沒有任何範圍 檢查。因此,如果控制clr_i信號的設計沒有將值 保持在0到11的範圍內,則其可以輸出在0到11的聲明範圍之外的值,因此,即使在12到15之間的值也是如此。

相關問題