比方說,你有定義的信號如下:當整數超出VHDL的範圍時會發生什麼?
signal test_count : integer range 0 to 11;
現在,如果test_count以往任何時候都低於0或以上的模擬11就會使模擬立即崩潰。我想知道的是什麼時候這是綜合?如果test_count遞增過去11或遞減到0以下會發生什麼?合成工具會強制信號環繞嗎?請注意,我選擇了一個不容易迴繞爲0000的示例。
比方說,你有定義的信號如下:當整數超出VHDL的範圍時會發生什麼?
signal test_count : integer range 0 to 11;
現在,如果test_count以往任何時候都低於0或以上的模擬11就會使模擬立即崩潰。我想知道的是什麼時候這是綜合?如果test_count遞增過去11或遞減到0以下會發生什麼?合成工具會強制信號環繞嗎?請注意,我選擇了一個不容易迴繞爲0000的示例。
該工具假設信號處於設計範圍內,所以在這種情況下,電路可以給內部總線上的任何輸出使用 執行整數值。在這種情況下,對於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結果:
因此,在這種情況下,合成結果是一個帶有增量的4位計數器和 清除複用器的值,如信號clr_i
所選,並且沒有任何範圍 檢查。因此,如果控制clr_i
信號的設計沒有將值 保持在0到11的範圍內,則其可以輸出在0到11的聲明範圍之外的值,因此,即使在12到15之間的值也是如此。