2014-04-01 64 views
2

我還沒有看到任何地方展示了這個例子,直到現在我還沒有需要它。我可以在VHDL中使用-select-when語句嵌套嗎?

我有2個控制信號,我需要爲它們做一個嵌套的-select-when語句。我可以很容易地將事情與case語句嵌套在一起,但最近我意識到我需要在流程之外使用這些代碼,因爲它與時間緊密相關。下面是代碼我目前擁有:

case OpcodeIn is => 
    when "000000" => 
     case FunctIn is => 
      when "00000" => 
      ... 
      when "00001" ==> 
      ... 
     end case; 
    when "000001" => 
     ... 
end case; 

而且,我不能只串連,如:

controlSig <= OpcodeIn & FunctIn; 

,然後使用:

with controlSig select output <= 
    ... 

因爲載體作用只是取決於某些有效OpcodeIn的值。因此,只有在出現如下通配符時才能正常工作:

"0010" when "000001***********"; 

回答

2

試試吧,看看它是否有效!沒有理由說該語言禁止這種行爲。 VHDL不支持無關的case語句實際上是不正確的。從VHDL-2008開始,支持該功能。請參閱下面的例子:

process (Request) 
begin 
    case? Request is 
    when "1---" => Grant <= "1000" ; 
    when "01--" => Grant <= "0100" ; 
    when "001-" => Grant <= "0010" ; 
    when "0001" => Grant <= "0001" ; 
    when others => Grant <= "0000" ; 
    end case? ; 
end process ; 

的有一點要注意的是,你加入到這個過程中,更多的解碼邏輯,就越難將是滿足時序。

+0

謝謝。好吧,我很高興知道,我可以使用連字符作爲不關心case語句的內容,但我需要在with-select-when語句中使用連字符,因爲這是爲了避免需要進程!那麼它會在裏面起作用嗎? – krb686

+0

這是一個組合過程嗎?選擇分配只能用於組合過程。無論哪種方式,您都應該使用VHDL-2008進行試驗,並告訴我們它是否有效。 – Russell

+0

它應該是組合的,但我搞砸了,並順序。它是MIPS處理器的控制單元。 – krb686

2

併發的形式是:

with Request select? 
    Grant <= "1000" when "1---", 
      "0100" when "01--", 
      "0010" when "001-", 
      "0001" when "0001", 
      "0000" when others ; 

如上所述,這是不可能這部作品在Xilinx工具。請確保提交針對Xilinx工具的錯誤報告。每個錯誤報告都有助於他們理解實現新功能的重要性。一些他們如何錯過市場統計數據,清楚地表明VHDL是主流的FPGA設計和驗證語言。

上面的代碼示例是借來的:http://www.synthworks.com/papers/vhdl_2008_2012_2up.pdf

相關問題