1

让我们考虑以下内容(暂时忽略综合):

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;

我的目标是避免为了相同的操作而必须拥有大量的状态或在一起。

谢谢!

4

1 回答 1

2

无论您是使用others还是通过显式引用状态来描述操作,您都在描述相同的行为。合成器会将代码解释为在功能方面产生相同的输出,因此逻辑将是相同的。

如果您需要一个庞大的状态列表或一起为该功能,那么您必须拥有它们。

如果您在谈论“代码可读性”,那么请使用最适合这种情况的形式。

于 2012-07-19T08:33:53.803 回答