如果我的 VHDL 代码中有以下 case 语句
case state is
when ST_STATE1 =>
a <= '1';
when ST_STATE2 =>
b <= '1';
when ST_STATE3 =>
a <= '0';
b <= '0';
end case;
假设
a
和 b
在重置时已正确初始化和定义。我知道 b
中会有一个 ST_STATE1
的锁存器,并且 a
中会有一个 ST_STATE2
的锁存器,但这有什么不好吗?预期的行为将是以下之一
case state is
when ST_STATE1 =>
a <= '1';
b <= b;
when ST_STATE2 =>
a <= a;
b <= '1';
when ST_STATE3 =>
a <= '0';
b <= '0';
end case;
但是如果有更多的信号,以及更多可能的状态,我更愿意只列出实际上必须改变的信号。合成器总是会生成与第二个片段相同的代码吗?
总结评论并回答您的 2 个问题:
没有“ST_STATE1 中 b 的锁存器(或触发器)”的结构,但由于您的代码位于时钟进程内,因此信号 b 会有一个触发器,该触发器将被设置为状态 ST_STATE2 和 ST_STATE3 中的指定值,并且将将其值保持在状态 ST_STATE1。信号a也是如此。
这两个代码片段都没有什么“不好”的地方。我更喜欢第一个,但有时为了更好的可读性,我也使用第二个。
是的,会的。