2012-07-18 45 views
1

讓我們考慮以下的(而忽略合成的時刻):VHDL數組類型個案處理

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; 

同樣將採取行動狀態3和state4具有相同的作用。爲別人的目的是對美國2相同的動作和5

難道還要做類似的東西「所要求的」跟隨

when state2 | state5 => do something 
when others => null; 

我的目標是,以避免產生巨大同一行動的國家列表OR'd在一起。

謝謝!

+0

請注意'case'語句不是**併發語句,而是一個順序語句(用於進程)。這種併發形式是'with ... select'語句。 – wap26 2012-07-19 09:10:57

回答

2

無論您使用others還是用明確引用狀態來描述操作,您都描述了相同的行爲。合成器將把該代碼解釋爲在功能方面產生相同的輸出,因此邏輯將是相同的。

如果你需要一個巨大的狀態ORed在一起的功能,那麼你必須擁有它們。

如果你正在談論「代碼可讀性」,那麼使用最適合這種情況的任何一種形式。

+0

同意,合成智慧:如果你需要它,你必須擁有它。 – wap26 2012-07-19 09:12:20