敏感性列表和等待語句
具有敏感性列表的程序也不能包含等待語句。它相當於同一個程序,沒有敏感列表,還有一個最後一個語句:
wait on <sensitivity_list>;
例:
process(clock, reset)
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clock) then
q <= d;
end if;
end process;
相當於:
process
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clock) then
q <= d;
end if;
wait on clock, reset;
end process;
VHDL2008 在靈敏度列表中引入了 all
關鍵字。它等同於在過程中某處讀取的所有訊號。在設計用於合成的組合過程時,避免不完整的靈敏度列表尤其方便。不完整敏感度列表的示例:
process(a, b)
begin
if ci = '0' then
s <= a xor b;
co <= a and b;
else
s <= a xnor b;
co <= a or b;
end if;
end process;
ci
訊號不是靈敏度列表的一部分,這很可能是編碼錯誤,導致合成前後的模擬不匹配。正確的程式碼是:
process(a, b, ci)
begin
if ci = '0' then
s <= a xor b;
co <= a and b;
else
s <= a xnor b;
co <= a or b;
end if;
end process;
在 VHDL2008 中,all
關鍵字簡化了這一過程並降低了風險:
process(all)
begin
if ci = '0' then
s <= a xor b;
co <= a and b;
else
s <= a xnor b;
co <= a or b;
end if;
end process;