2013-10-02 21 views
1

我有稱爲「inner_module」一個VHDL模塊,具有一定的輸入和輸出端口,例如封裝在伊勢XiliniX一個VHDL模塊的

entity inner_module is 
port (input1, input2 : in std_logic; 
     output1, output2 : out std_logic); 
end inner_module; 

,我想包括(封裝?)它在另一個模塊,叫做「outer_module」,這是一個類型的接口,以「inner_module」,這樣我就不必處理其所有細節。 假設「outer_module」具有輸入和輸出端口,如在

entity outer_module is 
port(outer_input1: in std_logic; 
    outer_output1: out std_logic); 
end outer_module; 

被闡述,並適當地與飼料的outer_module架構部分inner_module。爲了評估outer_output1,對內部輸出進行了詳細說明。

假設信號輸入1和輸出1是爲了驅動外部EVM,例如一個dac evm,連接到我的主EVM(virtex 6)。

在檢查語法,合成後,我必須將端口與引腳關聯(使用I/O引腳規劃),但唯一可關聯的端口是頂層模塊的端口,無法訪問信號輸入1和輸出1。

我可以在external_module的實體聲明中添加input1和output1,但我想「隱藏」我使用這些信號來驅動dac evm(可能是很多信號)的事實,並且只需具有與之前的outer_module實體聲明的接口。我想將輸入1和輸出1的信號關聯到正確的引腳,但不要「從頂層模塊」執行此操作。

可能嗎?任何想法或參考如何做到這一點?或者,我是否總是必須包含與頂級模塊中的引腳關聯的所有信號?

回答

1

我能想到的一個可能的解決了這個,但我不認爲這是一個好主意。我認爲你正在試圖避免你不應該做的事情。通過不通過更高級別塊從較低級別塊傳遞「隱藏」I/O,您實質上是要求您可以從任何地方訪問的全局信號/端口。沒有任何物理原因可以讓你無法做到這一點(即,您應該能夠將設計中的任何信號連接到FPGA引腳),但並不是人們會期望VHDL設計能夠工作。 「沒有人」喜歡「全球信號」或變量,因爲你失去了追蹤他們來自哪裏以及去哪裏的能力。

當你看到你的I/O的頂層設計,你應該考慮在I/O爲目標設備的引腳。任何在設計中與外界交流的東西都需要在頂層設計中有一個輸入或輸出。

這是不尋常的頂層設計,是因爲這個原因非常大的 - 通常有大量的互連。 SDRAM接口可以快速消除您頂級的信號數量。這裏有一些東西,你可以儘量減少噪音和雜波:

  • 內部模塊之間的連接時,利用記錄類似用途/功能的組信號。在您的設計中,inner_module可能有一個輸出端口,它具有記錄類型,其中包含需要輸出到頂層DAC DAC EVM的所有信號。我會避免在頂級設計的端口映射中使用記錄。這可能會導致與工具混淆,但這也可能是我的迷信。
  • 爲了管理多維數據和/或總線利用矢量,陣列(或數組的數組)。這可以大大減少混亂。您可以不用bit0,bit1,bit2,您可以使用一個名爲bits的信號(矢量),並以相同的方式處理信號的所有元素。
  • 在您的設計的頂層(或一層下)中放置與物理/外部(即SDRAM接口)對話的模塊,而不是在需要使用該接口的塊內。這避免了需要通過(可能)多個模塊層將外部接口信號引導到你的接口實例化的地方。
  • 利用良好的VHDL編輯器(我喜歡emacs和vhdlmode),它可以通過複製實體(端口映射)並將其作爲實例粘貼到列表中,從而大大減少複製/粘貼錯誤的數量的信號,作爲組件等。
+0

感謝您的答覆,但我仍然認爲,將「隱藏」信號連接到引腳的可能性有助於編寫更多可讀代碼。我認爲這與隱藏模塊的實際實現是一樣的。作爲一個初學者,我只需要適應它。 – Nicola

1

爲頂級端口使用記錄類型。在可以在連接兩端使用的包中聲明記錄(例如在FPGA和DAC的仿真模型中)。

您可以隱藏記錄中實際信號的細節;如果您需要更新記錄,頂層設計不需要更改。

由於端口只能有一個方向(mode,in,out或inout),所以通常使用一對記錄,一個記錄包含所有輸入信號,另一個記錄用於輸出。

在最外層則可能需要進行一些試驗(既然你提到賽靈思UCF文件)正確連接FPGA引腳來記錄compponents得到的工具...