让我们考虑以下内容(暂时忽略综合):
SIGNAL sig1 : std_logic_vector( 3 DOWNTO 0 ) := "0000";
CASE sig1 IS
when "0000" => do something
when "0001" => do something
when others => do something
END CASE;
我知道为sig1(“0000”,“0001”,“0010”,......,“1111”)的每个潜在“有效”值设置条件是非常好的做法,因为其他检查将包括'U','X'和'Z'。所以,这个好的做法告诉我们上面的例子不是很好的VHDL代码。
现在让我们考虑以下内容(记住综合):
TYPE state_type IS ( state0, state1, state2, state3, state4 );
SIGNAL sig2 : state_type;
CASE sig2 IS
when state0 => do something
when state1 => do something
when state3 | state4 => do something
when others => do something
END CASE;
将采取相同的操作state3和state4具有相同的操作。其他人的意图是对州2和5采取相同的行动。
是否仍然“需要”执行与以下内容类似的操作
when state2 | state5 => do something
when others => null;
我的目标是避免在同一行动中将大量状态列表组合在一起。
谢谢!
答案 0 :(得分:2)
无论是使用others
还是使用显式引用状态来描述操作,您都在描述相同的行为。合成器将代码解释为在功能方面产生相同的输出,因此逻辑将是相同的。
如果你需要一个巨大的状态列表,或者将它们组合在一起,那么你必须拥有它们。
如果您正在谈论“代码可读性”,那么请使用最适合情况的形式。