敏感性列表和等待语句
具有敏感性列表的进程也不能包含等待语句。它相当于同一个进程,没有敏感列表,还有一个最后一个语句:
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;