我的FPGA軟件具有拖放功能來開發元件或系統設計。它最適合於「通用」組件,它允許用戶設置可修改的參數,而無需進入代碼和改變內容。爲此,我決定創建一個帶有一個輸入和多個輸出的通用分流器。設計必須允許用戶定義輸出的數量和輸入和輸出端口的位寬(兩者都是相同的寬度)。該設計還必須根據所選輸出端口的數量(我已考慮使用某個功能的部分)確定輸出選擇端口的位寬。請注意,由於我的限制,輸出端口的數量可以在2到256個輸出之間。是否有可能在設計中爲可變數量的輸出編碼,或者是否是管道夢。請注意,我已經爲許多固定輸出解複用器編寫了代碼。是否可以使用VHDL編寫通用DEMUX(1輸入,多輸出)?
回答
我不確定我是否完全理解你在找什麼,但我會盡力回答正確。
首先,它取決於您的工具是否支持VHDL-2008。 VHDL-1993中有很多可定製的功能。
如果你這樣做也許可以工作:
首先需要在一個包中定義一個類型your_package.vhdl
然後,你可以定義你的實體如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE WORK.your_package.ALL;
ENTITY demux IS
GENERIC (PORT_WIDTH : integer := 8; -- define your data width
NB_OUTPUT : integer := 50); -- define the number of outputs needed
PORT (input : IN std_logic_vector(PORT_WIDTH - 1 DOWNTO 0);
output : OUT demux_output(0 TO NB_OUTPUT - 1)(PORT_WIDTH - 1 DOWNTO 0);
sel : IN std_logic_vector(7 DOWNTO 0));
END ENTITY;
ARCHITECTURE RTL OF demux IS
SIGNAL sel_int : integer := 0;
BEGIN
sel_int <= to_integer(unsigned(sel));
PROCESS (sel_int, input)
BEGIN
output <= (OTHERS => (OTHERS => '0'));
FOR i IN 0 TO (NB_OUTPUT - 1) LOOP
IF (i = sel_int) THEN
output(i) <= input;
END IF;
END LOOP;
END PROCESS;
END ARCHITECTURE;
在那裏,您只需要聲明端口的寬度(PORT_WIDTH
)和輸出端口的數量(NB_OUTPUT
)。
如果您的工具不符合VHDL-2008標準,您將無法聲明demux_output
類型的無約束數據寬度。這就是爲什麼你必須定義一個全局常量,但這可能會失去你想要的「可定製部分」。
如果您的工具支持VHDL2008,則可以使用類型泛型而不涉及包。 –
的確如此,但我覺得它缺乏「性感」:p –
終於有時間瞭解代碼並充分理解您的建議。你幾乎是正確的。在你給出的例子中,將輸入定向到數組中的某個位置,但不是實際的輸出端口。我的目標是將輸入連接到特定輸出,並將數據鎖存在該輸出。我想過使用一個數組,但認爲它不是我所期待的,因爲它然後需要我開發另一個訪問該數組並將其路由到唯一輸出的實體。看起來我無法將輸出數量設置爲通用功能。 –
以A.K和scary_jeff,謝謝你的迴應。我會用我的工具檢查它是否符合VHDL-2008。大家知道,我對VHDL非常陌生,並且很快就能學習,但我花了很長時間才能進入更復雜的設計,最終嘗試儘可能簡化。這是我遵循的幾條線,但對我來說是新的,例如;輸出:OUT demux_output(0 TO NB_OUTPUT - 1)(PORT_WIDTH - 1 DOWNTO 0);輸出:OUT demux_output(0 TO NB_OUTPUT - 1)(PORT_WIDTH - 1 DOWNTO 0);
雖然我明白它在說什麼,在我所做的所有研究中,沒有一個顯示出它的能力或例子。另一條線;
輸出< =(OTHERS =>(OTHERS =>'0'));
再次,我從來沒有看到任何關於關鍵字「其他」的文檔,所以這條線對我來說沒有意義。你能解釋一下,或者讓我知道我可以使用的「良好」VHDL資源。這樣,我可以向更復雜的問題尋求幫助,而不是問新手類型的問題。再次,謝謝。
- 1. 是否可以使用javaScript編寫HTML輸入onKeyPress事件?
- 2. 是否可以編輯Json輸出?
- 3. 如何使用GO讀取和寫入通用輸入輸出?
- 4. 是否可以在Fortran中使用動態輸入編寫函數?
- 5. 是否可以編寫輸出JSON的SQL函數?
- 6. 是否可以在Java中編寫通用多路複用器?
- 7. 可以使用拉丁-1編碼寫入標準輸出,但不能寫入文件(Python 2.6)
- 8. 如何驗證輸入2是否可以使用Java在輸入1中使用單詞構造?
- 9. 是否可以使.tt-輸入變寬?
- 10. Android:輸入/退出觸摸模式時是否可以通知?
- 11. 使用Hadoop多輸出寫入多個輸出啓用推測執行
- 12. Ruby是否使用$ stdout來編寫puts和return的輸出?
- 13. 如何編寫腳本,使輸出用作輸入?
- 14. 是否可以將GPIO配置爲輸入和輸出?
- 15. 是否可以使用.NET寫入CD?
- 16. 我可以使用T4將原始字節寫入輸出嗎?
- 17. 我可以使用Qt將字節寫入音頻輸出嗎?
- 18. 是否可以僅使用迭代器輸出1,...,n的排列?
- 19. 是否可以將inout信號轉換爲VHDL中的兩個信號(輸入和輸出)?
- 20. 編寫一個輸入驗證循環,要求用戶輸入「是」或「否」
- 21. 是否可以通過CSS使輸入字段爲只讀?
- 22. 是否可以將輸入查詢保留爲1行(Python 3)
- 23. 是否可以使用多個動態支點編寫查詢?
- 24. 使用jquery驗證多個輸入的1個輸入
- 25. 我是否正確使用輸入/輸出流庫?
- 26. 您是否在輸入或輸出過程中使用HtmlEncode?
- 27. 是否可以輸出使用jdbctemplate發送到mysql的sql?
- 28. 是否可以使用ExecuteQuery <T>的輸出參數?
- 29. 是否可以使用ABCpdf將數據流輸出到PDF?
- 30. 如何使用javascript編寫輸出?
問這樣一個問題的正常方法是包括一個你已經嘗試過的例子,並解釋它出了什麼問題。 –