2017-05-18 39 views
1

我的FPGA軟件具有拖放功能來開發元件或系統設計。它最適合於「通用」組件,它允許用戶設置可修改的參數,而無需進入代碼和改變內容。爲此,我決定創建一個帶有一個輸入和多個輸出的通用分流器。設計必須允許用戶定義輸出的數量和輸入和輸出端口的位寬(兩者都是相同的寬度)。該設計還必須根據所選輸出端口的數量(我已考慮使用某個功能的部分)確定輸出選擇端口的位寬。請注意,由於我的限制,輸出端口的數量可以在2到256個輸出之間。是否有可能在設計中爲可變數量的輸出編碼,或者是否是管道夢。請注意,我已經爲許多固定輸出解複用器編寫了代碼。是否可以使用VHDL編寫通用DEMUX(1輸入,多輸出)?

+0

問這樣一個問題的正常方法是包括一個你已經嘗試過的例子,並解釋它出了什麼問題。 –

回答

1

我不確定我是否完全理解你在找什麼,但我會盡力回答正確。

首先,它取決於您的工具是否支持VHDL-2008。 VHDL-1993中有很多可定製的功能。

如果你這樣做也許可以工作:

首先需要在一個包中定義一個類型your_package.vhdl

​​3210

然後,你可以定義你的實體如下:

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類型的無約束數據寬度。這就是爲什麼你必須定義一個全局常量,但這可能會失去你想要的「可定製部分」。

+1

如果您的工具支持VHDL2008,則可以使用類型泛型而不涉及包。 –

+0

的確如此,但我覺得它缺乏「性感」:p –

+0

終於有時間瞭解代碼並充分理解您的建議。你幾乎是正確的。在你給出的例子中,將輸入定向到數組中的某個位置,但不是實際的輸出端口。我的目標是將輸入連接到特定輸出,並將數據鎖存在該輸出。我想過使用一個數組,但認爲它不是我所期待的,因爲它然後需要我開發另一個訪問該數組並將其路由到唯一輸出的實體。看起來我無法將輸出數量設置爲通用功能。 –

0

以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資源。這樣,我可以向更復雜的問題尋求幫助,而不是問新手類型的問題。再次,謝謝。

相關問題